[pypy-svn] pypy jit-virtual_state: retraces in more situations now

hakanardo commits-noreply at bitbucket.org
Sat Feb 5 11:39:59 CET 2011


Author: Hakan Ardo <hakan at debian.org>
Branch: jit-virtual_state
Changeset: r41625:dc8a3dd2bff0
Date: 2011-02-05 10:06 +0100
http://bitbucket.org/pypy/pypy/changeset/dc8a3dd2bff0/

Log:	retraces in more situations now

diff --git a/pypy/jit/metainterp/test/test_basic.py b/pypy/jit/metainterp/test/test_basic.py
--- a/pypy/jit/metainterp/test/test_basic.py
+++ b/pypy/jit/metainterp/test/test_basic.py
@@ -406,10 +406,10 @@
         res = self.meta_interp(f, [6, 32])
         assert res == 1167
         self.check_loop_count(3)
-        self.check_loops({'int_add': 2, 'int_lt': 1,
+        self.check_loops({'int_add': 3, 'int_lt': 2,
                           'int_sub': 2, 'guard_false': 1,
                           'jump': 2,
-                          'int_gt': 1, 'guard_true': 1, 'int_mul': 1})
+                          'int_gt': 1, 'guard_true': 2})
 
 
     def test_loop_invariant_mul_bridge_maintaining2(self):
@@ -428,10 +428,31 @@
         res = self.meta_interp(f, [6, 32])
         assert res == 1692
         self.check_loop_count(3)
+        self.check_loops({'int_add': 3, 'int_lt': 2,
+                          'int_sub': 2, 'guard_false': 1,
+                          'jump': 2,
+                          'int_gt': 1, 'guard_true': 2})
+
+    def test_loop_invariant_mul_bridge_maintaining3(self):
+        myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x', 'm'])
+        def f(x, y, m):
+            res = 0
+            while y > 0:
+                myjitdriver.can_enter_jit(x=x, y=y, res=res, m=m)
+                myjitdriver.jit_merge_point(x=x, y=y, res=res, m=m)
+                z = x * x
+                res += z
+                if y<m:
+                    res += z
+                y -= 1
+            return res
+        res = self.meta_interp(f, [6, 32, 16])
+        assert res == 1692
+        self.check_loop_count(3)
         self.check_loops({'int_add': 2, 'int_lt': 1,
                           'int_sub': 2, 'guard_false': 1,
-                          'jump': 2,
-                          'int_gt': 1, 'guard_true': 1, 'int_mul': 1})
+                          'jump': 2, 'int_mul': 1,
+                          'int_gt': 2, 'guard_true': 2})
 
     def test_loop_invariant_intbox(self):
         myjitdriver = JitDriver(greens = [], reds = ['y', 'res', 'x'])
@@ -1478,7 +1499,7 @@
         res = self.meta_interp(f, [299], listops=True)
         assert res == f(299)
         self.check_loops(guard_class=0, guard_value=3)        
-        self.check_loops(guard_class=0, guard_value=6, everywhere=True)
+        self.check_loops(guard_class=0, guard_value=8, everywhere=True)
 
     def test_merge_guardnonnull_guardclass(self):
         from pypy.rlib.objectmodel import instantiate
@@ -1509,7 +1530,7 @@
         self.check_loops(guard_class=0, guard_nonnull=0,
                          guard_nonnull_class=2, guard_isnull=1)
         self.check_loops(guard_class=0, guard_nonnull=0,
-                         guard_nonnull_class=4, guard_isnull=2,
+                         guard_nonnull_class=5, guard_isnull=3,
                          everywhere=True)
 
     def test_merge_guardnonnull_guardvalue(self):
@@ -1539,8 +1560,8 @@
         assert res == f(299)
         self.check_loops(guard_class=0, guard_nonnull=0, guard_value=2,
                          guard_nonnull_class=0, guard_isnull=1)
-        self.check_loops(guard_class=0, guard_nonnull=0, guard_value=4,
-                         guard_nonnull_class=0, guard_isnull=2,
+        self.check_loops(guard_class=0, guard_nonnull=0, guard_value=5,
+                         guard_nonnull_class=0, guard_isnull=3,
                          everywhere=True)
 
     def test_merge_guardnonnull_guardvalue_2(self):
@@ -1570,8 +1591,8 @@
         assert res == f(299)
         self.check_loops(guard_class=0, guard_nonnull=0, guard_value=2,
                          guard_nonnull_class=0, guard_isnull=1)
-        self.check_loops(guard_class=0, guard_nonnull=0, guard_value=4,
-                         guard_nonnull_class=0, guard_isnull=2,
+        self.check_loops(guard_class=0, guard_nonnull=0, guard_value=5,
+                         guard_nonnull_class=0, guard_isnull=3,
                          everywhere=True)
 
     def test_merge_guardnonnull_guardclass_guardvalue(self):
@@ -1604,8 +1625,8 @@
         assert res == f(399)
         self.check_loops(guard_class=0, guard_nonnull=0, guard_value=3,
                          guard_nonnull_class=0, guard_isnull=1)
-        self.check_loops(guard_class=0, guard_nonnull=0, guard_value=6,
-                         guard_nonnull_class=0, guard_isnull=2,
+        self.check_loops(guard_class=0, guard_nonnull=0, guard_value=8,
+                         guard_nonnull_class=0, guard_isnull=3,
                          everywhere=True)
 
     def test_residual_call_doesnt_lose_info(self):
@@ -1897,8 +1918,8 @@
             return a1.val + b1.val
         res = self.meta_interp(g, [6, 14])
         assert res == g(6, 14)
-        self.check_loop_count(8)
-        self.check_loops(getarrayitem_gc=16, everywhere=True)
+        self.check_loop_count(11)
+        self.check_loops(getarrayitem_gc=17, everywhere=True)
 
     def test_multiple_specialied_versions_bridge(self):
         myjitdriver = JitDriver(greens = [], reds = ['y', 'x', 'z', 'res'])
@@ -2107,7 +2128,7 @@
             return main(10, 20) + main(-10, -20)
         res = self.meta_interp(g, [])
         assert res == g()
-        self.check_enter_count(3)
+        self.check_enter_count(2)
 
     def test_current_trace_length(self):
         myjitdriver = JitDriver(greens = ['g'], reds = ['x'])


More information about the Pypy-commit mailing list