public class ValuePhiNode extends PhiNode
PhiNodes merge data flow values at control flow merges.Node.ConstantNodeParameter, Node.EdgeVisitor, Node.IndirectCanonicalization, Node.InjectedNodeParameter, Node.Input, Node.NodeInsertionStackTrace, Node.NodeIntrinsic, Node.NodeIntrinsicFactory, Node.OptionalInput, Node.Successor, Node.ValueNumberableCanonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Ternary<T extends Node>, Canonicalizable.Unary<T extends Node>| Modifier and Type | Field and Description |
|---|---|
static NodeClass<ValuePhiNode> |
TYPE |
protected NodeInputList<ValueNode> |
values |
EMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
protected |
ValuePhiNode(NodeClass<? extends ValuePhiNode> c,
Stamp stamp,
AbstractMergeNode merge) |
|
ValuePhiNode(Stamp stamp,
AbstractMergeNode merge) |
|
ValuePhiNode(Stamp stamp,
AbstractMergeNode merge,
ValueNode[] values) |
| Modifier and Type | Method and Description |
|---|---|
ValueNode |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
ProxyNode |
createProxyFor(LoopExitNode lex) |
PhiNode |
duplicateOn(AbstractMergeNode newMerge)
Create a phi of the same kind on the given merge.
|
Map<Object,Object> |
getDebugProperties(Map<Object,Object> map)
Fills a
Map with properties of this for use in debugging (e.g., to view in
the ideal graph visualizer). |
boolean |
inferStamp()
This method can be overridden by subclasses of
ValueNode if they need to recompute
their stamp if their inputs change. |
protected String |
valueDescription()
String describing the kind of value this Phi merges.
|
NodeInputList<ValueNode> |
values() |
boolean |
verify() |
addInput, backValues, clearValues, firstValue, initializeValueAt, isDegenerated, isLoopPhi, merge, removeInput, setMerge, setValueAt, setValueAt, singleBackValueOrThis, singleValueOrThis, toString, valueAt, valueAt, valueCountasConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, 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, 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, withNodeSourcePositionpublic static final NodeClass<ValuePhiNode> TYPE
protected NodeInputList<ValueNode> values
public ValuePhiNode(Stamp stamp, AbstractMergeNode merge)
protected ValuePhiNode(NodeClass<? extends ValuePhiNode> c, Stamp stamp, AbstractMergeNode merge)
public ValuePhiNode(Stamp stamp, AbstractMergeNode merge, ValueNode[] values)
public NodeInputList<ValueNode> values()
public boolean inferStamp()
ValueNodeValueNode if they need to recompute
their stamp if their inputs change. A typical implementation will compute the stamp and pass
it to ValueNode.updateStamp(Stamp), whose return value can be used as the result of this
method.inferStamp in class ValueNodeprotected String valueDescription()
PhiNodePhiNode.toString(Verbosity) and
dumping.valueDescription in class PhiNodepublic Map<Object,Object> getDebugProperties(Map<Object,Object> map)
NodeMap with properties of this for use in debugging (e.g., to view in
the ideal graph visualizer). Subclasses overriding this method should also fill the map using
their superclass.getDebugProperties in class Nodepublic PhiNode duplicateOn(AbstractMergeNode newMerge)
PhiNodeduplicateOn in class PhiNodenewMerge - the merge to use for the newly created phipublic ProxyNode createProxyFor(LoopExitNode lex)
createProxyFor in class PhiNodepublic ValueNode canonical(CanonicalizerTool tool)
Canonicalizablenull will delete the current node and replace it with null at
all usages. Note that it is not necessary to delete floating nodes that have no more usages
this way - they will be deleted automatically.canonical in interface Canonicalizablecanonical in class PhiNodetool - provides access to runtime interfaces like MetaAccessProvider