changeset 18496:59ffee3765ec

LoadHubNode should always use StampProvider stamp
author Tom Rodriguez <tom.rodriguez@oracle.com>
date Mon, 24 Nov 2014 11:40:00 -0800
parents fe0db662e982
children 27d65fe58fef
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java
diffstat 4 files changed, 14 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java	Mon Nov 24 20:32:24 2014 +0100
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java	Mon Nov 24 11:40:00 2014 -0800
@@ -41,12 +41,17 @@
         return value;
     }
 
-    public static LoadHubNode create(@InjectedNodeParameter Stamp stamp, ValueNode value) {
-        return new LoadHubNode(stamp, value, null);
+    public static LoadHubNode create(@InjectedNodeParameter StampProvider stampProvider, ValueNode value) {
+        return new LoadHubNode(hubStamp(stampProvider, value), value, null);
     }
 
-    public static LoadHubNode create(@InjectedNodeParameter Stamp stamp, ValueNode value, ValueNode guard) {
-        return new LoadHubNode(stamp, value, guard);
+    public static LoadHubNode create(@InjectedNodeParameter StampProvider stampProvider, ValueNode value, ValueNode guard) {
+        return new LoadHubNode(hubStamp(stampProvider, value), value, guard);
+    }
+
+    private static Stamp hubStamp(StampProvider stampProvider, ValueNode value) {
+        assert value.stamp() instanceof ObjectStamp;
+        return stampProvider.createHubStamp(((ObjectStamp) value.stamp()));
     }
 
     protected LoadHubNode(Stamp stamp, ValueNode value, ValueNode guard) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java	Mon Nov 24 20:32:24 2014 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java	Mon Nov 24 11:40:00 2014 -0800
@@ -344,8 +344,7 @@
     private boolean createDispatchOnTypeBeforeInvoke(StructuredGraph graph, BeginNode[] successors, boolean invokeIsOnlySuccessor, MetaAccessProvider metaAccess, StampProvider stampProvider) {
         assert ptypes.size() >= 1;
         ValueNode nonNullReceiver = InliningUtil.nonNullReceiver(invoke);
-        ObjectStamp receiverStamp = (ObjectStamp) nonNullReceiver.stamp();
-        LoadHubNode hub = graph.unique(LoadHubNode.create(stampProvider.createHubStamp(receiverStamp), nonNullReceiver));
+        LoadHubNode hub = graph.unique(LoadHubNode.create(stampProvider, nonNullReceiver));
 
         if (!invokeIsOnlySuccessor && chooseMethodDispatch()) {
             assert successors.length == concretes.size() + 1;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java	Mon Nov 24 20:32:24 2014 +0100
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java	Mon Nov 24 11:40:00 2014 -0800
@@ -27,7 +27,6 @@
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.compiler.common.calc.*;
-import com.oracle.graal.compiler.common.type.*;
 import com.oracle.graal.graph.*;
 import com.oracle.graal.nodes.CallTargetNode.InvokeKind;
 import com.oracle.graal.nodes.*;
@@ -104,8 +103,7 @@
 
     private void createGuard(StructuredGraph graph, Providers providers) {
         ValueNode nonNullReceiver = InliningUtil.nonNullReceiver(invoke);
-        ObjectStamp receiverStamp = (ObjectStamp) nonNullReceiver.stamp();
-        LoadHubNode receiverHub = graph.unique(LoadHubNode.create(providers.getStampProvider().createHubStamp(receiverStamp), nonNullReceiver));
+        LoadHubNode receiverHub = graph.unique(LoadHubNode.create(providers.getStampProvider(), nonNullReceiver));
         ConstantNode typeHub = ConstantNode.forConstant(receiverHub.stamp(), type.getObjectHub(), providers.getMetaAccess(), graph);
 
         CompareNode typeCheck = CompareNode.createCompareNode(graph, Condition.EQ, receiverHub, typeHub);
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java	Mon Nov 24 20:32:24 2014 +0100
+++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java	Mon Nov 24 11:40:00 2014 -0800
@@ -42,6 +42,7 @@
 import com.oracle.graal.nodes.calc.*;
 import com.oracle.graal.nodes.extended.*;
 import com.oracle.graal.nodes.java.*;
+import com.oracle.graal.nodes.spi.*;
 import com.oracle.graal.nodes.util.*;
 import com.oracle.graal.phases.*;
 import com.oracle.graal.phases.util.*;
@@ -287,6 +288,8 @@
                     injected[injected.length - 1] = snippetReflection.forObject(snippetReflection);
                 } else if (signature[i].isAssignableFrom(metaAccess.lookupJavaType(Stamp.class))) {
                     injected[injected.length - 1] = snippetReflection.forObject(invokeStamp);
+                } else if (signature[i].isAssignableFrom(metaAccess.lookupJavaType(StampProvider.class))) {
+                    injected[injected.length - 1] = snippetReflection.forObject(providers.getStampProvider());
                 } else {
                     throw new GraalInternalError("Cannot handle injected argument of type %s in %s", signature[i].toJavaName(), m.format("%H.%n(%p)"));
                 }