public abstract static class IntegerLowerThanNode.LowerOp extends CompareNode.CompareOp
| Constructor and Description |
|---|
LowerOp() |
| Modifier and Type | Method and Description |
|---|---|
protected abstract boolean |
addCanOverflow(IntegerStamp a,
IntegerStamp b)
Return
true if the a + b can overflow w.r.t. |
LogicNode |
canonical(ConstantReflectionProvider constantReflection,
MetaAccessProvider metaAccess,
OptionValues options,
Integer smallestCompareWidth,
CanonicalCondition condition,
boolean unorderedIsTrue,
ValueNode forX,
ValueNode forY,
NodeView view) |
protected LogicNode |
canonicalizeCommonArithmetic(ValueNode forX,
ValueNode forY,
NodeView view) |
protected static LogicNode |
canonicalizeRangeFlip(ValueNode forX,
ValueNode forY,
int bits,
boolean signed,
NodeView view)
Exploit the fact that adding the (signed) MIN_VALUE on both side flips signed and
unsigned comparison.
|
protected abstract long |
cast(long a,
int bits) |
protected abstract int |
compare(long a,
long b) |
LogicConstantNode |
constantOrNull(ValueNode x,
ValueNode y,
NodeView view)
Tries to further canonicalize the condition, but only returns the result if it is
constant.
|
LogicNode |
create(ValueNode x,
ValueNode y,
NodeView view) |
protected abstract IntegerLowerThanNode |
createNode(ValueNode x,
ValueNode y) |
protected LogicNode |
findSynonym(ValueNode forX,
ValueNode forY,
NodeView view) |
protected abstract IntegerStamp |
forInteger(int bits,
long min,
long max) |
protected abstract CanonicalCondition |
getCondition() |
protected IntegerStamp |
getSucceedingStampForX(IntegerStamp xStamp,
IntegerStamp yStamp,
boolean mirror,
boolean strict) |
protected IntegerStamp |
getSucceedingStampForXLowerXPlusA(boolean mirrored,
boolean strict,
IntegerStamp aStamp,
IntegerStamp xStamp) |
protected abstract boolean |
isMatchingBitExtendNode(ValueNode node)
Return
true if the node is an IntegerConvertNode that does not change the
comparison result. |
protected abstract boolean |
leftShiftCanOverflow(IntegerStamp a,
long shift)
Return
true if the a << shift can overflow w.r.t. |
protected abstract long |
lowerBound(IntegerStamp stamp) |
protected abstract long |
max(long a,
long b) |
protected long |
max(long a,
long b,
int bits) |
protected abstract long |
maxValue(int bits) |
protected abstract long |
min(long a,
long b) |
protected long |
min(long a,
long b,
int bits) |
protected abstract long |
minValue(int bits) |
protected TriState |
tryFold(Stamp xStampGeneric,
Stamp yStampGeneric) |
protected abstract long |
upperBound(IntegerStamp stamp) |
canonicalizeSymmetricConstant, duplicateModified, optimizeNormalizeComparepublic LogicNode canonical(ConstantReflectionProvider constantReflection, MetaAccessProvider metaAccess, OptionValues options, Integer smallestCompareWidth, CanonicalCondition condition, boolean unorderedIsTrue, ValueNode forX, ValueNode forY, NodeView view)
canonical in class CompareNode.CompareOpprotected abstract long upperBound(IntegerStamp stamp)
protected abstract long lowerBound(IntegerStamp stamp)
protected abstract int compare(long a,
long b)
protected abstract long min(long a,
long b)
protected abstract long max(long a,
long b)
protected long min(long a,
long b,
int bits)
protected long max(long a,
long b,
int bits)
protected abstract long cast(long a,
int bits)
protected abstract long minValue(int bits)
protected abstract long maxValue(int bits)
protected abstract IntegerStamp forInteger(int bits, long min, long max)
protected abstract CanonicalCondition getCondition()
protected abstract IntegerLowerThanNode createNode(ValueNode x, ValueNode y)
public LogicConstantNode constantOrNull(ValueNode x, ValueNode y, NodeView view)
protected LogicNode canonicalizeCommonArithmetic(ValueNode forX, ValueNode forY, NodeView view)
protected abstract boolean isMatchingBitExtendNode(ValueNode node)
true if the node is an IntegerConvertNode that does not change the
comparison result.protected abstract boolean addCanOverflow(IntegerStamp a, IntegerStamp b)
protected abstract boolean leftShiftCanOverflow(IntegerStamp a, long shift)
protected static LogicNode canonicalizeRangeFlip(ValueNode forX, ValueNode forY, int bits, boolean signed, NodeView view)
x + MIN_VALUE < y + MIN_VALUE <=> x |<| yx + MIN_VALUE |<| y + MIN_VALUE <=> x < yprotected IntegerStamp getSucceedingStampForX(IntegerStamp xStamp, IntegerStamp yStamp, boolean mirror, boolean strict)
protected IntegerStamp getSucceedingStampForXLowerXPlusA(boolean mirrored, boolean strict, IntegerStamp aStamp, IntegerStamp xStamp)