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