public abstract class ShiftNode<OP> extends BinaryNode implements ArithmeticOperation, ArithmeticLIRLowerable, NarrowableArithmeticNode
ShiftOp class represents shift operations.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<ShiftNode> |
TYPE |
x, yEMPTY_ARRAY, stampNODE_LIST, NOT_ITERABLE, TRACK_CREATION_POSITION, WithAllEdges, WithNoEdges, WithOnlyInputEdges, WithOnlySucessorEdges| Modifier | Constructor and Description |
|---|---|
protected |
ShiftNode(NodeClass<? extends ShiftNode<OP>> c,
ArithmeticOpTable.ShiftOp<OP> opForStampComputation,
ValueNode x,
ValueNode s)
Creates a new shift operation.
|
| Modifier and Type | Method and Description |
|---|---|
static <OP> ValueNode |
canonical(ArithmeticOpTable.ShiftOp<OP> op,
Stamp stamp,
ValueNode forX,
ValueNode forY,
NodeView view) |
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. |
Stamp |
foldStamp(Stamp stampX,
Stamp stampY)
Compute an improved for this node using the passed in stamps.
|
ArithmeticOpTable.ShiftOp<OP> |
getArithmeticOp() |
protected abstract ArithmeticOpTable.ShiftOp<OP> |
getOp(ArithmeticOpTable table) |
protected ArithmeticOpTable.ShiftOp<OP> |
getOp(ValueNode forValue) |
int |
getShiftAmountMask() |
boolean |
isNarrowable(int resultBits)
Check whether this operation can be narrowed to
resultBits bit without loss of
precision. |
getX, 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, 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, waitgenerate, generatecanonicalprotected abstract ArithmeticOpTable.ShiftOp<OP> getOp(ArithmeticOpTable table)
protected final ArithmeticOpTable.ShiftOp<OP> getOp(ValueNode forValue)
public final ArithmeticOpTable.ShiftOp<OP> getArithmeticOp()
getArithmeticOp in interface ArithmeticOperationpublic Stamp foldStamp(Stamp stampX, Stamp stampY)
BinaryNodeBinaryNode.x and BinaryNode.y. This code is used to provide the
default implementation of BinaryNode.inferStamp() and may be used by external optimizations.foldStamp in class BinaryNodepublic 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>public static <OP> ValueNode canonical(ArithmeticOpTable.ShiftOp<OP> op, Stamp stamp, ValueNode forX, ValueNode forY, NodeView view)
public int getShiftAmountMask()
public boolean isNarrowable(int resultBits)
NarrowableArithmeticNoderesultBits bit without loss of
precision.isNarrowable in interface NarrowableArithmeticNode