changeset 21318:88f8bbed600f

LinearScan: move intervalInLoop to LifetimeAnalysis.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 12 May 2015 10:13:06 +0200
parents 15ec3912cffb
children 9ddb5a749eab
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LifetimeAnalysis.java graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java
diffstat 2 files changed, 13 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LifetimeAnalysis.java	Tue May 12 10:07:09 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LifetimeAnalysis.java	Tue May 12 10:13:06 2015 +0200
@@ -67,6 +67,15 @@
     }
 
     /**
+     * Bit set for each variable that is contained in each loop.
+     */
+    BitMap2D intervalInLoop;
+
+    boolean isIntervalInLoop(int interval, int loop) {
+        return intervalInLoop.at(interval, loop);
+    }
+
+    /**
      * Numbers all instructions in all blocks. The numbering follows the
      * {@linkplain ComputeBlockOrder linear scan order}.
      */
@@ -125,7 +134,7 @@
     void computeLocalLiveSets() {
         int liveSize = allocator.liveSetSize();
 
-        allocator.intervalInLoop = new BitMap2D(allocator.operandSize(), allocator.numLoops());
+        intervalInLoop = new BitMap2D(allocator.operandSize(), allocator.numLoops());
 
         // iterate all blocks
         for (final AbstractBlockBase<?> block : allocator.sortedBlocks) {
@@ -147,7 +156,7 @@
                             }
                         }
                         if (block.getLoop() != null) {
-                            allocator.intervalInLoop.setBit(operandNum, block.getLoop().getIndex());
+                            intervalInLoop.setBit(operandNum, block.getLoop().getIndex());
                         }
                     }
 
@@ -174,7 +183,7 @@
                             Debug.log("liveKill for operand %d(%s)", varNum, operand);
                         }
                         if (block.getLoop() != null) {
-                            allocator.intervalInLoop.setBit(varNum, block.getLoop().getIndex());
+                            intervalInLoop.setBit(varNum, block.getLoop().getIndex());
                         }
                     }
 
@@ -649,7 +658,7 @@
                          * anywhere inside this loop. It's possible that the block was part of a
                          * non-natural loop, so it might have an invalid loop index.
                          */
-                        if (block.isLoopEnd() && block.getLoop() != null && allocator.isIntervalInLoop(operandNum, block.getLoop().getIndex())) {
+                        if (block.isLoopEnd() && block.getLoop() != null && isIntervalInLoop(operandNum, block.getLoop().getIndex())) {
                             allocator.intervalFor(operandNum).addUsePos(blockTo + 1, RegisterPriority.LiveAtLoopEnd);
                         }
                     }
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java	Tue May 12 10:07:09 2015 +0200
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java	Tue May 12 10:13:06 2015 +0200
@@ -35,7 +35,6 @@
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.compiler.common.alloc.*;
 import com.oracle.graal.compiler.common.cfg.*;
-import com.oracle.graal.compiler.common.util.*;
 import com.oracle.graal.debug.*;
 import com.oracle.graal.lir.*;
 import com.oracle.graal.lir.LIRInstruction.OperandFlag;
@@ -155,11 +154,6 @@
     AbstractBlockBase<?>[] opIdToBlockMap;
 
     /**
-     * Bit set for each variable that is contained in each loop.
-     */
-    BitMap2D intervalInLoop;
-
-    /**
      * The {@linkplain #operandNumber(Value) number} of the first variable operand allocated.
      */
     private final int firstVariableNumber;
@@ -343,10 +337,6 @@
         return ir.getControlFlowGraph().getLoops().size();
     }
 
-    boolean isIntervalInLoop(int interval, int loop) {
-        return intervalInLoop.at(interval, loop);
-    }
-
     Interval intervalFor(int operandNumber) {
         return intervals[operandNumber];
     }