Mercurial > hg > graal-compiler
changeset 21598:05ecef0a6a24
LinearScanLifetimeAnalysisPhase: special case StackStoreOp.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Thu, 28 May 2015 13:07:25 +0200 |
parents | c0f9aa6dc4cd |
children | b8416bf57508 |
files | graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java |
diffstat | 1 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Thu May 28 13:06:01 2015 +0200 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScanLifetimeAnalysisPhase.java Thu May 28 13:07:25 2015 +0200 @@ -46,6 +46,7 @@ import com.oracle.graal.lir.LIRInstruction.OperandMode; import com.oracle.graal.lir.StandardOp.LabelOp; import com.oracle.graal.lir.StandardOp.MoveOp; +import com.oracle.graal.lir.StandardOp.StackStoreOp; import com.oracle.graal.lir.alloc.lsra.Interval.RegisterPriority; import com.oracle.graal.lir.alloc.lsra.Interval.SpillState; import com.oracle.graal.lir.alloc.lsra.LinearScan.BlockData; @@ -319,7 +320,7 @@ /* * liveIn(block) is the union of liveGen(block) with (liveOut(block) & * !liveKill(block)). - * + * * Note: liveIn has to be computed only in first iteration or if liveOut * has changed! */ @@ -561,6 +562,12 @@ interval.setSpillSlot(slot); interval.assignLocation(slot); } + } else if (op instanceof StackStoreOp) { + StackStoreOp store = (StackStoreOp) op; + StackSlot slot = asStackSlot(store.getStackSlot()); + Interval interval = allocator.intervalFor(store.getResult()); + interval.setSpillSlot(slot); + interval.setSpillState(SpillState.StartInMemory); } } @@ -644,6 +651,8 @@ if (label.isPhiIn()) { return RegisterPriority.None; } + } else if (op instanceof StackStoreOp) { + return RegisterPriority.ShouldHaveRegister; } // all other operands require a register