# HG changeset patch # User Josef Eisl # Date 1431418386 -7200 # Node ID 88f8bbed600f12844f7ad04e0307eca7b27170fe # Parent 15ec3912cffb5d114d084cb536dc3bf5db5659f2 LinearScan: move intervalInLoop to LifetimeAnalysis. diff -r 15ec3912cffb -r 88f8bbed600f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LifetimeAnalysis.java --- 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); } } diff -r 15ec3912cffb -r 88f8bbed600f graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java --- 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]; }