public abstract class MinMaxNode<OP> extends BinaryArithmeticNode<OP> implements NarrowableArithmeticNode, Canonicalizable.BinaryCommutative<ValueNode>
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<MinMaxNode> |
TYPE |
x, yEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
protected |
MinMaxNode(NodeClass<? extends BinaryArithmeticNode<OP>> c,
ArithmeticOpTable.BinaryOp<OP> opForStampComputation,
ValueNode x,
ValueNode y) |
| Modifier and Type | Method and Description |
|---|---|
abstract ValueNode |
asConditional(LoweringProvider lowerer)
Tries to return a conditional value equivalent to this min/max node.
|
ValueNode |
canonical(CanonicalizerTool tool,
ValueNode forX,
ValueNode forY)
Similar to
Canonicalizable.canonical(CanonicalizerTool), except that
implementations should act as if the current input of the node was the given one, i.e.,
they should never look at the inputs via the this pointer. |
static ValueNode |
fromConditional(ConditionalNode conditional)
Tries to build a
MinMaxNode representation of the given conditional. |
void |
generate(NodeLIRBuilderTool nodeValueMap,
ArithmeticLIRGeneratorTool gen) |
protected boolean |
isNarrowable(int resultBits,
NumUtil.Signedness signedness) |
protected static ValueNode |
maybeExtendForCompare(ValueNode value,
LoweringProvider lowerer,
NumUtil.Signedness signedness)
Helper for
MinMaxNode.asConditional(LoweringProvider), extending the value if needed to match
the LoweringProvider.smallestCompareWidth(). |
add, add, add, branchlessMax, branchlessMin, foldStamp, getArithmeticOp, getArithmeticOpTable, getOp, getOp, isAssociative, maybeCommuteInputs, mul, mul, mul, reassociateMatchedValues, reassociateUnmatchedValues, shouldSwapInputs, sub, sub, sub, tryConstantFoldgetX, getY, inferStamp, setX, setYasConstant, 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, getDebugProperties, getInsertionPosition, getNodeClass, getNodeSourcePosition, getOptions, getUsageCount, hasExactlyOneUsage, hasExactlyOneUsageOfType, 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, withNodeSourcePositionclone, equals, getClass, notify, notifyAll, wait, wait, waitisNarrowablegetArithmeticOpmaybeCommuteInputscanonical, getX, getYgeneratepublic static final NodeClass<MinMaxNode> TYPE
protected MinMaxNode(NodeClass<? extends BinaryArithmeticNode<OP>> c, ArithmeticOpTable.BinaryOp<OP> opForStampComputation, ValueNode x, ValueNode y)
public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY)
Canonicalizable.BinaryCanonicalizable.canonical(CanonicalizerTool), except that
implementations should act as if the current input of the node was the given one, i.e.,
they should never look at the inputs via the this pointer.canonical in interface Canonicalizable.Binary<ValueNode>canonical in class BinaryArithmeticNode<OP>public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen)
generate in interface ArithmeticLIRLowerableprotected boolean isNarrowable(int resultBits,
NumUtil.Signedness signedness)
public static ValueNode fromConditional(ConditionalNode conditional)
MinMaxNode representation of the given conditional. Returns
null if no simple equivalent form exists.public abstract ValueNode asConditional(LoweringProvider lowerer)
null if no simple equivalent conditional form exists. Implementations that
build a compare node must take LoweringProvider.smallestCompareWidth() into account.protected static ValueNode maybeExtendForCompare(ValueNode value, LoweringProvider lowerer, NumUtil.Signedness signedness)
MinMaxNode.asConditional(LoweringProvider), extending the value if needed to match
the LoweringProvider.smallestCompareWidth().