public class MonitorIdNode extends ValueNode implements IterableNodeType, LIRLowerable
MonitorEnterNode, from the
MonitorExitNode and from the FrameState.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 |
bci
We use the BCI as an identity for balanced locking.
|
protected boolean |
eliminated |
protected int |
lockDepth |
protected boolean |
multipleEntry
Specifies if this is a monitor that was entered on disjoint control flow paths.
|
static NodeClass<MonitorIdNode> |
TYPE |
EMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
|
MonitorIdNode(int lockDepth) |
|
MonitorIdNode(int lockDepth,
int bci) |
|
MonitorIdNode(int lockDepth,
int bci,
boolean multipleEntry) |
protected |
MonitorIdNode(NodeClass<? extends MonitorIdNode> c,
int lockDepth,
int bci) |
| Modifier and Type | Method and Description |
|---|---|
void |
generate(NodeLIRBuilderTool generator) |
int |
getBci() |
int |
getLockDepth() |
boolean |
isEliminated() |
boolean |
isMultipleEntry()
Indicates that the associated monitor operations might have multiple distinct monitorenter
bytecodes for different objects.
|
static boolean |
monitorIdentityEquals(MonitorIdNode m1,
MonitorIdNode m2)
Determine if the two monitor ID nodes represent locking of the same bytecode location.
|
void |
setEliminated() |
void |
setLockDepth(int lockDepth) |
void |
setMultipleEntry() |
asConstant, 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, 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, verify, verifyEdges, verifyInputs, verifySourcePosition, withNodeSourcePositionpublic static final NodeClass<MonitorIdNode> TYPE
protected int lockDepth
protected boolean eliminated
protected final int bci
protected boolean multipleEntry
public MonitorIdNode(int lockDepth,
int bci)
public MonitorIdNode(int lockDepth,
int bci,
boolean multipleEntry)
public MonitorIdNode(int lockDepth)
protected MonitorIdNode(NodeClass<? extends MonitorIdNode> c, int lockDepth, int bci)
public int getBci()
public void setMultipleEntry()
public boolean isMultipleEntry()
public int getLockDepth()
public void setLockDepth(int lockDepth)
public boolean isEliminated()
public void setEliminated()
public void generate(NodeLIRBuilderTool generator)
generate in interface LIRLowerablepublic static boolean monitorIdentityEquals(MonitorIdNode m1, MonitorIdNode m2)