--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/ClassGetHubNode.java 2017-03-20 17:38:53.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/ClassGetHubNode.java 2017-03-20 17:38:53.000000000 -0700 @@ -35,9 +35,10 @@ import org.graalvm.compiler.hotspot.word.KlassPointer; import org.graalvm.compiler.nodeinfo.NodeInfo; import org.graalvm.compiler.nodes.ConstantNode; -import org.graalvm.compiler.nodes.FloatingGuardedNode; +import org.graalvm.compiler.nodes.PiNode; import org.graalvm.compiler.nodes.ValueNode; import org.graalvm.compiler.nodes.calc.ConvertNode; +import org.graalvm.compiler.nodes.calc.FloatingNode; import org.graalvm.compiler.nodes.extended.GetClassNode; import org.graalvm.compiler.nodes.extended.GuardingNode; import org.graalvm.compiler.nodes.extended.LoadHubNode; @@ -59,16 +60,12 @@ * {@link ReadNode#canonicalizeRead(ValueNode, AddressNode, LocationIdentity, CanonicalizerTool)}. */ @NodeInfo(cycles = CYCLES_4, size = SIZE_1) -public final class ClassGetHubNode extends FloatingGuardedNode implements Lowerable, Canonicalizable, ConvertNode { +public final class ClassGetHubNode extends FloatingNode implements Lowerable, Canonicalizable, ConvertNode { public static final NodeClass TYPE = NodeClass.create(ClassGetHubNode.class); @Input protected ValueNode clazz; public ClassGetHubNode(ValueNode clazz) { - this(clazz, null); - } - - public ClassGetHubNode(ValueNode clazz, ValueNode guard) { - super(TYPE, KlassPointerStamp.klass(), (GuardingNode) guard); + super(TYPE, KlassPointerStamp.klass()); this.clazz = clazz; } @@ -106,10 +103,10 @@ } @NodeIntrinsic - public static native KlassPointer readClass(Class clazz); + public static native KlassPointer readClass(Class clazzNonNull); - @NodeIntrinsic - public static native KlassPointer readClass(Class clazz, GuardingNode guard); + @NodeIntrinsic(PiNode.class) + public static native KlassPointer piCastNonNull(Object object, GuardingNode anchor); @Override public ValueNode getValue() { @@ -138,6 +135,14 @@ return false; } + /** + * There is more than one {@link java.lang.Class} value that has a NULL hub. + */ + @Override + public boolean mayNullCheckSkipConversion() { + return false; + } + @Override public boolean preservesOrder(Condition op, Constant value, ConstantReflectionProvider constantReflection) { assert op == Condition.EQ || op == Condition.NE;