public final class AMD64FloatConvertNode extends UnaryArithmeticNode<ArithmeticOpTable.FloatConvertOp> implements ArithmeticLIRLowerable
FloatConvertNode which, on AMD64 needs a AMD64FloatConvertNode plus some
fixup code that handles the corner cases that differ between AMD64 and Java.
Since this node evaluates to a special value if the conversion is inexact, its stamp must be
modified to avoid optimizing away AMD64ConvertSnippets.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 |
|---|---|
protected FloatConvert |
op |
static NodeClass<AMD64FloatConvertNode> |
TYPE |
EMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Constructor and Description |
|---|
AMD64FloatConvertNode(FloatConvert op,
ValueNode value) |
| Modifier and Type | Method and Description |
|---|---|
ValueNode |
canonical(CanonicalizerTool tool,
ValueNode forValue)
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. |
Stamp |
foldStamp(Stamp newStamp)
Compute an improved for this node using the passed in stamp.
|
void |
generate(NodeLIRBuilderTool nodeValueMap,
ArithmeticLIRGeneratorTool gen) |
protected ArithmeticOpTable.UnaryOp<ArithmeticOpTable.FloatConvertOp> |
getOp(ArithmeticOpTable table) |
findSynonym, getArithmeticOp, getOpgetValue, inferStamp, setValueasConstant, 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, 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, waitgeneratecanonicalpublic static final NodeClass<AMD64FloatConvertNode> TYPE
protected final FloatConvert op
public AMD64FloatConvertNode(FloatConvert op, ValueNode value)
protected ArithmeticOpTable.UnaryOp<ArithmeticOpTable.FloatConvertOp> getOp(ArithmeticOpTable table)
getOp in class UnaryArithmeticNode<ArithmeticOpTable.FloatConvertOp>public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue)
Canonicalizable.UnaryCanonicalizable.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.Unary<ValueNode>canonical in class UnaryArithmeticNode<ArithmeticOpTable.FloatConvertOp>public Stamp foldStamp(Stamp newStamp)
UnaryNodeUnaryNode.value. This code is used to provide the default
implementation of UnaryNode.inferStamp() and may be used by external optimizations.foldStamp in class UnaryArithmeticNode<ArithmeticOpTable.FloatConvertOp>public void generate(NodeLIRBuilderTool nodeValueMap, ArithmeticLIRGeneratorTool gen)
generate in interface ArithmeticLIRLowerable