Mercurial > hg > truffle
changeset 8148:12b4f1521a0d
Experiment with using probability information for finding split position.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Thu, 07 Mar 2013 14:38:20 +0100 |
parents | 42927585be33 |
children | 8fe43a4301dd |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java |
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 10:18:34 2013 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/alloc/LinearScanWalker.java Thu Mar 07 14:38:20 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";