Author: Squeaky <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit