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.ValueNumberable
Canonicalizable.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, y
EMPTY_ARRAY, stamp
NODE_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, tryConstantFold
getX, getY, inferStamp, setX, setY
asConstant, asJavaConstant, asNode, asSerializableConstant, checkReplaceAtUsagesInvariants, getStackKind, graph, hasUsagesOtherThan, isAllowedUsageType, isConstant, isConstantPredicate, isDefaultConstant, isIllegalConstant, isJavaConstant, isNullConstant, isSerializableConstant, recursivelyDataFlowEqualsUpTo, setStamp, stamp, updateStamp, updateUsagesInterface
afterClone, 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, withNodeSourcePosition
clone, equals, getClass, notify, notifyAll, wait, wait, wait
isNarrowable
getArithmeticOp
maybeCommuteInputs
canonical, getX, getY
generate
public 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.Binary
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.canonical
in interface Canonicalizable.Binary<ValueNode>
canonical
in class BinaryArithmeticNode<OP>
public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen)
generate
in interface ArithmeticLIRLowerable
protected 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()
.