public class InstanceOfDynamicNode extends LogicNode implements Canonicalizable.Binary<ValueNode>, Lowerable
InstanceOfDynamicNode
represents a type check where the type being checked is not
known at compile time. This is used, for instance, to intrinsify Class.isInstance(Object)
.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 |
---|---|
(package private) ValueNode |
mirror |
(package private) ValueNode |
object |
static NodeClass<InstanceOfDynamicNode> |
TYPE |
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Constructor and Description |
---|
InstanceOfDynamicNode(ValueNode mirror,
ValueNode object) |
Modifier and Type | Method and Description |
---|---|
LogicNode |
canonical(CanonicalizerTool tool,
ValueNode forObject,
ValueNode forMirror)
Similar to
Canonicalizable.canonical(CanonicalizerTool) , except that
implementations should act as if the current input of the node was the given one, i.e.,
they should never look at the inputs via the this pointer. |
static LogicNode |
create(ConstantReflectionProvider constantReflection,
ValueNode mirror,
ValueNode object) |
private static LogicNode |
findSynonym(ConstantReflectionProvider constantReflection,
ValueNode forObject,
ValueNode forMirror) |
ValueNode |
getX()
Gets the current value of the input, so that calling
Canonicalizable.Binary.canonical(CanonicalizerTool, Node, Node) with the value returned from this
method should behave exactly like Canonicalizable.canonical(CanonicalizerTool) . |
ValueNode |
getY()
Gets the current value of the input, so that calling
Canonicalizable.Binary.canonical(CanonicalizerTool, Node, Node) with the value returned from this
method should behave exactly like Canonicalizable.canonical(CanonicalizerTool) . |
void |
lower(LoweringTool tool)
Expand this node into lower level nodes expressing the same semantics.
|
ValueNode |
mirror() |
ValueNode |
object() |
and, and, isContradiction, isTautology, or, or
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
canonical
public static final NodeClass<InstanceOfDynamicNode> TYPE
public InstanceOfDynamicNode(ValueNode mirror, ValueNode object)
public static LogicNode create(ConstantReflectionProvider constantReflection, ValueNode mirror, ValueNode object)
public void lower(LoweringTool tool)
Lowerable
private static LogicNode findSynonym(ConstantReflectionProvider constantReflection, ValueNode forObject, ValueNode forMirror)
public LogicNode canonical(CanonicalizerTool tool, ValueNode forObject, ValueNode forMirror)
Canonicalizable.Binary
Canonicalizable.canonical(CanonicalizerTool)
, except that
implementations should act as if the current input of the node was the given one, i.e.,
they should never look at the inputs via the this pointer.canonical
in interface Canonicalizable.Binary<ValueNode>
public ValueNode getX()
Canonicalizable.Binary
Canonicalizable.Binary.canonical(CanonicalizerTool, Node, Node)
with the value returned from this
method should behave exactly like Canonicalizable.canonical(CanonicalizerTool)
.getX
in interface Canonicalizable.Binary<ValueNode>
public ValueNode getY()
Canonicalizable.Binary
Canonicalizable.Binary.canonical(CanonicalizerTool, Node, Node)
with the value returned from this
method should behave exactly like Canonicalizable.canonical(CanonicalizerTool)
.getY
in interface Canonicalizable.Binary<ValueNode>