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();