Mercurial > hg > truffle
changeset 8899:87aebe2843a5
Use the DeoptimizingNode interface of the Invokes in the LIRGenerator
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Mon, 08 Apr 2013 15:13:05 +0200 |
parents | 9f56bb503db4 |
children | 822163edb8bf |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java |
diffstat | 1 files changed, 12 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Mon Apr 08 17:27:16 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Mon Apr 08 15:13:05 2013 +0200 @@ -225,6 +225,13 @@ return stateFor(deopt.getDeoptimizationState(), deopt.getDeoptimizationReason()); } + public LIRFrameState stateWithExceptionEdge(DeoptimizingNode deopt, LabelRef exceptionEdge) { + if (!deopt.canDeoptimize()) { + return null; + } + return stateForWithExceptionEdge(deopt.getDeoptimizationState(), deopt.getDeoptimizationReason(), exceptionEdge); + } + public LIRFrameState stateFor(FrameState state, DeoptimizationReason reason) { return stateForWithExceptionEdge(state, reason, null); } @@ -233,6 +240,7 @@ if (needOnlyOopMaps()) { return new LIRFrameState(null, null, null, (short) -1); } + assert state != null; return debugInfoBuilder.build(state, lir.getDeoptimizationReasons().addSpeculation(reason), exceptionEdge); } @@ -603,13 +611,13 @@ Value[] parameters = visitInvokeArguments(cc, callTarget.arguments()); - LIRFrameState callState = null; - if (x.stateAfter() != null) { - callState = stateForWithExceptionEdge(x.stateDuring(), null, x instanceof InvokeWithExceptionNode ? getLIRBlock(((InvokeWithExceptionNode) x).exceptionEdge()) : null); + LabelRef exceptionEdge = null; + if (x instanceof InvokeWithExceptionNode) { + exceptionEdge = getLIRBlock(((InvokeWithExceptionNode) x).exceptionEdge()); } + LIRFrameState callState = stateWithExceptionEdge(x, exceptionEdge); Value result = cc.getReturn(); - if (callTarget instanceof DirectCallTargetNode) { emitDirectCall((DirectCallTargetNode) callTarget, result, parameters, cc.getTemporaries(), callState); } else if (callTarget instanceof IndirectCallTargetNode) {