# HG changeset patch # User Thomas Wuerthinger # Date 1427648234 -7200 # Node ID a21dd6860791b4aa49d2b082d528f37bc1163bf3 # Parent 8a5bda2296270bc452f822b0504206e452ced3b9 Fix for succeeding stamps of IntegerBelowNode. diff -r 8a5bda229627 -r a21dd6860791 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java Sun Mar 29 18:51:08 2015 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java Sun Mar 29 18:57:14 2015 +0200 @@ -115,15 +115,12 @@ } } else { // x < y - if (yStamp.isPositive()) { + if (yStamp.isStrictlyPositive()) { // x >= 0 && x < y long xUpperBound = xStamp.upperBound(); long yUpperBound = yStamp.upperBound(); if (yUpperBound <= xUpperBound || !xStamp.isPositive()) { - if (yUpperBound != 0) { - yUpperBound--; - } - return new IntegerStamp(bits, Math.max(0, xStamp.lowerBound()), Math.min(xUpperBound, yUpperBound), xStamp.downMask(), xStamp.upMask()); + return new IntegerStamp(bits, Math.max(0, xStamp.lowerBound()), Math.min(xUpperBound, yUpperBound - 1), xStamp.downMask(), xStamp.upMask()); } } } @@ -156,11 +153,11 @@ if (xStamp.isPositive() && yStamp.isPositive()) { long xLowerBound = xStamp.lowerBound(); long yLowerBound = yStamp.lowerBound(); - if (xLowerBound >= yLowerBound) { - if (xLowerBound != CodeUtil.maxValue(bits)) { - xLowerBound++; - } - return new IntegerStamp(bits, xLowerBound, yStamp.upperBound(), yStamp.downMask(), yStamp.upMask()); + if (xLowerBound == CodeUtil.maxValue(bits)) { + return null; + } else if (xLowerBound >= yLowerBound) { + assert xLowerBound != CodeUtil.maxValue(bits); + return new IntegerStamp(bits, xLowerBound + 1, yStamp.upperBound(), yStamp.downMask(), yStamp.upMask()); } } }