public class DynamicNewArrayNode extends AbstractNewArrayNode implements Canonicalizable
DynamicNewArrayNode is used for allocation of arrays when the type is not a
compile-time constant.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>DeoptimizingNode.DeoptAfter, DeoptimizingNode.DeoptBefore, DeoptimizingNode.DeoptDuring| Modifier and Type | Field and Description |
|---|---|
(package private) ValueNode |
elementType |
protected Kind |
knownElementKind
A non-null value indicating the worst case element type.
|
static NodeClass<DynamicNewArrayNode> |
TYPE |
lengthfillContentsstateBeforenextNODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
|
DynamicNewArrayNode(MetaAccessProvider metaAccess,
ValueNode elementType,
ValueNode length,
boolean fillContents,
Kind knownElementKind) |
protected |
DynamicNewArrayNode(NodeClass<? extends DynamicNewArrayNode> c,
ValueNode elementType,
ValueNode length,
boolean fillContents,
Kind knownElementKind,
FrameState stateBefore,
MetaAccessProvider metaAccess) |
|
DynamicNewArrayNode(ValueNode elementType,
ValueNode length,
boolean fillContents) |
| Modifier and Type | Method and Description |
|---|---|
Node |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
private static Stamp |
computeStamp(Kind knownElementKind,
MetaAccessProvider metaAccess) |
protected NewArrayNode |
createNewArrayNode(ResolvedJavaType type)
Hook for subclasses to instantiate a subclass of
NewArrayNode. |
ValueNode |
getElementType() |
Kind |
getKnownElementKind() |
private static Object |
newArray(Class<?> componentType,
int length,
boolean fillContents,
Kind knownElementKind) |
static Object |
newArray(Class<?> componentType,
int length,
Kind knownElementKind) |
static Object |
newUninitializedArray(Class<?> componentType,
int length,
Kind knownElementKind) |
void |
simplify(SimplifierTool tool)
Must be overridden by subclasses that implement
Simplifiable. |
static boolean |
throwsIllegalArgumentException(Class<?> elementType) |
static boolean |
throwsIllegalArgumentException(ResolvedJavaType elementType) |
dimension, dimensionCount, lengthcanDeoptimize, fillContents, lowersetStateBefore, stateBeforeasNode, 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, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verifyEdges, verifyInputsclone, finalize, getClass, notify, notifyAll, wait, wait, waitstatespublic static final NodeClass<DynamicNewArrayNode> TYPE
ValueNode elementType
protected final Kind knownElementKind
public DynamicNewArrayNode(ValueNode elementType, ValueNode length, boolean fillContents)
public DynamicNewArrayNode(MetaAccessProvider metaAccess, ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind)
protected DynamicNewArrayNode(NodeClass<? extends DynamicNewArrayNode> c, ValueNode elementType, ValueNode length, boolean fillContents, Kind knownElementKind, FrameState stateBefore, MetaAccessProvider metaAccess)
private static Stamp computeStamp(Kind knownElementKind, MetaAccessProvider metaAccess)
public ValueNode getElementType()
public Kind getKnownElementKind()
public void simplify(SimplifierTool tool)
NodeSimplifiable. The implementation in
Node exists to obviate the need to cast a node before invoking
Simplifiable.simplify(SimplifierTool).simplify in interface Simplifiablesimplify in class AbstractNewArrayNodepublic Node canonical(CanonicalizerTool tool)
Canonicalizablenull 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 Canonicalizabletool - provides access to runtime interfaces like MetaAccessProviderprotected NewArrayNode createNewArrayNode(ResolvedJavaType type)
NewArrayNode.public static boolean throwsIllegalArgumentException(Class<?> elementType)
public static boolean throwsIllegalArgumentException(ResolvedJavaType elementType)
private static Object newArray(Class<?> componentType, int length, boolean fillContents, Kind knownElementKind)
public static Object newUninitializedArray(Class<?> componentType, int length, Kind knownElementKind)