Author: Hakan Ardo <ha...@debian.org> Branch: jit-short_from_state Changeset: r45802:9b09294e5686 Date: 2011-07-21 12:14 +0200 http://bitbucket.org/pypy/pypy/changeset/9b09294e5686/
Log: dont lose intbound on lengths of virtuals diff --git a/pypy/jit/metainterp/optimizeopt/intbounds.py b/pypy/jit/metainterp/optimizeopt/intbounds.py --- a/pypy/jit/metainterp/optimizeopt/intbounds.py +++ b/pypy/jit/metainterp/optimizeopt/intbounds.py @@ -289,6 +289,7 @@ array = self.getvalue(op.getarg(0)) result = self.getvalue(op.result) array.make_len_gt(MODE_ARRAY, op.getdescr(), -1) + array.lenbound.bound.intersect(result.intbound) result.intbound = array.lenbound.bound def optimize_STRLEN(self, op): @@ -296,6 +297,7 @@ array = self.getvalue(op.getarg(0)) result = self.getvalue(op.result) array.make_len_gt(MODE_STR, op.getdescr(), -1) + array.lenbound.bound.intersect(result.intbound) result.intbound = array.lenbound.bound def optimize_UNICODELEN(self, op): @@ -303,6 +305,7 @@ array = self.getvalue(op.getarg(0)) result = self.getvalue(op.result) array.make_len_gt(MODE_UNICODE, op.getdescr(), -1) + array.lenbound.bound.intersect(result.intbound) result.intbound = array.lenbound.bound def optimize_STRGETITEM(self, op): diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py --- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py +++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py @@ -6687,7 +6687,43 @@ """ self.optimize_loop(ops, expected, expected_short=short) - + def test_propagate_virtual_arryalen(self): + ops = """ + [p0] + p404 = new_array(2, descr=arraydescr) + p403 = new_array(3, descr=arraydescr) + i405 = arraylen_gc(p404, descr=arraydescr) + i406 = arraylen_gc(p403, descr=arraydescr) + i407 = int_add_ovf(i405, i406) + guard_no_overflow() [] + call(i407, descr=nonwritedescr) + jump(p0) + """ + expected = """ + [p0] + call(5, descr=nonwritedescr) + jump(p0) + """ + self.optimize_loop(ops, expected) + + def test_propagate_virtual_strunicodelen(self): + ops = """ + [p0] + p404 = newstr(2) + p403 = newunicode(3) + i405 = strlen(p404) + i406 = unicodelen(p403) + i407 = int_add_ovf(i405, i406) + guard_no_overflow() [] + call(i407, descr=nonwritedescr) + jump(p0) + """ + expected = """ + [p0] + call(5, descr=nonwritedescr) + jump(p0) + """ + self.optimize_loop(ops, expected) class TestLLtype(OptimizeOptTest, LLtypeMixin): pass _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit