public final class ArrayCopyCallNode extends AbstractMemoryCheckpoint implements Lowerable, SingleMemoryKill, MemoryAccess, Canonicalizable
System.arraycopy(java.lang.Object, int, java.lang.Object, int, int) via a call to specialized stubs
based on the element type and memory properties.
The target of the call is queried via ArrayCopyLookup.lookupArraycopyDescriptor(JavaKind, boolean, boolean, boolean, org.graalvm.word.LocationIdentity).
Note: this node does not have an exception edge. Only use in situations where the exception edge is not needed.
Node.ConstantNodeParameter, Node.EdgeVisitor, Node.IndirectCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberableMemoryKill.NoLocationCanonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Ternary<T extends Node>, Canonicalizable.Unary<T extends Node>| Modifier and Type | Field and Description |
|---|---|
protected ValueNode |
dest |
protected ValueNode |
destPos |
protected ValueNode |
length |
protected ValueNode |
src |
protected ValueNode |
srcPos |
static NodeClass<ArrayCopyCallNode> |
TYPE |
stateAfternextEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdgesMULTI_KILL_NO_LOCATION, NO_LOCATION| Constructor and Description |
|---|
ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls,
WordTypes wordTypes,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
JavaKind elementKind,
boolean aligned,
boolean disjoint,
boolean uninitialized,
int heapWordSize) |
ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls,
WordTypes wordTypes,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
JavaKind copyKind,
JavaKind srcKind,
JavaKind destKind,
boolean aligned,
boolean disjoint,
boolean uninitialized,
int heapWordSize) |
ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls,
WordTypes wordTypes,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
JavaKind elementKind,
org.graalvm.word.LocationIdentity killedLocationIdentity,
boolean aligned,
boolean disjoint,
boolean uninitialized,
int heapWordSize) |
ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls,
WordTypes wordTypes,
ValueNode src,
ValueNode srcPos,
ValueNode dest,
ValueNode destPos,
ValueNode length,
JavaKind elementKind,
org.graalvm.word.LocationIdentity locationIdentity,
org.graalvm.word.LocationIdentity killedLocationIdentity,
boolean aligned,
boolean disjoint,
boolean uninitialized,
int heapWordSize) |
| Modifier and Type | Method and Description |
|---|---|
static void |
arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
JavaKind elementKind,
org.graalvm.word.LocationIdentity killedLocationIdentity,
int heapWordSize) |
static void |
arraycopyObjectKillsAny(Object src,
int srcPos,
Object dest,
int destPos,
int length,
int heapWordSize) |
Node |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
static void |
disjointArraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
JavaKind elementKind,
int heapWordSize) |
static void |
disjointArraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
JavaKind elementKind,
org.graalvm.word.LocationIdentity killedLocationIdentity,
int heapWordSize) |
static void |
disjointArraycopyDifferentKinds(Object src,
int srcPos,
Object dest,
int destPos,
int length,
JavaKind copyKind,
JavaKind srcKind,
JavaKind destKind,
int heapWordSize)
Type punned copy of
length elements of kind copyKind from an array with
srcKind elements to an array with destKind elements. |
static void |
disjointArraycopyKillsInit(Object src,
int srcPos,
Object dest,
int destPos,
int length,
JavaKind elementKind,
int heapWordSize) |
static void |
disjointUninitializedArraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length,
JavaKind elementKind,
int heapWordSize) |
ValueNode |
getDestination() |
ValueNode |
getDestinationPosition() |
JavaKind |
getElementKind() |
org.graalvm.word.LocationIdentity |
getKilledLocationIdentity()
This method is used to determine which memory location is killed by this node.
|
MemoryKill |
getLastLocationAccess() |
ValueNode |
getLength() |
org.graalvm.word.LocationIdentity |
getLocationIdentity() |
ValueNode |
getSource() |
ValueNode |
getSourcePosition() |
boolean |
hasSideEffect()
Determines if this node has a side-effect.
|
boolean |
isAligned() |
boolean |
isDisjoint() |
boolean |
isUninitialized() |
void |
lower(LoweringTool tool)
Expand this node into lower level nodes expressing the same semantics.
|
void |
setLastLocationAccess(MemoryKill lla) |
void |
updateAlignedDisjoint(MetaAccessProvider metaAccess) |
setStateAfter, stateAfter, verifyasFixedWithNextNode, next, setNextasFixedNodeasConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, isSerializableConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterfaceafterClone, applyInputs, applySuccessors, assertFalse, assertTrue, cfgPredecessors, cfgSuccessors, clearInputs, clearNodeSourcePosition, clearSuccessors, copyWithInputs, copyWithInputs, dataFlowEquals, dynamicNodeSizeEstimate, estimatedNodeCycles, estimatedNodeSize, fail, formatTo, getCreationPosition, getDebug, getDebugProperties, getDebugProperties, getInsertionPosition, getNodeClass, getNodeSourcePosition, getOptions, getUsageCount, hasExactlyOneUsage, hashCode, hasMoreThanOneUsage, hasNoUsages, hasOnlyUsagesOfType, hasUsages, hasUsagesOfType, inputPositions, inputs, isAlive, isDeleted, isUnregistered, markDeleted, maybeNotifyZeroUsages, modCount, predecessor, pushInputs, removeUsage, replaceAllInputs, replaceAndDelete, replaceAtAllUsages, replaceAtMatchingUsages, replaceAtPredecessor, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsagesAndDelete, replaceAtUsagesAndDelete, replaceFirstInput, replaceFirstSuccessor, safeDelete, setCreationPosition, setInsertionPosition, setNodeSourcePosition, singleUsage, successorPositions, successors, toString, toString, updateNodeSourcePosition, updatePredecessor, updateUsages, usages, valueEquals, verifyEdges, verifyInputs, verifySourcePosition, withNodeSourcePositionclone, equals, getClass, notify, notifyAll, wait, wait, waitasMultiMemoryKill, asSingleMemoryKill, isMemoryKill, isMultiMemoryKill, isSingleMemoryKillasNodestatesasFixedNodepublic static final NodeClass<ArrayCopyCallNode> TYPE
protected ValueNode src
protected ValueNode srcPos
protected ValueNode dest
protected ValueNode destPos
protected ValueNode length
public ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls, WordTypes wordTypes, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, JavaKind elementKind, boolean aligned, boolean disjoint, boolean uninitialized, int heapWordSize)
public ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls, WordTypes wordTypes, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, JavaKind copyKind, JavaKind srcKind, JavaKind destKind, boolean aligned, boolean disjoint, boolean uninitialized, int heapWordSize)
public ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls, WordTypes wordTypes, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, JavaKind elementKind, org.graalvm.word.LocationIdentity killedLocationIdentity, boolean aligned, boolean disjoint, boolean uninitialized, int heapWordSize)
public ArrayCopyCallNode(ArrayCopyForeignCalls foreignCalls, WordTypes wordTypes, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, JavaKind elementKind, org.graalvm.word.LocationIdentity locationIdentity, org.graalvm.word.LocationIdentity killedLocationIdentity, boolean aligned, boolean disjoint, boolean uninitialized, int heapWordSize)
public ValueNode getSource()
public ValueNode getSourcePosition()
public ValueNode getDestination()
public ValueNode getDestinationPosition()
public ValueNode getLength()
public JavaKind getElementKind()
public void lower(LoweringTool tool)
Lowerablepublic MemoryKill getLastLocationAccess()
getLastLocationAccess in interface MemoryAccesspublic void setLastLocationAccess(MemoryKill lla)
setLastLocationAccess in interface MemoryAccesslla - the MemoryKill that represents the last kill of the
LocationIdentity returned by MemoryAccess.getLocationIdentity()public org.graalvm.word.LocationIdentity getLocationIdentity()
getLocationIdentity in interface MemoryAccesspublic org.graalvm.word.LocationIdentity getKilledLocationIdentity()
SingleMemoryKillLocationIdentity.any() will kill all memory locations.getKilledLocationIdentity in interface SingleMemoryKillpublic boolean hasSideEffect()
StateSplitFrameState nodes.hasSideEffect in interface StateSplithasSideEffect in class AbstractStateSplitpublic static void arraycopyObjectKillsAny(Object src, int srcPos, Object dest, int destPos, int length, int heapWordSize)
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length, JavaKind elementKind, org.graalvm.word.LocationIdentity killedLocationIdentity, int heapWordSize)
public static void disjointArraycopy(Object src, int srcPos, Object dest, int destPos, int length, JavaKind elementKind, int heapWordSize)
public static void disjointArraycopy(Object src, int srcPos, Object dest, int destPos, int length, JavaKind elementKind, org.graalvm.word.LocationIdentity killedLocationIdentity, int heapWordSize)
public static void disjointArraycopyDifferentKinds(Object src, int srcPos, Object dest, int destPos, int length, JavaKind copyKind, JavaKind srcKind, JavaKind destKind, int heapWordSize)
length elements of kind copyKind from an array with
srcKind elements to an array with destKind elements.public static void disjointArraycopyKillsInit(Object src, int srcPos, Object dest, int destPos, int length, JavaKind elementKind, int heapWordSize)
public static void disjointUninitializedArraycopy(Object src, int srcPos, Object dest, int destPos, int length, JavaKind elementKind, int heapWordSize)
public boolean isAligned()
public boolean isDisjoint()
public boolean isUninitialized()
public void updateAlignedDisjoint(MetaAccessProvider metaAccess)
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