Mercurial > hg > truffle
changeset 20047:97dbe2c74073
don't push MethodHandleNodes with void return type to the stack
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 27 Mar 2015 14:03:46 +0100 |
parents | 116c600253e5 |
children | 8af4e7e0ac9f |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInvocationPlugins.java |
diffstat | 1 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInvocationPlugins.java Fri Mar 27 14:03:04 2015 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotInvocationPlugins.java Fri Mar 27 14:03:46 2015 +0100 @@ -110,10 +110,16 @@ if (invokeKind != InvokeKind.Static) { receiver.get(); } + JavaType invokeReturnType = b.getInvokeReturnType(); InvokeNode invoke = MethodHandleNode.tryResolveTargetInvoke(b.getAssumptions(), b.getConstantReflection().getMethodHandleAccess(), intrinsicMethod, targetMethod, - b.bci(), b.getInvokeReturnType(), argsIncludingReceiver); + b.bci(), invokeReturnType, argsIncludingReceiver); if (invoke == null) { - b.addPush(new MethodHandleNode(intrinsicMethod, invokeKind, targetMethod, b.bci(), b.getInvokeReturnType(), argsIncludingReceiver)); + MethodHandleNode methodHandleNode = new MethodHandleNode(intrinsicMethod, invokeKind, targetMethod, b.bci(), invokeReturnType, argsIncludingReceiver); + if (invokeReturnType.getKind() == Kind.Void) { + b.add(methodHandleNode); + } else { + b.addPush(methodHandleNode); + } } else { CallTargetNode callTarget = invoke.callTarget(); NodeInputList<ValueNode> argumentsList = callTarget.arguments();