public final class LoopEndNode extends AbstractEndNode
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 int |
endIndex |
static NodeClass<LoopEndNode> |
TYPE |
EMPTY_ARRAY, stamp
NODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Constructor and Description |
---|
LoopEndNode(LoopBeginNode begin) |
Modifier and Type | Method and Description |
---|---|
boolean |
canGuestSafepoint() |
boolean |
canSafepoint() |
Iterable<? extends Node> |
cfgSuccessors()
Returns an iterator that will provide all control-flow successors of
this . |
void |
disableGuestSafepoint() |
void |
disableSafepoint()
Disables safepoints for only this loop end (in contrast to disabling it for
the whole loop . |
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) |
LoopBeginNode |
loopBegin() |
AbstractMergeNode |
merge() |
void |
setLoopBegin(LoopBeginNode x) |
boolean |
verify() |
asFixedNode
asConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, isSerializableConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterface
afterClone, applyInputs, applySuccessors, assertFalse, assertTrue, cfgPredecessors, clearInputs, clearNodeSourcePosition, clearSuccessors, copyWithInputs, copyWithInputs, dataFlowEquals, estimatedNodeSize, fail, formatTo, getCreationPosition, getDebug, getDebugProperties, getDebugProperties, getInsertionPosition, getNodeClass, getNodeSourcePosition, getOptions, getUsageCount, hasExactlyOneUsage, hasExactlyOneUsageOfType, 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, withNodeSourcePosition
clone, equals, getClass, notify, notifyAll, wait, wait, wait
asNode
public static final NodeClass<LoopEndNode> TYPE
protected int endIndex
public LoopEndNode(LoopBeginNode begin)
public AbstractMergeNode merge()
merge
in class AbstractEndNode
public LoopBeginNode loopBegin()
public void setLoopBegin(LoopBeginNode x)
public void disableSafepoint()
the whole loop
.public void disableGuestSafepoint()
public boolean canGuestSafepoint()
public boolean canSafepoint()
public void generate(NodeLIRBuilderTool gen)
generate
in interface LIRLowerable
generate
in class AbstractEndNode
public boolean verify()
verify
in class AbstractEndNode
public Iterable<? extends Node> cfgSuccessors()
Node
this
. Normally
this will be the contents of all fields annotated with Node.Successor
, but some node
classes (like EndNode) may return different nodes.cfgSuccessors
in class AbstractEndNode
public NodeCycles estimatedNodeCycles()
estimatedNodeCycles
in class Node
protected NodeSize dynamicNodeSizeEstimate()
Node
NodeSize
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