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.ValueNumberableMemoryCheckpoint.Multi, MemoryCheckpoint.Single, MemoryCheckpoint.TypeAssertionCanonicalizable.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 |
stateAfternextNODE_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, stateAfterasNode, 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, waitasNodestatespublic 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)
Lowerablepublic MemoryNode getLastLocationAccess()
getLastLocationAccess in interface MemoryAccesspublic void setLastLocationAccess(MemoryNode lla)
setLastLocationAccess in interface MemoryAccesslla - the MemoryNode that represents the last kill of the locationpublic LocationIdentity getLocationIdentity()
MemoryCheckpoint.SingleLocationIdentity.any() will kill all memory locations.getLocationIdentity in interface MemoryAccessgetLocationIdentity in interface MemoryCheckpoint.Singleprivate 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)
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 MetaAccessProvider