public final class ArrayLengthNode extends FixedWithNextNode implements Canonicalizable.Unary<ValueNode>, Lowerable, Virtualizable
ArrayLength instruction gets the length of an array.Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberableCanonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Unary<T extends Node>| Modifier and Type | Field and Description |
|---|---|
(package private) ValueNode |
array |
static NodeClass<ArrayLengthNode> |
TYPE |
nextNODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Constructor and Description |
|---|
ArrayLengthNode(ValueNode array) |
| Modifier and Type | Method and Description |
|---|---|
ValueNode |
array() |
static int |
arrayLength(Object array) |
ValueNode |
canonical(CanonicalizerTool tool,
ValueNode forValue)
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 ValueNode |
create(ValueNode forValue,
ConstantReflectionProvider constantReflection) |
ValueNode |
getValue()
Gets the current value of the input, so that calling
Canonicalizable.Unary.canonical(CanonicalizerTool, 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.
|
static ValueNode |
readArrayLength(ValueNode originalArray,
ConstantReflectionProvider constantReflection)
Gets the length of an array if possible.
|
private static ValueNode |
readArrayLengthConstant(ValueNode originalArray,
ConstantReflectionProvider constantReflection) |
private static ValueNode |
reproxyValue(ValueNode originalValue,
ValueNode value)
|
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, setNextasConstant, asJavaConstant, getKind, graph, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isNullConstant, setStamp, stamp, updateStampacceptInputs, 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, verifyEdges, verifyInputsclone, finalize, getClass, notify, notifyAll, wait, wait, waitcanonicalpublic static final NodeClass<ArrayLengthNode> TYPE
public ArrayLengthNode(ValueNode array)
public ValueNode getValue()
Canonicalizable.UnaryCanonicalizable.Unary.canonical(CanonicalizerTool, Node) with the value returned from this method
should behave exactly like Canonicalizable.canonical(CanonicalizerTool).getValue in interface Canonicalizable.Unary<ValueNode>public static ValueNode create(ValueNode forValue, ConstantReflectionProvider constantReflection)
public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue)
Canonicalizable.UnaryCanonicalizable.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.Unary<ValueNode>private static ValueNode reproxyValue(ValueNode originalValue, ValueNode value)
originalValue - a possibly proxied valuevalue - a value needing proxiesvaluepublic static ValueNode readArrayLength(ValueNode originalArray, ConstantReflectionProvider constantReflection)
array or null if it is not availableprivate static ValueNode readArrayLengthConstant(ValueNode originalArray, ConstantReflectionProvider constantReflection)
public void lower(LoweringTool tool)
Lowerablepublic static int arrayLength(Object array)
public void virtualize(VirtualizerTool tool)
Virtualizablevirtualize in interface Virtualizabletool - the tool used to describe the effects of this node