Author: Carl Friedrich Bolz <cfb...@gmx.de> Branch: Changeset: r70436:2b8a59268ac7 Date: 2014-04-04 14:59 +0200 http://bitbucket.org/pypy/pypy/changeset/2b8a59268ac7/
Log: found an unroll miscompilation diff --git a/rpython/jit/metainterp/test/test_loop.py b/rpython/jit/metainterp/test/test_loop.py --- a/rpython/jit/metainterp/test/test_loop.py +++ b/rpython/jit/metainterp/test/test_loop.py @@ -501,6 +501,59 @@ return g(n, 1) + g(n, 2) assert self.meta_interp(h, [25]) == 7 * 25 * (7 + 8 + 2 + 3) + def test_two_bridged_loops_classes(self): + py.test.skip("fix me :-((((") + myjitdriver = JitDriver(greens = ['pos'], reds = ['i', 'n', 'x', 's']) + class A(object): + pass + bytecode = "zI7izI8i" + def f(n, s): + i = x = 0 + pos = 0 + op = '-' + while pos < len(bytecode): + myjitdriver.jit_merge_point(pos=pos, i=i, n=n, s=s, x=x) + op = bytecode[pos] + if op == 'z': + i = 0 + if op == 'i': + i += 1 + pos -= 2 + myjitdriver.can_enter_jit(pos=pos, i=i, n=n, s=s, x=x) + continue + elif op == 'I': + if not (i < n): + pos += 2 + elif op == '7': + if s is not None: + x = x + 7 + else: + x = x + 2 + elif op == '8': + if s is not None: + x = x + 8 + else: + x = x + 3 + + pos += 1 + return x + + def g(n, s): + if s == 2: + s = None + else: + s = A() + sa = 0 + for i in range(7): + sa += f(n, s) + return sa + assert self.meta_interp(g, [25, 1]) == g(25, 1) + + def h(n): + return g(n, 1) + g(n, 2) + assert self.meta_interp(h, [25]) == h(25) + + def test_three_nested_loops(self): myjitdriver = JitDriver(greens = ['i'], reds = ['x']) bytecode = ".+357" _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit