public abstract class MacroNode extends FixedWithNextNode implements MacroInvokable
MacroInvokable| Modifier and Type | Class and Description |
|---|---|
static class |
MacroNode.MacroParams
Encapsulates the parameters for constructing a
MacroNode that are the same for all
leaf constructor call sites. |
Node.ConstantNodeParameter, Node.EdgeVisitor, Node.IndirectCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberableMemoryKill.NoLocation| Modifier and Type | Field and Description |
|---|---|
protected NodeInputList<ValueNode> |
arguments |
protected int |
bci |
protected ResolvedJavaMethod |
callerMethod |
protected CallTargetNode.InvokeKind |
invokeKind |
protected StampPair |
returnStamp |
protected FrameState |
stateAfter |
protected ResolvedJavaMethod |
targetMethod |
static NodeClass<MacroNode> |
TYPE |
nextEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdgesMULTI_KILL_NO_LOCATION, NO_LOCATION| Modifier | Constructor and Description |
|---|---|
protected |
MacroNode(NodeClass<? extends MacroNode> c,
MacroNode.MacroParams p) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
afterClone(Node other) |
int |
bci() |
protected InvokeNode |
createInvoke(boolean verifyStamp)
Replace this node with the equivalent invoke.
|
NodeInputList<ValueNode> |
getArguments()
Gets the arguments for this macro node.
|
ResolvedJavaMethod |
getContextMethod()
Returns the method from which the call is executed.
|
CallTargetNode.InvokeKind |
getInvokeKind() |
org.graalvm.word.LocationIdentity |
getKilledLocationIdentity()
Returns
LocationIdentity.any(). |
org.graalvm.word.LocationIdentity |
getLocationIdentity() |
ResolvedJavaMethod |
getTargetMethod() |
boolean |
hasSideEffect()
Determines if this node has a side-effect.
|
boolean |
inferStamp()
This method can be overridden by subclasses of
ValueNode if they need to recompute
their stamp if their inputs change. |
Invoke |
replaceWithInvoke()
Replaces this node with an invoke of the target method.
|
void |
setStateAfter(FrameState x)
Sets the
FrameState corresponding to the state of the JVM after execution of this
node. |
FrameState |
stateAfter()
Gets the
FrameState corresponding to the state of the JVM after execution of this
node. |
ValueNode[] |
toArgumentArray() |
protected void |
verifyStamp() |
asFixedWithNextNode, next, setNextasFixedNode, verifyasConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, isAllowedUsageType, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, isSerializableConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterfaceapplyInputs, 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, waitassertArgumentCount, getArgument, getArgumentCount, lower, lowerReplacement, setBciasFixedNodeOrNull, updateInliningLogAfterClone, updateInliningLogAfterRegisterstatesasFixedNodeasNodeasMultiMemoryKill, asSingleMemoryKill, isMemoryKill, isMultiMemoryKill, isSingleMemoryKillprotected NodeInputList<ValueNode> arguments
protected FrameState stateAfter
protected final int bci
protected final ResolvedJavaMethod callerMethod
protected final ResolvedJavaMethod targetMethod
protected final CallTargetNode.InvokeKind invokeKind
protected final StampPair returnStamp
protected MacroNode(NodeClass<? extends MacroNode> c, MacroNode.MacroParams p)
public boolean inferStamp()
ValueNodeValueNode if they need to recompute
their stamp if their inputs change. A typical implementation will compute the stamp and pass
it to ValueNode.updateStamp(Stamp), whose return value can be used as the result of this
method.inferStamp in class ValueNodeprotected void verifyStamp()
public ResolvedJavaMethod getContextMethod()
InvokablegetContextMethod in interface Invokablepublic NodeInputList<ValueNode> getArguments()
MacroInvokablegetArguments in interface MacroInvokablepublic ValueNode[] toArgumentArray()
public int bci()
bci in interface DeoptBciSupplierpublic ResolvedJavaMethod getTargetMethod()
getTargetMethod in interface Invokablepublic CallTargetNode.InvokeKind getInvokeKind()
getInvokeKind in interface MacroInvokablepublic FrameState stateAfter()
StateSplitFrameState corresponding to the state of the JVM after execution of this
node.stateAfter in interface StateSplitpublic void setStateAfter(FrameState x)
StateSplitFrameState corresponding to the state of the JVM after execution of this
node.setStateAfter in interface StateSplitpublic final boolean hasSideEffect()
StateSplitFrameState nodes.hasSideEffect in interface StateSplitpublic final org.graalvm.word.LocationIdentity getKilledLocationIdentity()
LocationIdentity.any(). This node needs to kill any location because it might
get replaced with an invoke and
InvokeNode.getKilledLocationIdentity() kills LocationIdentity.any() and the
kill location must not get broader.getKilledLocationIdentity in interface SingleMemoryKillprotected void afterClone(Node other)
afterClone in class Nodepublic Invoke replaceWithInvoke()
MacroInvokablereplaceWithInvoke in interface MacroInvokableInvokepublic org.graalvm.word.LocationIdentity getLocationIdentity()
protected InvokeNode createInvoke(boolean verifyStamp)