< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/calc/IntegerLessThanNode.java

Print this page

        

*** 48,57 **** --- 48,58 ---- import jdk.vm.ci.meta.Constant; import jdk.vm.ci.meta.ConstantReflectionProvider; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.PrimitiveConstant; + import jdk.vm.ci.meta.TriState; @NodeInfo(shortName = "<") public final class IntegerLessThanNode extends IntegerLowerThanNode { public static final NodeClass<IntegerLessThanNode> TYPE = NodeClass.create(IntegerLessThanNode.class); private static final LessThanOp OP = new LessThanOp();
*** 223,233 **** long newConstant = yConstant - xConstant; return IntegerLessThanNode.create(addNode.getX(), ConstantNode.forIntegerStamp(xStamp, newConstant), view); } } } - } } if (forX.stamp(view) instanceof IntegerStamp) { assert forY.stamp(view) instanceof IntegerStamp; --- 224,233 ----
*** 294,299 **** --- 294,324 ---- @Override protected IntegerStamp forInteger(int bits, long min, long max) { return StampFactory.forInteger(bits, cast(min, bits), cast(max, bits)); } } + + @Override + public TriState implies(boolean thisNegated, LogicNode other) { + if (!thisNegated) { + if (other instanceof IntegerLessThanNode) { + ValueNode otherX = ((IntegerLessThanNode) other).getX(); + ValueNode otherY = ((IntegerLessThanNode) other).getY(); + // x < y => !y < x + if (getX() == otherY && getY() == otherX) { + return TriState.FALSE; + } + } + + // x < y => !x == y + // x < y => !y == x + if (other instanceof IntegerEqualsNode) { + ValueNode otherX = ((IntegerEqualsNode) other).getX(); + ValueNode otherY = ((IntegerEqualsNode) other).getY(); + if ((getX() == otherX && getY() == otherY) || (getX() == otherY && getY() == otherX)) { + return TriState.FALSE; + } + } + } + return super.implies(thisNegated, other); + } }
< prev index next >