Mercurial > hg > truffle
diff graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java @ 2633:721a45190d6d
Merge.
author | Thomas Wuerthinger <thomas@wuerthinger.net> |
---|---|
date | Tue, 10 May 2011 18:12:26 +0200 |
parents | 776e026f2e15 569228710be8 |
children | 4dd0573f510b |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Tue May 10 17:17:28 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Tue May 10 18:12:26 2011 +0200 @@ -27,7 +27,6 @@ import static com.sun.cri.ci.CiCallingConvention.Type.*; import static com.sun.cri.ci.CiValue.*; -import java.lang.reflect.*; import java.util.*; import com.sun.c1x.*; @@ -43,7 +42,6 @@ import com.sun.c1x.util.*; import com.sun.c1x.value.*; import com.sun.c1x.value.FrameState.PhiProcedure; -import com.sun.cri.bytecode.*; import com.sun.cri.bytecode.Bytecodes.MemoryBarriers; import com.sun.cri.ci.*; import com.sun.cri.ri.*; @@ -268,6 +266,10 @@ @Override public void visitBase(Base x) { + // emit phi-instruction move after safepoint since this simplifies + // describing the state at the safepoint. + //moveToPhi(); + // all blocks with a successor must end with an unconditional jump // to the successor even if they are consecutive lir.jump(x.defaultSuccessor()); @@ -295,7 +297,7 @@ @Override public void visitResolveClass(ResolveClass i) { - LIRDebugInfo info = stateFor(i); + LIRDebugInfo info = stateFor(i, i.stateAfter()); XirSnippet snippet = xir.genResolveClass(site(i), i.type, i.portion); emitXir(snippet, i, info, null, true); } @@ -443,29 +445,25 @@ lir.cmove(i.condition(), tVal, fVal, reg); } - /*protected FrameState stateBeforeInvoke(Invoke invoke) { + protected FrameState stateBeforeInvoke(Invoke invoke) { FrameState stateAfter = invoke.stateAfter(); FrameStateBuilder builder = new FrameStateBuilder(compilation.method, invoke.graph()); - System.out.println("stateBeforeInvoke(" + invoke + "); maxStack=" + compilation.method.maxStackSize()); - System.out.println("stateAfter=" + stateAfter); builder.initializeFrom(stateAfter); if (invoke.kind != CiKind.Void) { - Value pop = builder.pop(invoke.kind); - System.out.println("pop " + pop); + builder.pop(invoke.kind); } int argumentCount = invoke.argumentCount(); // invoke.arguments() iterable? for (int i = 0; i < argumentCount; i++) { Value arg = invoke.argument(i); - System.out.println("push " + arg); builder.push(arg.kind, arg); } return builder.create(invoke.bci()); - }*/ + } @Override public void visitInvoke(Invoke x) { RiMethod target = x.target(); - LIRDebugInfo info = stateFor(x); + LIRDebugInfo info = stateFor(x, stateBeforeInvoke(x)); XirSnippet snippet = null; @@ -1001,14 +999,18 @@ return operand; } + private FrameState stateBeforeRegisterFinalizer(RegisterFinalizer rf) { + Value object = rf.object(); + FrameStateBuilder builder = new FrameStateBuilder(compilation.method, rf.graph()); + builder.initializeFrom(rf.stateAfter()); + builder.push(object.kind, object); + return builder.create(rf.bci()); + } + @Override public void visitRegisterFinalizer(RegisterFinalizer x) { - Value object = x.object(); - CiValue receiver = load(object); - FrameStateBuilder builder = new FrameStateBuilder(compilation.method, x.graph()); - builder.initializeFrom(x.stateAfter()); - builder.push(object.kind, object); - LIRDebugInfo info = stateFor(x, builder.create(x.bci())); + CiValue receiver = load(x.object()); + LIRDebugInfo info = stateFor(x, stateBeforeRegisterFinalizer(x)); callRuntime(CiRuntimeCall.RegisterFinalizer, info, receiver); setNoResult(x); } @@ -1463,10 +1465,10 @@ } protected LIRDebugInfo maybeStateFor(Instruction x) { - if (lastState == null) { + if (x.stateAfter() == null) { return null; } - return stateFor(x, lastState); + return stateFor(x, x.stateAfter()); } protected LIRDebugInfo stateFor(Instruction x) { @@ -1638,16 +1640,9 @@ return "XirSupport<" + current + ">"; } + } - private CiValue emitInvokeKnown(RiMethod method, FrameState stateBefore, Value... args) { - boolean isStatic = Modifier.isStatic(method.accessFlags()); - Invoke invoke = new Invoke(isStatic ? Bytecodes.INVOKESTATIC : Bytecodes.INVOKESPECIAL, method.signature().returnKind(), args, method, null, stateBefore, null); - visitInvoke(invoke); - return invoke.operand(); - } - - @Override public void visitFrameState(FrameState i) { // nothing to do for now