public final class InvokeNode extends AbstractMemoryCheckpoint implements Invoke, LIRLowerable, SingleMemoryKill, UncheckedInterfaceProvider
InvokeNode represents all kinds of method calls.Node.ConstantNodeParameter, Node.EdgeVisitor, Node.IndirectCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberableInvoke.InlineControlMemoryKill.NoLocationDeoptimizingNode.DeoptAfter, DeoptimizingNode.DeoptBefore, DeoptimizingNode.DeoptDuring| Modifier and Type | Field and Description |
|---|---|
protected int |
bci |
protected org.graalvm.word.LocationIdentity |
identity |
protected Invoke.InlineControl |
inlineControl |
protected boolean |
polymorphic |
static NodeClass<InvokeNode> |
TYPE |
stateAfternextEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdgesCYCLES_UNKNOWN_RATIONALE, SIZE_UNKNOWN_RATIONALEMULTI_KILL_NO_LOCATION, NO_LOCATION| Constructor and Description |
|---|
InvokeNode(CallTargetNode callTarget,
int bci) |
InvokeNode(CallTargetNode callTarget,
int bci,
org.graalvm.word.LocationIdentity identity) |
InvokeNode(CallTargetNode callTarget,
int bci,
Stamp stamp) |
InvokeNode(CallTargetNode callTarget,
int bci,
Stamp stamp,
org.graalvm.word.LocationIdentity identity) |
InvokeNode(InvokeWithExceptionNode invoke) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
afterClone(Node other) |
int |
bci() |
CallTargetNode |
callTarget() |
boolean |
canDeoptimize()
Determines if this node needs deoptimization information.
|
ValueNode |
classInit() |
protected NodeSize |
dynamicNodeSizeEstimate()
Node subclasses should override this method if they need to specify a dynamically calculated
NodeSize value. |
NodeCycles |
estimatedNodeCycles() |
void |
generate(NodeLIRBuilderTool gen) |
Map<Object,Object> |
getDebugProperties(Map<Object,Object> map)
Fills a
Map with properties of this for use in debugging (e.g., to view in
the ideal graph visualizer). |
Invoke.InlineControl |
getInlineControl() |
org.graalvm.word.LocationIdentity |
getKilledLocationIdentity()
This method is used to determine which memory location is killed by this node.
|
boolean |
isAllowedUsageType(InputType type) |
boolean |
isPolymorphic()
True if this invocation is almost certainly polymorphic, false when in doubt.
|
void |
setBci(int newBci)
Remember the byte code index (BCI) for code generation or lowering purposes.
|
void |
setClassInit(ValueNode classInit) |
void |
setInlineControl(Invoke.InlineControl control) |
void |
setPolymorphic(boolean value) |
void |
setStateDuring(FrameState stateDuring)
Sets the
FrameState describing the program state during the execution of this
node. |
FrameState |
stateDuring() |
String |
toString(Verbosity verbosity)
Creates a String representation for
this with a given Verbosity. |
Stamp |
uncheckedStamp()
Returns a stamp containing information about interface types that has not been verified or
null if no such stamp is available.
|
hasSideEffect, setStateAfter, stateAfter, verifyasFixedWithNextNode, next, setNextasFixedNodeasConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, inferStamp, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, isSerializableConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterfaceapplyInputs, applySuccessors, assertFalse, assertTrue, cfgPredecessors, cfgSuccessors, clearInputs, clearNodeSourcePosition, clearSuccessors, copyWithInputs, copyWithInputs, dataFlowEquals, estimatedNodeSize, fail, formatTo, getCreationPosition, getDebug, 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, updateNodeSourcePosition, updatePredecessor, updateUsages, usages, valueEquals, verifyEdges, verifyInputs, verifySourcePosition, withNodeSourcePositionclone, equals, getClass, notify, notifyAll, wait, wait, waitcomputeStateDuring, getContextMethod, getContextType, getInvokeKind, getReceiver, getReceiverType, getTargetMethod, isAlive, next, predecessor, setNext, setUseForInlining, useForInliningasMultiMemoryKill, asSingleMemoryKill, isMemoryKill, isMultiMemoryKill, isSingleMemoryKillhasSideEffect, setStateAfter, stateAfterstatesasFixedNodeasNodeasFixedNodeOrNull, updateInliningLogAfterClone, updateInliningLogAfterRegisterpublic static final NodeClass<InvokeNode> TYPE
protected int bci
protected boolean polymorphic
protected Invoke.InlineControl inlineControl
protected final org.graalvm.word.LocationIdentity identity
public InvokeNode(CallTargetNode callTarget, int bci)
public InvokeNode(CallTargetNode callTarget, int bci, org.graalvm.word.LocationIdentity identity)
public InvokeNode(CallTargetNode callTarget, int bci, Stamp stamp)
public InvokeNode(CallTargetNode callTarget, int bci, Stamp stamp, org.graalvm.word.LocationIdentity identity)
public InvokeNode(InvokeWithExceptionNode invoke)
protected void afterClone(Node other)
afterClone in class Nodepublic CallTargetNode callTarget()
callTarget in interface Invokepublic boolean isPolymorphic()
InvokeisPolymorphic in interface Invokepublic void setPolymorphic(boolean value)
setPolymorphic in interface Invokepublic void setInlineControl(Invoke.InlineControl control)
setInlineControl in interface Invokepublic Invoke.InlineControl getInlineControl()
getInlineControl in interface Invokepublic boolean isAllowedUsageType(InputType type)
isAllowedUsageType in class ValueNodepublic Map<Object,Object> getDebugProperties(Map<Object,Object> map)
NodeMap with properties of this for use in debugging (e.g., to view in
the ideal graph visualizer). Subclasses overriding this method should also fill the map using
their superclass.getDebugProperties in class Nodepublic org.graalvm.word.LocationIdentity getKilledLocationIdentity()
SingleMemoryKillLocationIdentity.any() will kill all memory locations.getKilledLocationIdentity in interface SingleMemoryKillpublic void generate(NodeLIRBuilderTool gen)
generate in interface LIRLowerablepublic String toString(Verbosity verbosity)
Nodethis with a given Verbosity.public int bci()
bci in interface DeoptBciSupplierpublic void setBci(int newBci)
DeoptBciSuppliersetBci in interface DeoptBciSupplierpublic boolean canDeoptimize()
DeoptimizingNodecanDeoptimize in interface DeoptimizingNodepublic FrameState stateDuring()
stateDuring in interface DeoptimizingNode.DeoptDuringpublic void setStateDuring(FrameState stateDuring)
DeoptimizingNode.DeoptDuringFrameState describing the program state during the execution of this
node.setStateDuring in interface DeoptimizingNode.DeoptDuringpublic Stamp uncheckedStamp()
UncheckedInterfaceProvideruncheckedStamp in interface UncheckedInterfaceProviderpublic void setClassInit(ValueNode classInit)
setClassInit in interface Invokepublic NodeCycles estimatedNodeCycles()
estimatedNodeCycles in class Nodeprotected NodeSize dynamicNodeSizeEstimate()
NodeNodeSize value. If the node size is static please use NodeInfo.size().
NOTE: When overriding this method, make sure that *all* field reads are null checked (even if
Java semantics seemingly make the value of the field non-null). This is necessary because
node size estimates are needed even during graph decoding which, for some nodes, first
reflectively creates a stub and then later, reflectively, populates its fields. This method
could be invoked between these two points. For this reason, when overriding this method
assume that all fields can and will be null.dynamicNodeSizeEstimate in class Node