# HG changeset patch # User Tom Rodriguez # Date 1425607056 28800 # Node ID d57ca11a6883931e9d89cec4d210d6d14af79423 # Parent ef30b231865806403c77a683c749931e4824c41a Use FixedGuard in tryCheckcastSingleImplementor diff -r ef30b2318658 -r d57ca11a6883 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Thu Mar 05 16:58:12 2015 -0800 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java Thu Mar 05 17:57:36 2015 -0800 @@ -190,7 +190,6 @@ if (singleImplementor != null && !singleImplementor.equals(declaredReceiverType)) { ResolvedJavaMethod singleImplementorMethod = singleImplementor.resolveMethod(targetMethod(), invoke().getContextType(), true); if (singleImplementorMethod != null) { - assert graph().getGuardsStage().allowsFloatingGuards() : "Graph already fixed!"; /** * We have an invoke on an interface with a single implementor. We can replace this * with an invoke virtual. @@ -203,9 +202,8 @@ * properties by checking of the receiver is an instance of the single implementor. */ LogicNode condition = graph().unique(new InstanceOfNode(singleImplementor, receiver, getProfile())); - GuardNode guard = graph().unique( - new GuardNode(condition, AbstractBeginNode.prevBegin(invoke().asNode()), DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, - false, JavaConstant.NULL_POINTER)); + FixedGuardNode guard = graph().add(new FixedGuardNode(condition, DeoptimizationReason.OptimizedTypeCheckViolated, DeoptimizationAction.InvalidateRecompile, false)); + graph().addBeforeFixed(invoke().asNode(), guard); PiNode piNode = graph().unique(new PiNode(receiver, StampFactory.declaredNonNull(singleImplementor), guard)); arguments().set(0, piNode); setInvokeKind(InvokeKind.Virtual); diff -r ef30b2318658 -r d57ca11a6883 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Thu Mar 05 16:58:12 2015 -0800 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Thu Mar 05 17:57:36 2015 -0800 @@ -785,6 +785,7 @@ if (replacementAnchor == null) { replacementAnchor = AbstractBeginNode.prevBegin(checkCast); } + assert !(replacementAnchor instanceof FloatingNode) : "unsafe to mix unlowered Checkcast with floating guards"; PiNode piNode; if (isNull) { ConstantNode nullObject = ConstantNode.defaultForKind(Kind.Object, graph);