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";