public class InstanceOfDynamicNode extends BinaryOpLogicNode 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.EdgeVisitor, Node.IndirectCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberableCanonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Ternary<T extends Node>, Canonicalizable.Unary<T extends Node>| Modifier and Type | Field and Description |
|---|---|
static NodeClass<InstanceOfDynamicNode> |
TYPE |
x, yEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
protected |
InstanceOfDynamicNode(ValueNode mirror,
ValueNode object,
boolean allowNull,
boolean exact) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
allowsNull() |
LogicNode |
canonical(CanonicalizerTool tool,
ValueNode forMirror,
ValueNode forObject)
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(Assumptions assumptions,
ConstantReflectionProvider constantReflection,
ValueNode mirror,
ValueNode object,
boolean allowNull) |
static LogicNode |
create(Assumptions assumptions,
ConstantReflectionProvider constantReflection,
ValueNode mirror,
ValueNode object,
boolean allowNull,
boolean exact) |
static LogicNode |
create(ValueNode mirror,
ValueNode object) |
ValueNode |
getMirrorOrHub() |
ValueNode |
getObject() |
Stamp |
getSucceedingStampForX(boolean negated,
Stamp xStamp,
Stamp yStamp) |
Stamp |
getSucceedingStampForY(boolean negated,
Stamp xStamp,
Stamp yStamp) |
boolean |
isExact() |
void |
setMirror(ValueNode newObject) |
TriState |
tryFold(Stamp xStamp,
Stamp yStamp) |
generate, getX, getY, maybeCommuteInputs, verifyand, and, implies, isContradiction, isTautology, or, orasConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, isSerializableConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterfaceafterClone, applyInputs, applySuccessors, assertFalse, assertTrue, cfgPredecessors, cfgSuccessors, clearInputs, clearNodeSourcePosition, clearSuccessors, copyWithInputs, copyWithInputs, dataFlowEquals, dynamicNodeSizeEstimate, estimatedNodeCycles, estimatedNodeSize, fail, formatTo, getCreationPosition, getDebug, getDebugProperties, getDebugProperties, getInsertionPosition, getNodeClass, getNodeSourcePosition, getOptions, getUsageCount, hasExactlyOneUsage, hashCode, hasMoreThanOneUsage, hasNoUsages, hasOnlyUsagesOfType, hasUsages, hasUsagesOfType, inputPositions, inputs, isAlive, isDeleted, isUnregistered, markDeleted, maybeNotifyZeroUsages, modCount, predecessor, pushInputs, removeUsage, replaceAllInputs, replaceAndDelete, replaceAtAllUsages, replaceAtMatchingUsages, replaceAtPredecessor, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsagesAndDelete, replaceAtUsagesAndDelete, replaceFirstInput, replaceFirstSuccessor, safeDelete, setCreationPosition, setInsertionPosition, setNodeSourcePosition, singleUsage, successorPositions, successors, toString, toString, updateNodeSourcePosition, updatePredecessor, updateUsages, usages, valueEquals, verifyEdges, verifyInputs, verifySourcePosition, withNodeSourcePositionclone, equals, getClass, notify, notifyAll, wait, wait, waitcanonical, getX, getYasNodepublic static final NodeClass<InstanceOfDynamicNode> TYPE
public static LogicNode create(Assumptions assumptions, ConstantReflectionProvider constantReflection, ValueNode mirror, ValueNode object, boolean allowNull, boolean exact)
public static LogicNode create(Assumptions assumptions, ConstantReflectionProvider constantReflection, ValueNode mirror, ValueNode object, boolean allowNull)
public ValueNode getMirrorOrHub()
public ValueNode getObject()
public LogicNode canonical(CanonicalizerTool tool, ValueNode forMirror, ValueNode forObject)
Canonicalizable.BinaryCanonicalizable.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 void setMirror(ValueNode newObject)
public boolean allowsNull()
public boolean isExact()
public Stamp getSucceedingStampForX(boolean negated, Stamp xStamp, Stamp yStamp)
getSucceedingStampForX in class BinaryOpLogicNodepublic Stamp getSucceedingStampForY(boolean negated, Stamp xStamp, Stamp yStamp)
getSucceedingStampForY in class BinaryOpLogicNodepublic TriState tryFold(Stamp xStamp, Stamp yStamp)
tryFold in class BinaryOpLogicNode