public abstract class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, Simplifiable, LIRLowerable
Node.ConstantNodeParameter, Node.EdgeVisitor, Node.IndirectCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberable| Modifier and Type | Field and Description |
|---|---|
protected NodeInputList<EndNode> |
ends |
static NodeClass<AbstractMergeNode> |
TYPE |
stateAfternextEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
protected |
AbstractMergeNode(NodeClass<? extends AbstractMergeNode> c) |
| Modifier and Type | Method and Description |
|---|---|
void |
addForwardEnd(EndNode end) |
NodeIterable<Node> |
anchored() |
NodeIterable<EndNode> |
cfgPredecessors() |
void |
clearEnds() |
protected void |
deleteEnd(AbstractEndNode end) |
static boolean |
duplicateReturnThroughMerge(MergeNode merge) |
EndNode |
forwardEndAt(int index) |
int |
forwardEndCount() |
int |
forwardEndIndex(EndNode end) |
NodeInputList<EndNode> |
forwardEnds() |
void |
generate(NodeLIRBuilderTool gen) |
boolean |
isPhiAtMerge(Node value)
Determines if a given node is a phi whose merge is this node.
|
NodeIterable<MemoryPhiNode> |
memoryPhis() |
AbstractEndNode |
phiPredecessorAt(int index) |
int |
phiPredecessorCount() |
int |
phiPredecessorIndex(AbstractEndNode pred) |
NodeIterable<PhiNode> |
phis() |
void |
removeEnd(AbstractEndNode pred)
Removes the given end from the merge, along with the entries corresponding to this end in the
phis connected to the merge.
|
void |
simplify(SimplifierTool tool)
This simplify method can deal with a null value for tool, so that it can be used outside of
canonicalization.
|
NodeIterable<ValuePhiNode> |
valuePhis() |
boolean |
verify() |
protected boolean |
verifyState() |
hasSideEffect, setStateAfter, stateAftergetBlockNodes, guards, hasAnchored, hasSpeculationFence, isUsedAsGuardInput, prepareDelete, prepareDelete, prevBegin, setHasSpeculationFenceasFixedWithNextNode, 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, 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, waitstatesasFixedNodeasNodepublic static final NodeClass<AbstractMergeNode> TYPE
protected NodeInputList<EndNode> ends
protected AbstractMergeNode(NodeClass<? extends AbstractMergeNode> c)
public void generate(NodeLIRBuilderTool gen)
generate in interface LIRLowerablegenerate in class AbstractBeginNodepublic int forwardEndIndex(EndNode end)
public void addForwardEnd(EndNode end)
public final int forwardEndCount()
public final EndNode forwardEndAt(int index)
public NodeIterable<EndNode> cfgPredecessors()
cfgPredecessors in class Nodepublic boolean isPhiAtMerge(Node value)
value - the instruction to testtrue if value is a phi and its merge is thispublic void removeEnd(AbstractEndNode pred)
pred - the end to removeprotected void deleteEnd(AbstractEndNode end)
public void clearEnds()
public NodeInputList<EndNode> forwardEnds()
public int phiPredecessorCount()
public int phiPredecessorIndex(AbstractEndNode pred)
public AbstractEndNode phiPredecessorAt(int index)
public NodeIterable<PhiNode> phis()
public NodeIterable<ValuePhiNode> valuePhis()
public NodeIterable<MemoryPhiNode> memoryPhis()
public NodeIterable<Node> anchored()
anchored in class AbstractBeginNodepublic void simplify(SimplifierTool tool)
simplify in interface Simplifiablepublic static boolean duplicateReturnThroughMerge(MergeNode merge)
protected boolean verifyState()
public boolean verify()
verify in class AbstractBeginNode