Class BasicArrayCopyNode
java.lang.Object
jdk.graal.compiler.graph.Node
jdk.graal.compiler.nodes.ValueNode
jdk.graal.compiler.nodes.FixedNode
jdk.graal.compiler.nodes.ControlSplitNode
jdk.graal.compiler.nodes.WithExceptionNode
jdk.graal.compiler.replacements.nodes.BasicArrayCopyNode
- All Implemented Interfaces:
Cloneable
,Formattable
,MemoryKillMarker
,DeoptBciSupplier
,DeoptimizingNode
,DeoptimizingNode.DeoptDuring
,FixedNodeInterface
,MemoryAccess
,MemoryKill
,SingleMemoryKill
,Lowerable
,NodeWithState
,Virtualizable
,StateSplit
,ValueNodeInterface
- Direct Known Subclasses:
ArrayCopyNode
,ArrayCopyWithDelayedLoweringNode
public abstract class BasicArrayCopyNode
extends WithExceptionNode
implements DeoptBciSupplier, StateSplit, Virtualizable, SingleMemoryKill, MemoryAccess, Lowerable, DeoptimizingNode.DeoptDuring
Base class for nodes that intrinsify
System.arraycopy(java.lang.Object, int, java.lang.Object, int, int)
.-
Nested Class Summary
Nested classes/interfaces inherited from class jdk.graal.compiler.graph.Node
Node.ConstantNodeParameter, Node.EdgeVisitor, Node.IndirectInputChangedCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.InputsChangedCanonicalization, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberable
Nested classes/interfaces inherited from interface jdk.graal.compiler.nodes.DeoptimizingNode
DeoptimizingNode.DeoptAfter, DeoptimizingNode.DeoptBefore, DeoptimizingNode.DeoptDuring
Nested classes/interfaces inherited from interface jdk.graal.compiler.nodes.memory.MemoryKill
MemoryKill.NoLocation
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected int
protected jdk.vm.ci.meta.JavaKind
protected MemoryKill
protected FrameState
static final NodeClass
<BasicArrayCopyNode> Fields inherited from class jdk.graal.compiler.nodes.WithExceptionNode
exceptionEdge, next
Fields inherited from class jdk.graal.compiler.nodes.ValueNode
EMPTY_ARRAY, stamp
Fields inherited from class jdk.graal.compiler.graph.Node
NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithOnlyInputEdges
Fields inherited from interface jdk.graal.compiler.nodes.memory.MemoryKill
MULTI_KILL_NO_LOCATION, NO_LOCATION
-
Constructor Summary
ConstructorsConstructorDescriptionBasicArrayCopyNode
(NodeClass<? extends BasicArrayCopyNode> type, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, jdk.vm.ci.meta.JavaKind elementKind) BasicArrayCopyNode
(NodeClass<? extends BasicArrayCopyNode> type, ValueNode src, ValueNode srcPos, ValueNode dest, ValueNode destPos, ValueNode length, jdk.vm.ci.meta.JavaKind elementKind, int bci) -
Method Summary
Modifier and TypeMethodDescriptionint
bci()
boolean
Determines if this node needs deoptimization information.static boolean
checkBounds
(int position, int length, VirtualObjectNode virtualObject) static boolean
checkEntryTypes
(int srcPos, int length, VirtualObjectNode src, jdk.vm.ci.meta.ResolvedJavaType destComponentType, VirtualizerTool tool) void
computeStateDuring
(FrameState currentStateAfter) Compute theFrameState
describing the program state during the execution of this node from an inputFrameState
describing the program state after finishing the execution of this node.jdk.vm.ci.meta.JavaKind
org.graalvm.word.LocationIdentity
This method is used to determine which memory location is killed by this node.org.graalvm.word.LocationIdentity
boolean
Determines if this node has a side-effect.boolean
isExact()
static jdk.vm.ci.meta.JavaKind
selectComponentKind
(BasicArrayCopyNode arraycopy) void
setBci
(int bci) Remember the byte code index (BCI) for code generation or lowering purposes.void
void
void
setSourcePosition
(ValueNode value) void
Sets theFrameState
corresponding to the state of the JVM after execution of this node.void
setStateDuring
(FrameState stateDuring) Sets theFrameState
describing the program state during the execution of this node.Gets theFrameState
corresponding to the state of the JVM after execution of this node.void
virtualize
(VirtualizerTool tool) A node class can implement this method to convey information about what its effect would be if some of its inputs were virtualized.Methods inherited from class jdk.graal.compiler.nodes.WithExceptionNode
exceptionEdge, getPrimarySuccessor, getProfileData, getSuccessorCount, killExceptionEdge, next, probability, replaceWithNonThrowing, setExceptionEdge, setNext, setProbability
Methods inherited from class jdk.graal.compiler.nodes.ControlSplitNode
successorProbabilities
Methods inherited from class jdk.graal.compiler.nodes.FixedNode
asFixedNode, verifyNode
Methods inherited from class jdk.graal.compiler.nodes.ValueNode
asConstant, asJavaConstant, asNode, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterface
Methods inherited from class jdk.graal.compiler.graph.Node
afterClone, applyInputs, applySuccessors, assertFalse, assertTrue, cfgPredecessors, cfgSuccessors, clearInputs, clearNodeSourcePosition, clearSuccessors, copyWithInputs, copyWithInputs, dataFlowEquals, dynamicNodeSizeEstimate, estimatedNodeCycles, estimatedNodeSize, fail, formatTo, getCreationPosition, getDebug, getDebugProperties, getDebugProperties, getId, getIdBeforeDeletion, getInsertionPosition, getNodeClass, getNodeSourcePosition, getOptions, getUsageCount, hasExactlyOneUsage, hasExactlyOneUsageOfType, hashCode, hasMoreThanOneUsage, hasNoUsages, hasUsages, inputPositions, inputs, isAlive, isDeleted, isUnregistered, markDeleted, maybeNotifyZeroUsages, modCount, predecessor, pushInputs, removeDeadUsages, removeUsage, removeUsages, replaceAllInputs, replaceAndDelete, replaceAtAllUsages, replaceAtMatchingUsages, replaceAtPredecessor, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceAtUsagesAndDelete, replaceFirstInput, replaceFirstSuccessor, safeDelete, setCreationPosition, setInsertionPosition, setNodeSourcePosition, singleUsage, successorPositions, successors, toString, toString, updateNodeSourcePosition, updatePredecessor, updateUsages, usages, valueEquals, verify, verify, verifyEdges, verifyInputs, withNodeSourcePosition
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface jdk.graal.compiler.nodes.DeoptimizingNode
validateDeoptFrameStates
Methods inherited from interface jdk.graal.compiler.nodes.FixedNodeInterface
asFixedNode
Methods inherited from interface jdk.graal.compiler.nodes.spi.NodeWithState
states
Methods inherited from interface jdk.graal.compiler.nodes.ValueNodeInterface
asNode
-
Field Details
-
TYPE
-
lastLocationAccess
-
stateAfter
-
elementKind
protected jdk.vm.ci.meta.JavaKind elementKind -
bci
protected int bci
-
-
Constructor Details
-
BasicArrayCopyNode
-
BasicArrayCopyNode
-
-
Method Details
-
bci
public int bci()- Specified by:
bci
in interfaceDeoptBciSupplier
- Returns:
- the byte code index (BCI) associated with the node implementing this interface
-
setBci
public void setBci(int bci) Description copied from interface:DeoptBciSupplier
Remember the byte code index (BCI) for code generation or lowering purposes. For example, nodes lowering to foreign calls that can safepoint require a valid BCI for computations of the during-state of such a foreign call.- Specified by:
setBci
in interfaceDeoptBciSupplier
-
getElementKind
public jdk.vm.ci.meta.JavaKind getElementKind() -
getLocationIdentity
public org.graalvm.word.LocationIdentity getLocationIdentity()- Specified by:
getLocationIdentity
in interfaceMemoryAccess
-
getKilledLocationIdentity
public org.graalvm.word.LocationIdentity getKilledLocationIdentity()Description copied from interface:SingleMemoryKill
This method is used to determine which memory location is killed by this node. Returning the special valueLocationIdentity.any()
will kill all memory locations.- Specified by:
getKilledLocationIdentity
in interfaceSingleMemoryKill
- Returns:
- the identity of the location killed by this node.
-
getLastLocationAccess
- Specified by:
getLastLocationAccess
in interfaceMemoryAccess
- Returns:
- a MemoryKill that represents the last memory state in the memory graph for the LocationIdentity returned by MemoryAccess.getLocationIdentity()
-
setLastLocationAccess
- Specified by:
setLastLocationAccess
in interfaceMemoryAccess
- Parameters:
lla
- theMemoryKill
that represents the last kill of the LocationIdentity returned by MemoryAccess.getLocationIdentity()
-
stateDuring
- Specified by:
stateDuring
in interfaceDeoptimizingNode.DeoptDuring
-
setStateDuring
Description copied from interface:DeoptimizingNode.DeoptDuring
Sets theFrameState
describing the program state during the execution of this node.- Specified by:
setStateDuring
in interfaceDeoptimizingNode.DeoptDuring
-
stateAfter
Description copied from interface:StateSplit
Gets theFrameState
corresponding to the state of the JVM after execution of this node.- Specified by:
stateAfter
in interfaceStateSplit
-
setStateAfter
Description copied from interface:StateSplit
Sets theFrameState
corresponding to the state of the JVM after execution of this node.- Specified by:
setStateAfter
in interfaceStateSplit
-
hasSideEffect
public boolean hasSideEffect()Description copied from interface:StateSplit
Determines if this node has a side-effect. Such nodes cannot be safely re-executed because they modify state which is visible to other threads or modify state beyond what is captured inFrameState
nodes.- Specified by:
hasSideEffect
in interfaceStateSplit
-
selectComponentKind
-
getSource
-
getSourcePosition
-
getDestination
-
getDestinationPosition
-
getLength
-
setSource
-
setSourcePosition
-
checkBounds
-
checkEntryTypes
public static boolean checkEntryTypes(int srcPos, int length, VirtualObjectNode src, jdk.vm.ci.meta.ResolvedJavaType destComponentType, VirtualizerTool tool) -
isExact
public boolean isExact() -
virtualize
Description copied from interface:Virtualizable
A node class can implement this method to convey information about what its effect would be if some of its inputs were virtualized. All modifications must be made through the supplied tool, and not directly on the node, because by the time this method is called the virtualized/non-virtualized state is still speculative and might not hold because of loops, etc.- Specified by:
virtualize
in interfaceVirtualizable
- Parameters:
tool
- the tool used to describe the effects of this node
-
canDeoptimize
public boolean canDeoptimize()Description copied from interface:DeoptimizingNode
Determines if this node needs deoptimization information.- Specified by:
canDeoptimize
in interfaceDeoptimizingNode
-
computeStateDuring
Description copied from interface:DeoptimizingNode.DeoptDuring
Compute theFrameState
describing the program state during the execution of this node from an inputFrameState
describing the program state after finishing the execution of this node.- Specified by:
computeStateDuring
in interfaceDeoptimizingNode.DeoptDuring
-