src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/ClassGetHubNode.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/ClassGetHubNode.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/ClassGetHubNode.java
Print this page
*** 33,45 ****
import org.graalvm.compiler.graph.spi.CanonicalizerTool;
import org.graalvm.compiler.hotspot.nodes.type.KlassPointerStamp;
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.ValueNode;
import org.graalvm.compiler.nodes.calc.ConvertNode;
import org.graalvm.compiler.nodes.extended.GetClassNode;
import org.graalvm.compiler.nodes.extended.GuardingNode;
import org.graalvm.compiler.nodes.extended.LoadHubNode;
import org.graalvm.compiler.nodes.memory.ReadNode;
import org.graalvm.compiler.nodes.memory.address.AddressNode;
--- 33,46 ----
import org.graalvm.compiler.graph.spi.CanonicalizerTool;
import org.graalvm.compiler.hotspot.nodes.type.KlassPointerStamp;
import org.graalvm.compiler.hotspot.word.KlassPointer;
import org.graalvm.compiler.nodeinfo.NodeInfo;
import org.graalvm.compiler.nodes.ConstantNode;
! 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;
import org.graalvm.compiler.nodes.memory.ReadNode;
import org.graalvm.compiler.nodes.memory.address.AddressNode;
*** 57,76 ****
* to replace {@code _klass._java_mirror._klass} with {@code _klass}. The constant folding could be
* handled by
* {@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 static final NodeClass<ClassGetHubNode> 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);
this.clazz = clazz;
}
@Override
public Node canonical(CanonicalizerTool tool) {
--- 58,73 ----
* to replace {@code _klass._java_mirror._klass} with {@code _klass}. The constant folding could be
* handled by
* {@link ReadNode#canonicalizeRead(ValueNode, AddressNode, LocationIdentity, CanonicalizerTool)}.
*/
@NodeInfo(cycles = CYCLES_4, size = SIZE_1)
! public final class ClassGetHubNode extends FloatingNode implements Lowerable, Canonicalizable, ConvertNode {
public static final NodeClass<ClassGetHubNode> TYPE = NodeClass.create(ClassGetHubNode.class);
@Input protected ValueNode clazz;
public ClassGetHubNode(ValueNode clazz) {
! super(TYPE, KlassPointerStamp.klass());
this.clazz = clazz;
}
@Override
public Node canonical(CanonicalizerTool tool) {
*** 104,117 ****
public void lower(LoweringTool tool) {
tool.getLowerer().lower(this, tool);
}
@NodeIntrinsic
! public static native KlassPointer readClass(Class<?> clazz);
! @NodeIntrinsic
! public static native KlassPointer readClass(Class<?> clazz, GuardingNode guard);
@Override
public ValueNode getValue() {
return clazz;
}
--- 101,114 ----
public void lower(LoweringTool tool) {
tool.getLowerer().lower(this, tool);
}
@NodeIntrinsic
! public static native KlassPointer readClass(Class<?> clazzNonNull);
! @NodeIntrinsic(PiNode.class)
! public static native KlassPointer piCastNonNull(Object object, GuardingNode anchor);
@Override
public ValueNode getValue() {
return clazz;
}
*** 136,145 ****
--- 133,150 ----
@Override
public boolean isLossless() {
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;
ResolvedJavaType exactType = constantReflection.asJavaType(value);
return !exactType.isPrimitive();
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/replacements/ClassGetHubNode.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File