public abstract class VirtualObjectNode extends ValueNode implements LIRLowerable, IterableNodeType
Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberable
Modifier and Type | Field and Description |
---|---|
protected boolean |
hasIdentity |
private int |
objectId |
static NodeClass<VirtualObjectNode> |
TYPE |
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Modifier | Constructor and Description |
---|---|
protected |
VirtualObjectNode(NodeClass<? extends VirtualObjectNode> c,
ResolvedJavaType type,
boolean hasIdentity) |
Modifier and Type | Method and Description |
---|---|
protected void |
afterClone(Node other) |
abstract VirtualObjectNode |
duplicate()
Returns an exact duplicate of this virtual object node, which has not been added to the graph
yet.
|
abstract int |
entryCount()
The number of entries this virtual object has.
|
abstract int |
entryIndexForOffset(long constantOffset,
Kind expectedEntryKind)
If the given index denotes an entry in this virtual object, the index of this entry is
returned.
|
abstract Kind |
entryKind(int index)
Returns the
Kind of the entry at the given index. |
abstract String |
entryName(int i)
Returns the name of the entry at the given index.
|
void |
generate(NodeLIRBuilderTool gen) |
abstract ValueNode |
getMaterializedRepresentation(FixedNode fixed,
ValueNode[] entries,
LockState locks)
Returns a node that can be used to materialize this virtual object.
|
int |
getObjectId() |
boolean |
hasIdentity()
Specifies whether this virtual object has an object identity.
|
void |
resetObjectId() |
void |
setIdentity(boolean identity) |
void |
setObjectId(int objectId) |
abstract ResolvedJavaType |
type()
The type of object described by this
VirtualObjectNode . |
asConstant, asJavaConstant, asNode, getKind, graph, inferStamp, isAllowedUsageType, isConstant, isConstantPredicate, isNullConstant, setStamp, stamp, updateStamp
acceptInputs, acceptSuccessors, assertFalse, assertTrue, cfgPredecessors, 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, simplify, successors, toString, toString, updatePredecessor, updateUsages, updateUsagesInterface, usages, valueEquals, verify, verifyEdges, verifyInputs
public static final NodeClass<VirtualObjectNode> TYPE
protected boolean hasIdentity
private int objectId
protected VirtualObjectNode(NodeClass<? extends VirtualObjectNode> c, ResolvedJavaType type, boolean hasIdentity)
public final int getObjectId()
public final void resetObjectId()
public final void setObjectId(int objectId)
protected void afterClone(Node other)
afterClone
in class Node
public abstract ResolvedJavaType type()
VirtualObjectNode
. In case of arrays, this is
the array type (and not the component type).public abstract int entryCount()
public abstract String entryName(int i)
public abstract int entryIndexForOffset(long constantOffset, Kind expectedEntryKind)
constantOffset
- offset, where the value is placed.expectedEntryKind
- Specifies which type is expected at this offset (Is important when
doing implicit casts, especially on big endian systems.public abstract Kind entryKind(int index)
Kind
of the entry at the given index.public abstract VirtualObjectNode duplicate()
public boolean hasIdentity()
public void setIdentity(boolean identity)
public abstract ValueNode getMaterializedRepresentation(FixedNode fixed, ValueNode[] entries, LockState locks)
AllocatedObjectNode
then this node will be attached to a CommitAllocationNode
, otherwise the node will just be added to the graph.public void generate(NodeLIRBuilderTool gen)
generate
in interface LIRLowerable