Author: Squeaky <squeaky...@gmx.com>
Branch: bounds-int-add-or
Changeset: r69193:531ef2c5d656
Date: 2014-02-17 17:34 +0100
http://bitbucket.org/pypy/pypy/changeset/531ef2c5d656/

Log:    test for int_xor and fix

diff --git a/rpython/jit/metainterp/optimizeopt/intbounds.py 
b/rpython/jit/metainterp/optimizeopt/intbounds.py
--- a/rpython/jit/metainterp/optimizeopt/intbounds.py
+++ b/rpython/jit/metainterp/optimizeopt/intbounds.py
@@ -92,6 +92,12 @@
            v2.intbound.known_ge(IntBound(0, 0)):
             r = self.getvalue(op.result)
             r.intbound.make_ge(IntLowerBound(0))
+        if v1.intbound.lower >= 0 and v2.intbound.lower >= 0:
+            lesser = min(v1.intbound.upper, v2.intbound.upper)
+            # check if next_power2 won't overflow
+            if lesser < (1 << ((symbolic.WORD - 1) << 3)):
+                r.intbound.intersect(IntBound(0, next_power2(lesser) - 1))
+
 
     def optimize_INT_AND(self, op):
         v1 = self.getvalue(op.getarg(0))
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -5390,6 +5390,38 @@
         """
         self.optimize_loop(ops, ops)
 
+    def test_int_xor_cmp_above_bounds(self):
+        ops = """
+        [p0]
+        i0 = getarrayitem_gc(p0, 0, descr=chararraydescr)
+        i1 = getarrayitem_gc(p0, 1, descr=chararraydescr)
+        i2 = int_xor(i0, i1)
+        i3 = int_le(i2, 255)
+        guard_true(i3) []
+        jump(i2)
+        """
+
+        expected = """
+        [p0]
+        i0 = getarrayitem_gc(p0, 0, descr=chararraydescr)
+        i1 = getarrayitem_gc(p0, 1, descr=chararraydescr)
+        i2 = int_xor(i0, i1)
+        jump(i2)
+        """
+        self.optimize_loop(ops, expected)
+
+    def test_int_xor_cmp_below_bounds(self):
+        ops = """
+        [p0]
+        i0 = getarrayitem_gc(p0, 0, descr=chararraydescr)
+        i1 = getarrayitem_gc(p0, 1, descr=chararraydescr)
+        i2 = int_xor(i0, i1)
+        i3 = int_lt(i2, 255)
+        guard_true(i3) []
+        jump(i2)
+        """
+        self.optimize_loop(ops, ops)
+
 
 
 class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to