changeset 11357:307eec0f460f

fix incorrect lower bound in StampTool
author Lukas Stadler <lukas.stadler@jku.at>
date Mon, 19 Aug 2013 12:12:43 +0200
parents 90201030d3cf
children a88f1ddbbad1
files graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerStampTest.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java
diffstat 2 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerStampTest.java	Sat Aug 17 16:01:48 2013 +0200
+++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/IntegerStampTest.java	Mon Aug 19 12:12:43 2013 +0200
@@ -174,6 +174,10 @@
                         StampTool.add(StampFactory.forInteger(Kind.Long, Long.MIN_VALUE, Long.MIN_VALUE + 1), StampFactory.forInteger(Kind.Long, Integer.MIN_VALUE, Integer.MAX_VALUE)));
         assertEquals(StampFactory.forInteger(Kind.Int, -2147483647, 31 - 2147483647),
                         StampTool.add(StampFactory.forInteger(Kind.Int, 0, 31), StampFactory.forInteger(Kind.Int, -2147483647, -2147483647)));
+    }
 
+    @Test
+    public void testAnd() {
+        assertEquals(new IntegerStamp(Kind.Int, Integer.MIN_VALUE, 0x40000000L, 0, 0xc0000000L), StampTool.and(StampFactory.forKind(Kind.Int), StampFactory.forConstant(Constant.forInt(0xc0000000))));
     }
 }
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java	Sat Aug 17 16:01:48 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/type/StampTool.java	Mon Aug 19 12:12:43 2013 +0200
@@ -163,7 +163,7 @@
             lowerBound = downMask;
             upperBound = upMask;
         } else {
-            lowerBound = upMask;
+            lowerBound = downMask | (-1L << (kind.getBitCount() - 1));
             upperBound = kind.getMaxValue() & upMask;
         }
         if (kind == Kind.Int) {