Mercurial > hg > truffle
changeset 13946:28b59501c7b2
Documentation for jump emission logic.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Thu, 13 Feb 2014 11:18:11 +0100 |
parents | 285d38e44ae5 |
children | 1ea1566100bf |
files | graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java |
diffstat | 1 files changed, 8 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Wed Feb 12 23:57:22 2014 -0800 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ControlFlow.java Thu Feb 13 11:18:11 2014 +0100 @@ -76,6 +76,14 @@ @Override public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { + /* + * The strategy for emitting jumps is: If either trueDestination or falseDestination is + * the successor block, assume the block scheduler did the correct thing and jcc to the + * other. Otherwise, we need a jcc followed by a jmp. Use the branch probability to make + * sure it is more likely to branch on the jcc (= less likely to execute both the jcc + * and the jmp instead of just the jcc). In the case of loops, that means the jcc is the + * back-edge. + */ if (crb.isSuccessorEdge(trueDestination)) { jcc(masm, true, falseDestination); } else if (crb.isSuccessorEdge(falseDestination)) {