Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetIntrinsificationPhase.java @ 6409:823a2978e7ba
Lowering of call targets to direct / indirect call targets
author | Christian Wimmer <christian.wimmer@oracle.com> |
---|---|
date | Fri, 14 Sep 2012 14:45:47 -0700 |
parents | e5768e936147 |
children | b74402a7079b |
line wrap: on
line diff
--- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetIntrinsificationPhase.java Fri Sep 14 14:21:33 2012 -0700 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/SnippetIntrinsificationPhase.java Fri Sep 14 14:45:47 2012 -0700 @@ -56,7 +56,9 @@ protected void run(StructuredGraph graph) { for (Invoke i : graph.getInvokes()) { try { - tryIntrinsify(i); + if (i.callTarget() instanceof MethodCallTargetNode) { + tryIntrinsify(i); + } } catch (NonConstantParameterError t) { if (!intrinsificationOrFoldingCanBeDeferred) { throw t; @@ -78,7 +80,7 @@ } private void tryIntrinsify(Invoke invoke) { - ResolvedJavaMethod target = invoke.callTarget().targetMethod(); + ResolvedJavaMethod target = invoke.methodCallTarget().targetMethod(); NodeIntrinsic intrinsic = target.getAnnotation(Node.NodeIntrinsic.class); if (intrinsic != null) { assert target.getAnnotation(Fold.class) == null; @@ -104,7 +106,7 @@ // Prepare the arguments for the reflective method call Object[] arguments = prepareArguments(invoke, parameterTypes, target, true); Object receiver = null; - if (!invoke.callTarget().isStatic()) { + if (!invoke.methodCallTarget().isStatic()) { receiver = arguments[0]; arguments = Arrays.asList(arguments).subList(1, arguments.length).toArray(); } @@ -137,13 +139,13 @@ Object[] reflectionCallArguments = new Object[arguments.size()]; for (int i = 0; i < reflectionCallArguments.length; ++i) { int parameterIndex = i; - if (!invoke.callTarget().isStatic()) { + if (!invoke.methodCallTarget().isStatic()) { parameterIndex--; } ValueNode argument = tryBoxingElimination(parameterIndex, target, arguments.get(i)); if (folding || MetaUtil.getParameterAnnotation(ConstantNodeParameter.class, parameterIndex, target) != null) { if (!(argument instanceof ConstantNode)) { - throw new NonConstantParameterError("parameter " + parameterIndex + " must be a compile time constant for calling " + invoke.callTarget().targetMethod() + " at " + sourceLocation(invoke.node()) + ": " + argument); + throw new NonConstantParameterError("parameter " + parameterIndex + " must be a compile time constant for calling " + invoke.methodCallTarget().targetMethod() + " at " + sourceLocation(invoke.node()) + ": " + argument); } ConstantNode constantNode = (ConstantNode) argument; Constant constant = constantNode.asConstant(); @@ -193,7 +195,7 @@ if (node.usages().size() == 2) { if (node instanceof Invoke) { Invoke invokeNode = (Invoke) node; - MethodCallTargetNode callTarget = invokeNode.callTarget(); + MethodCallTargetNode callTarget = invokeNode.methodCallTarget(); if (pool.isBoxingMethod(callTarget.targetMethod())) { FrameState stateAfter = invokeNode.stateAfter(); assert stateAfter.usages().size() == 1;