[pypy-commit] pypy jit-short_from_state: dont lose intbound on lengths of virtuals
hakanardo
noreply at buildbot.pypy.org
Thu Jul 21 12:14:24 CEST 2011
Author: Hakan Ardo <hakan at 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
More information about the pypy-commit
mailing list