changeset 18440:7aae90a0031c

LIR: map all VirtualStackSlot operands to StackSlots.
author Josef Eisl <josef.eisl@jku.at>
date Tue, 11 Nov 2014 17:03:16 +0100
parents 180b55c6a189
children d11ce424f09d
files graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java
diffstat 1 files changed, 24 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java	Tue Nov 11 17:01:47 2014 +0100
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/LIR.java	Tue Nov 11 17:03:16 2014 +0100
@@ -26,8 +26,11 @@
 
 import java.util.*;
 
+import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.cfg.*;
+import com.oracle.graal.debug.*;
+import com.oracle.graal.debug.Debug.Scope;
 import com.oracle.graal.lir.FrameMapBuilder.FrameMappable;
 import com.oracle.graal.lir.FrameMapBuilder.FrameMappingTool;
 import com.oracle.graal.lir.StandardOp.BlockEndOp;
@@ -225,15 +228,27 @@
     }
 
     public void map(FrameMappingTool tool) {
-        ValueProcedure updateProc = (value, mode, flags) -> {
-            if (isVirtualStackSlot(value)) {
-                return tool.getStackSlot(asVirtualStackSlot(value));
-            }
-            return value;
-        };
-        for (AbstractBlock<?> block : getControlFlowGraph().getBlocks()) {
-            for (LIRInstruction inst : getLIRforBlock(block)) {
-                inst.forEachAlive(updateProc);
+        try (Scope scope = Debug.scope("StackSlotMappingLIR")) {
+            ValueProcedure updateProc = (value, mode, flags) -> {
+                if (isVirtualStackSlot(value)) {
+                    StackSlot stackSlot = tool.getStackSlot(asVirtualStackSlot(value));
+                    Debug.log("map %s -> %s", value, stackSlot);
+                    return stackSlot;
+                }
+                return value;
+            };
+            for (AbstractBlock<?> block : getControlFlowGraph().getBlocks()) {
+                try (Indent indent0 = Debug.logAndIndent("block: %s", block)) {
+                    for (LIRInstruction inst : getLIRforBlock(block)) {
+                        try (Indent indent1 = Debug.logAndIndent("Inst: %d: %s", inst.id(), inst)) {
+                            inst.forEachAlive(updateProc);
+                            inst.forEachInput(updateProc);
+                            inst.forEachOutput(updateProc);
+                            inst.forEachTemp(updateProc);
+                            inst.forEachState(updateProc);
+                        }
+                    }
+                }
             }
         }
     }