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