Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/MethodCallTargetNode.java @ 19707:d57ca11a6883
Use FixedGuard in tryCheckcastSingleImplementor
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Thu, 05 Mar 2015 17:57:36 -0800 |
parents | 8fc336a04d77 |
children | 3362ba500371 |
line wrap: on
line diff
--- 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);