# HG changeset patch # User Lukas Stadler # Date 1403792855 -7200 # Node ID aeaad00ddce0f05d2b23a6fbf28cb2e0888ba01a # Parent 56b1e71d93ca804edcaa98d97cfa72b20d347e7b new constructor (with stateBefore) for AbstractDeoptimizeNode diff -r 56b1e71d93ca -r aeaad00ddce0 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractDeoptimizeNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -28,7 +28,7 @@ /** * This node represents an unconditional explicit request for immediate deoptimization. - * + * * After this node, execution will continue using a fallback execution engine (such as an * interpreter) at the position described by the {@link #stateBefore() deoptimization state}. */ @@ -40,6 +40,11 @@ super(StampFactory.forVoid()); } + public AbstractDeoptimizeNode(FrameState stateBefore) { + super(StampFactory.forVoid()); + this.stateBefore = stateBefore; + } + @Override public boolean canDeoptimize() { return true; diff -r 56b1e71d93ca -r aeaad00ddce0 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DeoptimizeNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -35,10 +35,11 @@ private final Constant speculation; public DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason) { - this(action, reason, 0, Constant.NULL_OBJECT); + this(action, reason, 0, Constant.NULL_OBJECT, null); } - public DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason, int debugId, Constant speculation) { + public DeoptimizeNode(DeoptimizationAction action, DeoptimizationReason reason, int debugId, Constant speculation, FrameState stateBefore) { + super(stateBefore); assert action != null; assert reason != null; assert speculation.getKind() == Kind.Object; diff -r 56b1e71d93ca -r aeaad00ddce0 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/DynamicDeoptimizeNode.java Thu Jun 26 16:27:35 2014 +0200 @@ -63,10 +63,8 @@ if (actionAndReason.isConstant() && speculation.isConstant()) { Constant constant = actionAndReason.asConstant(); Constant speculationConstant = speculation.asConstant(); - DeoptimizeNode newDeopt = graph().add( - new DeoptimizeNode(tool.getMetaAccess().decodeDeoptAction(constant), tool.getMetaAccess().decodeDeoptReason(constant), tool.getMetaAccess().decodeDebugId(constant), - speculationConstant)); - newDeopt.setStateBefore(stateBefore()); + DeoptimizeNode newDeopt = new DeoptimizeNode(tool.getMetaAccess().decodeDeoptAction(constant), tool.getMetaAccess().decodeDeoptReason(constant), tool.getMetaAccess().decodeDebugId( + constant), speculationConstant, stateBefore()); return newDeopt; } return this; diff -r 56b1e71d93ca -r aeaad00ddce0 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Thu Jun 26 16:27:35 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/GuardLoweringPhase.java Thu Jun 26 16:27:35 2014 +0200 @@ -158,7 +158,7 @@ StructuredGraph graph = guard.graph(); BeginNode fastPath = graph.add(new BeginNode()); @SuppressWarnings("deprecation") - DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason(), useGuardIdAsDebugId ? guard.getId() : 0, guard.getSpeculation())); + DeoptimizeNode deopt = graph.add(new DeoptimizeNode(guard.action(), guard.reason(), useGuardIdAsDebugId ? guard.getId() : 0, guard.getSpeculation(), null)); BeginNode deoptBranch = BeginNode.begin(deopt); BeginNode trueSuccessor; BeginNode falseSuccessor;