public abstract class AccessFieldNode extends FixedWithNextNode implements Lowerable, OrderedMemoryAccess, MemoryAccess
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 ResolvedJavaField |
field |
protected FieldLocationIdentity |
location |
protected MemoryOrderMode |
memoryOrder |
static NodeClass<AccessFieldNode> |
TYPE |
nextEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Constructor and Description |
|---|
AccessFieldNode(NodeClass<? extends AccessFieldNode> c,
Stamp stamp,
ValueNode object,
ResolvedJavaField field)
Constructs a new access field object.
|
AccessFieldNode(NodeClass<? extends AccessFieldNode> c,
Stamp stamp,
ValueNode object,
ResolvedJavaField field,
MemoryOrderMode memoryOrder)
Constructs a new access field object.
|
| Modifier and Type | Method and Description |
|---|---|
protected NodeSize |
dynamicNodeSizeEstimate()
Node subclasses should override this method if they need to specify a dynamically calculated
NodeSize value. |
ResolvedJavaField |
field()
Gets the compiler interface field for this field access.
|
org.graalvm.word.LocationIdentity |
getLocationIdentity() |
MemoryOrderMode |
getMemoryOrder()
Note the field access semantics are coupled to the access and not to the field.
|
boolean |
isStatic()
Checks whether this field access is an access to a static field.
|
ValueNode |
object() |
String |
toString(Verbosity verbosity)
Creates a String representation for
this with a given Verbosity. |
boolean |
verify() |
asFixedWithNextNode, 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, cfgPredecessors, cfgSuccessors, clearInputs, clearNodeSourcePosition, clearSuccessors, copyWithInputs, copyWithInputs, dataFlowEquals, 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, updateNodeSourcePosition, updatePredecessor, updateUsages, usages, valueEquals, verifyEdges, verifyInputs, verifySourcePosition, withNodeSourcePositionclone, equals, getClass, notify, notifyAll, wait, wait, waitordersMemoryAccessesgetLastLocationAccess, setLastLocationAccessasNodeasFixedNodepublic static final NodeClass<AccessFieldNode> TYPE
protected final FieldLocationIdentity location
protected final ResolvedJavaField field
protected final MemoryOrderMode memoryOrder
public AccessFieldNode(NodeClass<? extends AccessFieldNode> c, Stamp stamp, ValueNode object, ResolvedJavaField field, MemoryOrderMode memoryOrder)
object - the instruction producing the receiver objectfield - the compiler interface representation of the fieldmemoryOrder - specifies the memory ordering requirements of the access. This overrides
the field volatile modifier.public AccessFieldNode(NodeClass<? extends AccessFieldNode> c, Stamp stamp, ValueNode object, ResolvedJavaField field)
object - the instruction producing the receiver objectfield - the compiler interface representation of the fieldpublic ValueNode object()
public org.graalvm.word.LocationIdentity getLocationIdentity()
getLocationIdentity in interface MemoryAccesspublic ResolvedJavaField field()
public boolean isStatic()
true if this field access is to a static fieldpublic MemoryOrderMode getMemoryOrder()
getMemoryOrder in interface OrderedMemoryAccesspublic String toString(Verbosity verbosity)
Nodethis with a given Verbosity.protected 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