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.ValueNumberable
Canonicalizable.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 |
length
fillContents
stateBefore
next
NODE_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, length
canDeoptimize, fillContents, lower
setStateBefore, stateBefore
asNode, next, setNext
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, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verifyEdges, verifyInputs
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
states
public 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)
Node
Simplifiable
. The implementation in
Node
exists to obviate the need to cast a node before invoking
Simplifiable.simplify(SimplifierTool)
.simplify
in interface Simplifiable
simplify
in class AbstractNewArrayNode
public Node canonical(CanonicalizerTool tool)
Canonicalizable
null
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 Canonicalizable
tool
- provides access to runtime interfaces like MetaAccessProvider
protected 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)