diff graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java @ 2771:056e392d63d4

Connected local variables to start node. No more need for frame state to emit locals.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Tue, 24 May 2011 09:49:04 +0200
parents dd6419f4bfe2
children 3e3338a1abb9
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java	Mon May 23 21:22:06 2011 +0200
+++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java	Tue May 24 09:49:04 2011 +0200
@@ -273,23 +273,22 @@
         return x.operand();
     }
 
-    private void setOperandsForLocals(FrameState state) {
+    private void setOperandsForLocals() {
         CiCallingConvention args = compilation.frameMap().incomingArguments();
-        int javaIndex = 0;
-        for (int i = 0; i < args.locations.length; i++) {
-            CiValue src = args.locations[i];
-            assert src.isLegal() : "check";
+        for (Node node : compilation.graph.start().usages()) {
+            if (node instanceof Local) {
+                Local local = (Local) node;
+                int i = local.index();
 
-            CiVariable dest = newVariable(src.kind.stackKind());
-            lir.move(src, dest, src.kind);
+                CiValue src = args.locations[i];
+                assert src.isLegal() : "check";
 
-            // Assign new location to Local instruction for this local
-            Value instr = state.localAt(javaIndex);
-            Local local = ((Local) instr);
-            CiKind kind = src.kind.stackKind();
-            assert kind == local.kind.stackKind() : "local type check failed";
-            setResult(local, dest);
-            javaIndex += kind.jvmSlots;
+                CiVariable dest = newVariable(src.kind.stackKind());
+                lir.move(src, dest, src.kind);
+
+                assert src.kind.stackKind() == local.kind.stackKind() : "local type check failed";
+                setResult(local, dest);
+            }
         }
     }
 
@@ -894,7 +893,7 @@
             if (prologue != null) {
                 emitXir(prologue, null, null, null, false);
             }
-            setOperandsForLocals(ir.getHIRStartBlock().end().stateAfter());
+            setOperandsForLocals();
         }
     }