changeset 20065:a21dd6860791

Fix for succeeding stamps of IntegerBelowNode.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Sun, 29 Mar 2015 18:57:14 +0200
parents 8a5bda229627
children 171b650a46ee
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerBelowNode.java
diffstat 1 files changed, 7 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- 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());
                         }
                     }
                 }