public final class ClassGetHubNode extends FloatingGuardedNode implements Lowerable, Canonicalizable, ConvertNode
Class::_klass
to get the hub for a Class
. This node mostly exists
to replace _klass._java_mirror._klass
with _klass
. The constant folding could be
handled by
ReadNode.canonicalizeRead(ValueNode, AddressNode, LocationIdentity, CanonicalizerTool)
.Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberable
Canonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Unary<T extends Node>
Modifier and Type | Field and Description |
---|---|
protected ValueNode |
clazz |
(package private) StampProvider |
stampProvider |
static NodeClass<ClassGetHubNode> |
TYPE |
guard
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Constructor and Description |
---|
ClassGetHubNode(StampProvider stampProvider,
ValueNode clazz) |
ClassGetHubNode(StampProvider stampProvider,
ValueNode clazz,
ValueNode guard) |
Modifier and Type | Method and Description |
---|---|
Node |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
Constant |
convert(Constant c,
ConstantReflectionProvider constantReflection) |
ValueNode |
getValue() |
boolean |
isLossless()
Check whether a conversion is lossless.
|
void |
lower(LoweringTool tool)
Expand this node into lower level nodes expressing the same semantics.
|
boolean |
preservesOrder(Condition op,
Constant value,
ConstantReflectionProvider constantReflection)
Check whether a conversion preserves comparison order against a particular constant value.
|
static KlassPointer |
readClass(Class<?> clazz) |
static KlassPointer |
readClass(Class<?> clazz,
GuardingNode guard) |
Constant |
reverse(Constant c,
ConstantReflectionProvider constantReflection) |
getGuard, setGuard
asNode
asConstant, asJavaConstant, getKind, graph, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isNullConstant, setStamp, stamp, updateStamp
acceptInputs, acceptSuccessors, afterClone, assertFalse, assertTrue, cfgPredecessors, cfgSuccessors, clearInputs, clearSuccessors, copyWithInputs, copyWithInputs, equals, fail, formatTo, getDebugProperties, getDebugProperties, getId, getNodeClass, getUsageAt, getUsageCount, hashCode, hasNoUsages, hasUsages, inputs, isAlive, isDeleted, markDeleted, modCount, newIdentityMap, newIdentityMap, newIdentityMap, newMap, newMap, newMap, newSet, newSet, predecessor, pushInputs, removeUsage, replaceAndDelete, replaceAtMatchingUsages, replaceAtPredecessor, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceFirstInput, replaceFirstSuccessor, safeDelete, simplify, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verify, verifyEdges, verifyInputs
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
asNode, preservesOrder
asNode
public static final NodeClass<ClassGetHubNode> TYPE
StampProvider stampProvider
public ClassGetHubNode(StampProvider stampProvider, ValueNode clazz)
public ClassGetHubNode(StampProvider stampProvider, ValueNode clazz, ValueNode guard)
public Node canonical(CanonicalizerTool tool)
Canonicalizable
null
will delete the current node and replace it with null
at
all usages. Note that it is not necessary to delete floating nodes that have no more usages
this way - they will be deleted automatically.canonical
in interface Canonicalizable
tool
- provides access to runtime interfaces like MetaAccessProvider
public void lower(LoweringTool tool)
Lowerable
public static KlassPointer readClass(Class<?> clazz)
public static KlassPointer readClass(Class<?> clazz, GuardingNode guard)
public ValueNode getValue()
getValue
in interface ConvertNode
public Constant convert(Constant c, ConstantReflectionProvider constantReflection)
convert
in interface ConvertNode
public Constant reverse(Constant c, ConstantReflectionProvider constantReflection)
reverse
in interface ConvertNode
public boolean isLossless()
ConvertNode
isLossless
in interface ConvertNode
public boolean preservesOrder(Condition op, Constant value, ConstantReflectionProvider constantReflection)
ConvertNode
preservesOrder
in interface ConvertNode
op
- a comparison operator