[pypy-svn] pypy jit-unroll-loops: Test where a new loop is found while tracing a bridge
hakanardo
commits-noreply at bitbucket.org
Sun Dec 26 12:37:00 CET 2010
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-unroll-loops
Changeset: r40226:6248322c35c4
Date: 2010-12-26 12:36 +0100
http://bitbucket.org/pypy/pypy/changeset/6248322c35c4/
Log: Test where a new loop is found while tracing a bridge
diff --git a/pypy/jit/metainterp/test/test_loop.py b/pypy/jit/metainterp/test/test_loop.py
--- a/pypy/jit/metainterp/test/test_loop.py
+++ b/pypy/jit/metainterp/test/test_loop.py
@@ -301,6 +301,50 @@
res = self.meta_interp(f, [2, 3])
assert res == expected
+ def test_loop_in_bridge(self):
+ myjitdriver = JitDriver(greens = ['i'], reds = ['x', 'y', 'res'])
+ bytecode = "abs>cxXyY"
+ def f(y):
+ res = x = 0
+ i = 0
+ op = '-'
+ while i < len(bytecode):
+ myjitdriver.jit_merge_point(i=i, x=x, y=y, res=res)
+ op = bytecode[i]
+ if op == 'a':
+ res += 1
+ elif op == 'b':
+ res += 10
+ elif op == 'c':
+ res += 10000
+ elif op == 's':
+ x = y
+ elif op == 'y':
+ y -= 1
+ elif op == 'Y':
+ if y:
+ i = 1
+ myjitdriver.can_enter_jit(i=i, x=x, y=y, res=res)
+ continue
+ elif op == 'x':
+ x -= 1
+ elif op == 'X':
+ if x > 0:
+ i -= 2
+ myjitdriver.can_enter_jit(i=i, x=x, y=y, res=res)
+ continue
+ elif op == '>':
+ if y > 6:
+ i += 4
+ continue
+ i += 1
+ return res
+
+ expected = f(12)
+ res = self.meta_interp(f, [12])
+ print res
+ assert res == expected
+
def test_three_nested_loops(self):
myjitdriver = JitDriver(greens = ['i'], reds = ['x'])
bytecode = ".+357"
More information about the Pypy-commit
mailing list