changeset 18563:e43065342bab

Merge.
author Doug Simon <doug.simon@oracle.com>
date Wed, 26 Nov 2014 23:25:56 +0100
parents 4f27e4a4b4c5 (current diff) 3fb1231699de (diff)
children 22217b2353b1 966081b8e830
files
diffstat 3 files changed, 38 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java	Wed Nov 26 23:24:13 2014 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/MethodHandleNode.java	Wed Nov 26 23:25:56 2014 +0100
@@ -57,7 +57,7 @@
     protected MethodHandleNode(Invoke invoke) {
         super(invoke);
 
-        MethodCallTargetNode callTarget = (MethodCallTargetNode) invoke.callTarget();
+        CallTargetNode callTarget = invoke.callTarget();
 
         // See if we need to save some replacement method data.
         if (callTarget instanceof SelfReplacingMethodCallTargetNode) {
@@ -237,7 +237,6 @@
      */
     private InvokeNode createTargetInvokeNode(ResolvedJavaMethod target, IntrinsicMethod intrinsicMethod) {
         InvokeKind targetInvokeKind = target.isStatic() ? InvokeKind.Static : InvokeKind.Special;
-        JavaType targetReturnType = target.getSignature().getReturnType(null);
 
         // MethodHandleLinkTo* nodes have a trailing MemberName argument which
         // needs to be popped.
@@ -258,12 +257,12 @@
         }
 
         // If there is already replacement information, use that instead.
-        MethodCallTargetNode callTarget;
+        CallTargetNode callTarget;
         if (replacementTargetMethod == null) {
-            callTarget = SelfReplacingMethodCallTargetNode.create(targetInvokeKind, target, targetArguments, targetReturnType, getTargetMethod(), originalArguments, getReturnType());
+            callTarget = SelfReplacingMethodCallTargetNode.create(targetInvokeKind, target, targetArguments, getTargetMethod(), originalArguments, getReturnType());
         } else {
             ValueNode[] args = replacementArguments.toArray(new ValueNode[replacementArguments.size()]);
-            callTarget = SelfReplacingMethodCallTargetNode.create(targetInvokeKind, target, targetArguments, targetReturnType, replacementTargetMethod, args, replacementReturnType);
+            callTarget = SelfReplacingMethodCallTargetNode.create(targetInvokeKind, target, targetArguments, replacementTargetMethod, args, replacementReturnType);
         }
         graph().add(callTarget);
 
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java	Wed Nov 26 23:24:13 2014 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/SelfReplacingMethodCallTargetNode.java	Wed Nov 26 23:25:56 2014 +0100
@@ -24,6 +24,7 @@
 
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.*;
+import com.oracle.graal.compiler.common.type.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodeinfo.*;
 import com.oracle.graal.nodes.*;
@@ -37,21 +38,21 @@
  * inlined.
  */
 @NodeInfo
-public class SelfReplacingMethodCallTargetNode extends MethodCallTargetNode implements Lowerable {
+public class SelfReplacingMethodCallTargetNode extends CallTargetNode implements Lowerable {
 
     // Replacement method data
     protected final ResolvedJavaMethod replacementTargetMethod;
     protected final JavaType replacementReturnType;
     @Input NodeInputList<ValueNode> replacementArguments;
 
-    public static SelfReplacingMethodCallTargetNode create(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType,
-                    ResolvedJavaMethod replacementTargetMethod, ValueNode[] replacementArguments, JavaType replacementReturnType) {
-        return new SelfReplacingMethodCallTargetNode(invokeKind, targetMethod, arguments, returnType, replacementTargetMethod, replacementArguments, replacementReturnType);
+    public static SelfReplacingMethodCallTargetNode create(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, ResolvedJavaMethod replacementTargetMethod,
+                    ValueNode[] replacementArguments, JavaType replacementReturnType) {
+        return new SelfReplacingMethodCallTargetNode(invokeKind, targetMethod, arguments, replacementTargetMethod, replacementArguments, replacementReturnType);
     }
 
-    protected SelfReplacingMethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, JavaType returnType, ResolvedJavaMethod replacementTargetMethod,
+    protected SelfReplacingMethodCallTargetNode(InvokeKind invokeKind, ResolvedJavaMethod targetMethod, ValueNode[] arguments, ResolvedJavaMethod replacementTargetMethod,
                     ValueNode[] replacementArguments, JavaType replacementReturnType) {
-        super(invokeKind, targetMethod, arguments, returnType);
+        super(arguments, targetMethod, invokeKind);
         this.replacementTargetMethod = replacementTargetMethod;
         this.replacementReturnType = replacementReturnType;
         this.replacementArguments = new NodeInputList<>(this, replacementArguments);
@@ -83,4 +84,22 @@
     public void generate(NodeLIRBuilderTool gen) {
         throw GraalInternalError.shouldNotReachHere("should have replaced itself");
     }
+
+    @Override
+    public Stamp returnStamp() {
+        Kind returnKind = targetMethod().getSignature().getReturnKind();
+        if (returnKind == Kind.Object && replacementReturnType instanceof ResolvedJavaType) {
+            return StampFactory.declared((ResolvedJavaType) replacementReturnType);
+        } else {
+            return StampFactory.forKind(returnKind);
+        }
+    }
+
+    @Override
+    public String targetName() {
+        if (targetMethod() == null) {
+            return "??Invalid!";
+        }
+        return targetMethod().format("%h.%n");
+    }
 }
--- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java	Wed Nov 26 23:24:13 2014 +0100
+++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCacheImpl.java	Wed Nov 26 23:25:56 2014 +0100
@@ -144,15 +144,19 @@
             lookupExceedsMaxSize();
         }
 
+        StructuredGraph graph;
+        PhaseContext phaseContext = new PhaseContext(providers, new Assumptions(false));
         try (Scope s = Debug.scope("TruffleCache", providers.getMetaAccess(), method)) {
 
-            final PhaseContext phaseContext = new PhaseContext(providers, new Assumptions(false));
-            Mark mark = null;
-
-            final StructuredGraph graph = parseGraph(method, phaseContext);
+            graph = parseGraph(method, phaseContext);
             if (graph == null) {
                 return null;
             }
+        } catch (Throwable e) {
+            throw Debug.handle(e);
+        }
+
+        try (Scope s = Debug.scope("TruffleCache", providers.getMetaAccess(), method, graph)) {
 
             lastUsed.put(key, counter++);
             cache.put(key, markerGraph);
@@ -172,6 +176,7 @@
 
             PartialEscapePhase partialEscapePhase = new PartialEscapePhase(false, canonicalizer);
 
+            Mark mark = null;
             while (true) {
 
                 partialEscapePhase.apply(graph, phaseContext);