# HG changeset patch # User Tom Rodriguez # Date 1416858000 28800 # Node ID 59ffee3765ec274f4133b1d427307e04b968ddd3 # Parent fe0db662e9820ad3ee25132b89b2d3c982b61785 LoadHubNode should always use StampProvider stamp diff -r fe0db662e982 -r 59ffee3765ec graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LoadHubNode.java --- 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) { diff -r fe0db662e982 -r 59ffee3765ec graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/MultiTypeGuardInlineInfo.java --- 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; diff -r fe0db662e982 -r 59ffee3765ec graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/TypeGuardInlineInfo.java --- 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); diff -r fe0db662e982 -r 59ffee3765ec graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeIntrinsificationPhase.java --- 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)")); }