public final class ConditionalNode extends FloatingNode implements Canonicalizable, LIRLowerable
ConditionalNode
class represents a comparison that yields one of two values. Note
that these nodes are not built directly from the bytecode but are introduced by canonicalization.Node.ConstantNodeParameter, Node.InjectedNodeParameter, Node.Input, Node.NodeIntrinsic, Node.OptionalInput, Node.Successor, Node.ValueNumberable
Canonicalizable.Binary<T extends Node>, Canonicalizable.BinaryCommutative<T extends Node>, Canonicalizable.Unary<T extends Node>
Modifier and Type | Field and Description |
---|---|
(package private) LogicNode |
condition |
(package private) ValueNode |
falseValue |
(package private) ValueNode |
trueValue |
static NodeClass<ConditionalNode> |
TYPE |
NODE_LIST, NOT_ITERABLE, USE_UNSAFE_TO_CLONE, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges
Constructor and Description |
---|
ConditionalNode(LogicNode condition) |
ConditionalNode(LogicNode condition,
ValueNode trueValue,
ValueNode falseValue) |
ConditionalNode(StructuredGraph graph,
Condition condition,
ValueNode x,
ValueNode y) |
Modifier and Type | Method and Description |
---|---|
ValueNode |
canonical(CanonicalizerTool tool)
Implementations of this method can provide local optimizations like constant folding and
strength reduction.
|
LogicNode |
condition() |
static ValueNode |
create(LogicNode condition) |
static ValueNode |
create(LogicNode condition,
ValueNode trueValue,
ValueNode falseValue) |
ValueNode |
falseValue() |
private static ValueNode |
findSynonym(ValueNode condition,
ValueNode trueValue,
ValueNode falseValue) |
void |
generate(NodeLIRBuilderTool generator) |
boolean |
inferStamp()
This method can be overridden by subclasses of
ValueNode if they need to recompute
their stamp if their inputs change. |
ValueNode |
trueValue() |
asNode
asConstant, asJavaConstant, getKind, graph, isAllowedUsageType, isConstant, isConstantPredicate, isNullConstant, setStamp, stamp, updateStamp
acceptInputs, acceptSuccessors, afterClone, 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<ConditionalNode> TYPE
ValueNode falseValue
public ConditionalNode(LogicNode condition)
public ConditionalNode(LogicNode condition, ValueNode trueValue, ValueNode falseValue)
public ConditionalNode(StructuredGraph graph, Condition condition, ValueNode x, ValueNode y)
public static ValueNode create(LogicNode condition, ValueNode trueValue, ValueNode falseValue)
public boolean inferStamp()
ValueNode
ValueNode
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 ValueNode
public ValueNode falseValue()
public ValueNode canonical(CanonicalizerTool tool)
Canonicalizable
null
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 Canonicalizable
tool
- provides access to runtime interfaces like MetaAccessProvider
private static ValueNode findSynonym(ValueNode condition, ValueNode trueValue, ValueNode falseValue)
public void generate(NodeLIRBuilderTool generator)
generate
in interface LIRLowerable