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, stampNODE_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() |
asFixedNodeasConstant, 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, 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, withNodeSourcePositionclone, equals, getClass, notify, notifyAll, wait, wait, waitasNodepublic static final NodeClass<LoopEndNode> TYPE
protected int endIndex
public LoopEndNode(LoopBeginNode begin)
public AbstractMergeNode merge()
merge in class AbstractEndNodepublic 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 LIRLowerablegenerate in class AbstractEndNodepublic boolean verify()
verify in class AbstractEndNodepublic Iterable<? extends Node> cfgSuccessors()
Nodethis. 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 AbstractEndNodepublic 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