public abstract class AbstractMergeNode extends BeginStateSplitNode implements IterableNodeType, LIRLowerable
Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberable
Modifier and Type | Field and Description |
---|---|
protected NodeInputList<EndNode> |
ends |
static NodeClass<AbstractMergeNode> |
TYPE |
stateAfter
next
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, 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) |
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.
|
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() |
hasSideEffect, setStateAfter, stateAfter
getBlockNodes, guards, prepareDelete, prepareDelete, prevBegin, proxies, removeProxies, verify
asNode, next, setNext
asConstant, asJavaConstant, getKind, graph, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isNullConstant, setStamp, stamp, updateStamp
acceptInputs, acceptSuccessors, afterClone, assertFalse, assertTrue, cfgSuccessors, clearInputs, clearSuccessors, copyWithInputs, copyWithInputs, equals, fail, formatTo, getDebugProperties, getDebugProperties, getId, getNodeClass, getUsageAt, getUsageCount, hashCode, hasNoUsages, hasUsages, inputs, isAlive, isDeleted, markDeleted, modCount, newIdentityMap, newIdentityMap, newIdentityMap, newMap, newMap, newMap, newSet, newSet, predecessor, pushInputs, removeUsage, replaceAndDelete, replaceAtMatchingUsages, replaceAtPredecessor, replaceAtUsages, replaceAtUsages, replaceAtUsages, replaceFirstInput, replaceFirstSuccessor, safeDelete, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verifyEdges, verifyInputs
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
asNode
states
asNode
asNode
public static final NodeClass<AbstractMergeNode> TYPE
protected NodeInputList<EndNode> ends
protected AbstractMergeNode(NodeClass<? extends AbstractMergeNode> c)
public void generate(NodeLIRBuilderTool gen)
generate
in interface LIRLowerable
generate
in class AbstractBeginNode
public int forwardEndIndex(EndNode end)
public void addForwardEnd(EndNode end)
public int forwardEndCount()
public EndNode forwardEndAt(int index)
public NodeIterable<EndNode> cfgPredecessors()
cfgPredecessors
in class Node
public boolean isPhiAtMerge(Node value)
value
- the instruction to testtrue
if value
is a phi and its merge is this
public 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<Node> anchored()
anchored
in class AbstractBeginNode
public void simplify(SimplifierTool tool)
simplify
in interface Simplifiable
simplify
in class AbstractBeginNode