Mercurial > hg > graal-compiler
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]; }