Mercurial > hg > truffle
changeset 8149:8fe43a4301dd
Merge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 07 Mar 2013 14:38:28 +0100 |
parents | 12b4f1521a0d (diff) 9786ac8fff61 (current diff) |
children | b66f831ac5ab |
files | |
diffstat | 1 files changed, 9 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java Thu Mar 07 11:58:34 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java Thu Mar 07 14:38:28 2013 +0100 @@ -46,6 +46,11 @@ */ final class LinearScanWalker extends IntervalWalker { + /** + * Delta how much a probability must be lower to be considered a better split position. + */ + private static final double DELTA_FACTOR = 0.75; + private final boolean callKillsRegisters; private Register[] availableRegs; @@ -280,6 +285,7 @@ } int minLoopDepth = maxBlock.getLoopDepth(); + double probability = maxBlock.getProbability(); for (int i = toBlockNr - 1; i >= fromBlockNr; i--) { Block cur = blockAt(i); @@ -287,6 +293,9 @@ // block with lower loop-depth found . split at the end of this block minLoopDepth = cur.getLoopDepth(); optimalSplitPos = allocator.getLastLirInstructionId(cur) + 2; + } else if (cur.getLoopDepth() == minLoopDepth && cur.getProbability() < probability * DELTA_FACTOR) { + probability = cur.getProbability(); + optimalSplitPos = allocator.getLastLirInstructionId(cur) + 2; } } assert optimalSplitPos > allocator.maxOpId() || allocator.isBlockBegin(optimalSplitPos) : "algorithm must move split pos to block boundary";