# HG changeset patch # User Doug Simon # Date 1339675297 -7200 # Node ID e1aa233220065082686e01b6289ef7de6e366bd1 # Parent c78ba30e7e1aad178fbf3b45f300a7ff90825741 ensure that every runtime call has debug info associated with it diff -r c78ba30e7e1a -r e1aa23322006 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Jun 14 13:55:16 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Thu Jun 14 14:01:37 2012 +0200 @@ -974,8 +974,6 @@ @Override public void emitRuntimeCall(RuntimeCallNode x) { - // TODO Merge with emitCallToRuntime() method above. - Value resultOperand = resultOperandFor(x.kind()); CallingConvention cc = frameMap.registerConfig.getCallingConvention(RuntimeCall, x.call().arguments, target(), false); frameMap.callsMethod(cc, RuntimeCall); @@ -996,6 +994,11 @@ // TODO is it correct here that the pointerSlots are not passed to the oop map generation? info = stateFor(stateBeforeReturn, -1); + } else { + // Every runtime call needs an info + // TODO This is conservative. It's not needed for RuntimeCalls that are implemented purely in a stub + // that does not trash any registers and does not call into the runtime. + info = state(); } emitCall(x.call(), resultOperand, argList, Constant.forLong(0), info, null); diff -r c78ba30e7e1a -r e1aa23322006 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Thu Jun 14 13:55:16 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/NewInstanceStubCall.java Thu Jun 14 14:01:37 2012 +0200 @@ -49,7 +49,8 @@ public void generate(LIRGenerator gen) { Variable result = gen.newVariable(Kind.Object); gen.emitMove(gen.operand(hub), AMD64.rdx.asValue()); - AMD64NewInstanceStubCallOp op = new AMD64NewInstanceStubCallOp(result, AMD64.rdx.asValue()); + LIRDebugInfo info = gen.state(); + AMD64NewInstanceStubCallOp op = new AMD64NewInstanceStubCallOp(result, AMD64.rdx.asValue(), info); gen.append(op); gen.setResult(this, result); } diff -r c78ba30e7e1a -r e1aa23322006 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/AMD64NewInstanceStubCallOp.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/AMD64NewInstanceStubCallOp.java Thu Jun 14 13:55:16 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/target/AMD64NewInstanceStubCallOp.java Thu Jun 14 14:01:37 2012 +0200 @@ -29,6 +29,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.lir.*; import com.oracle.graal.lir.amd64.*; import com.oracle.graal.lir.asm.*; import com.oracle.max.asm.target.amd64.*; @@ -38,8 +39,8 @@ * and implemented in Runtime1::generate_code_for() which is located in c1_Runtime1_x86.cpp. */ public class AMD64NewInstanceStubCallOp extends AMD64LIRInstruction { - public AMD64NewInstanceStubCallOp(Value result, Value hub) { - super("NEW_INSTANCE", new Value[] {result}, null, new Value[] {hub}, NO_OPERANDS, NO_OPERANDS); + public AMD64NewInstanceStubCallOp(Value result, Value hub, LIRDebugInfo info) { + super("NEW_INSTANCE", new Value[] {result}, info, new Value[] {hub}, NO_OPERANDS, NO_OPERANDS); } @Override @@ -50,7 +51,7 @@ // rdx: (in) hub // rax: (out) result assert asRegister(hub) == AMD64.rdx; - AMD64Call.directCall(tasm, masm, HotSpotGraalRuntime.getInstance().getConfig().newInstanceStub, null); + AMD64Call.directCall(tasm, masm, HotSpotGraalRuntime.getInstance().getConfig().newInstanceStub, info); if (asRegister(result) != AMD64.rax) { masm.movq(asRegister(result), AMD64.rax); }