public class CheckCastNode extends FixedWithNextNode implements Canonicalizable, Simplifiable, Lowerable, Virtualizable, ValueProxy
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 boolean |
forStoreCheck
Determines the exception thrown by this node if the check fails:
ClassCastException
if false; ArrayStoreException if true. |
protected ValueNode |
object |
protected jdk.internal.jvmci.meta.JavaTypeProfile |
profile |
protected jdk.internal.jvmci.meta.ResolvedJavaType |
type |
static NodeClass<CheckCastNode> |
TYPE |
next
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Modifier | Constructor and Description |
---|---|
protected |
CheckCastNode(NodeClass<? extends CheckCastNode> c,
jdk.internal.jvmci.meta.ResolvedJavaType type,
ValueNode object,
jdk.internal.jvmci.meta.JavaTypeProfile profile,
boolean forStoreCheck) |
|
CheckCastNode(jdk.internal.jvmci.meta.ResolvedJavaType type,
ValueNode object,
jdk.internal.jvmci.meta.JavaTypeProfile profile,
boolean forStoreCheck) |
Modifier and Type | Method and Description |
---|---|
Node |
canonical(CanonicalizerTool tool) |
static ValueNode |
create(jdk.internal.jvmci.meta.ResolvedJavaType inputType,
ValueNode object,
jdk.internal.jvmci.meta.JavaTypeProfile profile,
boolean forStoreCheck,
jdk.internal.jvmci.meta.Assumptions assumptions) |
protected static ValueNode |
findSynonym(jdk.internal.jvmci.meta.ResolvedJavaType type,
ValueNode object) |
ValueNode |
getOriginalNode() |
boolean |
inferStamp()
This method can be overridden by subclasses of
ValueNode if they need to recompute
their stamp if their inputs change. |
boolean |
isForStoreCheck() |
void |
lower(LoweringTool tool)
Lowers a
CheckCastNode . |
ValueNode |
object() |
jdk.internal.jvmci.meta.JavaTypeProfile |
profile() |
void |
simplify(SimplifierTool tool) |
jdk.internal.jvmci.meta.TriState |
tryFold(Stamp testStamp) |
jdk.internal.jvmci.meta.ResolvedJavaType |
type()
Gets the type being cast to.
|
void |
virtualize(VirtualizerTool tool)
A node class can implement this method to convey information about what its effect would be
if some of its inputs were virtualized.
|
asNode, next, setNext
asConstant, asJavaConstant, getKind, graph, 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, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verifyEdges, verifyInputs
public static final NodeClass<CheckCastNode> TYPE
protected final jdk.internal.jvmci.meta.ResolvedJavaType type
protected final jdk.internal.jvmci.meta.JavaTypeProfile profile
protected final boolean forStoreCheck
ClassCastException
if false; ArrayStoreException
if true.public CheckCastNode(jdk.internal.jvmci.meta.ResolvedJavaType type, ValueNode object, jdk.internal.jvmci.meta.JavaTypeProfile profile, boolean forStoreCheck)
protected CheckCastNode(NodeClass<? extends CheckCastNode> c, jdk.internal.jvmci.meta.ResolvedJavaType type, ValueNode object, jdk.internal.jvmci.meta.JavaTypeProfile profile, boolean forStoreCheck)
public static ValueNode create(jdk.internal.jvmci.meta.ResolvedJavaType inputType, ValueNode object, jdk.internal.jvmci.meta.JavaTypeProfile profile, boolean forStoreCheck, jdk.internal.jvmci.meta.Assumptions assumptions)
public boolean isForStoreCheck()
public void lower(LoweringTool tool)
CheckCastNode
. That is:
1: A a = ... 2: B b = (B) a;is lowered to:
1: A a = ... 2: B b = guardingPi(a == null || a instanceof B, a, stamp(B))or if a is known to be non-null:
1: A a = ... 2: B b = guardingPi(a instanceof B, a, stamp(B, non-null))Note: we use
Graph.addWithoutUnique(T)
as opposed to Graph.unique(T)
for the new
InstanceOfNode
to maintain the invariant checked by
LoweringPhase.checkUsagesAreScheduled()
.public boolean inferStamp()
ValueNode
ValueNode
if they need to recompute
their stamp if their inputs change. A typical implementation will compute the stamp and pass
it to ValueNode.updateStamp(Stamp)
, whose return value can be used as the result of this
method.inferStamp
in class ValueNode
public Node canonical(CanonicalizerTool tool)
canonical
in interface Canonicalizable
protected static ValueNode findSynonym(jdk.internal.jvmci.meta.ResolvedJavaType type, ValueNode object)
public void simplify(SimplifierTool tool)
simplify
in interface Simplifiable
simplify
in class Node
public jdk.internal.jvmci.meta.ResolvedJavaType type()
public jdk.internal.jvmci.meta.JavaTypeProfile profile()
public void virtualize(VirtualizerTool tool)
Virtualizable
virtualize
in interface Virtualizable
tool
- the tool used to describe the effects of this nodepublic ValueNode getOriginalNode()
getOriginalNode
in interface LimitedValueProxy
getOriginalNode
in interface Proxy