public final class ArrayCopyCallNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single, MemoryAccess, Canonicalizable
Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberable
MemoryCheckpoint.Multi, MemoryCheckpoint.Single, MemoryCheckpoint.TypeAssertion
Canonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Unary<T extends Node>
Modifier and Type | Field and Description |
---|---|
protected boolean |
aligned
Aligned means that the offset of the copy is heap word aligned.
|
protected ValueNode |
dest |
protected ValueNode |
destPos |
protected boolean |
disjoint |
protected Kind |
elementKind |
(package private) MemoryNode |
lastLocationAccess |
protected ValueNode |
length |
protected LocationIdentity |
locationIdentity |
protected HotSpotGraalRuntimeProvider |
runtime |
protected ValueNode |
src |
protected ValueNode |
srcPos |
static NodeClass<ArrayCopyCallNode> |
TYPE |
protected boolean |
uninitialized |
stateAfter
next
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Modifier | Constructor and Description |
---|---|
|
ArrayCopyCallNode(HotSpotGraalRuntimeProvider runtime,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
Kind elementKind,
boolean disjoint) |
|
ArrayCopyCallNode(HotSpotGraalRuntimeProvider runtime,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
Kind elementKind,
boolean aligned,
boolean disjoint,
boolean uninitialized) |
protected |
ArrayCopyCallNode(HotSpotGraalRuntimeProvider runtime,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
Kind elementKind,
LocationIdentity locationIdentity,
boolean aligned,
boolean disjoint,
boolean uninitialized) |
Modifier and Type | Method and Description |
---|---|
static void |
arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
Kind elementKind) |
private static void |
arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
Kind elementKind,
boolean aligned,
boolean disjoint,
boolean uninitialized) |
private static void |
arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
Kind elementKind,
LocationIdentity locationIdentity,
boolean aligned,
boolean disjoint,
boolean uninitialized) |
static void |
arraycopyObjectKillsAny(Object src,
int srcPos,
Object dest,
int destPos,
int length) |
Node |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
private ValueNode |
computeBase(ValueNode base,
ValueNode pos) |
static void |
disjointArraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
Kind elementKind) |
static void |
disjointUninitializedArraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
Kind elementKind) |
ValueNode |
getDestination() |
ValueNode |
getDestinationPosition() |
Kind |
getElementKind() |
MemoryNode |
getLastLocationAccess() |
ValueNode |
getLength() |
LocationIdentity |
getLocationIdentity()
This method is used to determine which memory location is killed by this node.
|
ValueNode |
getSource() |
ValueNode |
getSourcePosition() |
boolean |
isAligned() |
boolean |
isDisjoint() |
(package private) boolean |
isHeapWordAligned(JavaConstant value,
Kind kind) |
boolean |
isUninitialized() |
void |
lower(LoweringTool tool)
Expand this node into lower level nodes expressing the same semantics.
|
void |
setLastLocationAccess(MemoryNode lla) |
void |
updateAlignedDisjoint() |
hasSideEffect, setStateAfter, stateAfter
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, simplify, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verifyEdges, verifyInputs
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
asNode
states
public static final NodeClass<ArrayCopyCallNode> TYPE
MemoryNode lastLocationAccess
protected final Kind elementKind
protected final LocationIdentity locationIdentity
protected boolean aligned
protected boolean disjoint
protected boolean uninitialized
protected final HotSpotGraalRuntimeProvider runtime
public ArrayCopyCallNode(HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind, boolean aligned, boolean disjoint, boolean uninitialized)
public ArrayCopyCallNode(HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind, boolean disjoint)
protected ArrayCopyCallNode(HotSpotGraalRuntimeProvider runtime, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, Kind elementKind, LocationIdentity locationIdentity, boolean aligned, boolean disjoint, boolean uninitialized)
public ValueNode getSourcePosition()
public ValueNode getDestination()
public ValueNode getDestinationPosition()
public Kind getElementKind()
private ValueNode computeBase(ValueNode base, ValueNode pos)
public void lower(LoweringTool tool)
Lowerable
public MemoryNode getLastLocationAccess()
getLastLocationAccess
in interface MemoryAccess
public void setLastLocationAccess(MemoryNode lla)
setLastLocationAccess
in interface MemoryAccess
lla
- the MemoryNode
that represents the last kill of the locationpublic LocationIdentity getLocationIdentity()
MemoryCheckpoint.Single
LocationIdentity.any()
will kill all memory locations.getLocationIdentity
in interface MemoryAccess
getLocationIdentity
in interface MemoryCheckpoint.Single
private static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length, Kind elementKind, boolean aligned, boolean disjoint, boolean uninitialized)
private static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length, Kind elementKind, LocationIdentity locationIdentity, boolean aligned, boolean disjoint, boolean uninitialized)
public static void arraycopyObjectKillsAny(Object src, int srcPos, Object dest, int destPos, int length)
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length, Kind elementKind)
public static void disjointArraycopy(Object src, int srcPos, Object dest, int destPos, int length, Kind elementKind)
public static void disjointUninitializedArraycopy(Object src, int srcPos, Object dest, int destPos, int length, Kind elementKind)
public boolean isAligned()
public boolean isDisjoint()
public boolean isUninitialized()
boolean isHeapWordAligned(JavaConstant value, Kind kind)
public void updateAlignedDisjoint()
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