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