Author: Simon Cross <hodges...@gmail.com> Branch: inline-simple-generators Changeset: r45942:2e3ca4c4b315 Date: 2011-07-24 18:04 +0200 http://bitbucket.org/pypy/pypy/changeset/2e3ca4c4b315/
Log: (fijal, hodgestar) Start adding should_unroll_one_iteration. diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py --- a/pypy/jit/metainterp/pyjitpl.py +++ b/pypy/jit/metainterp/pyjitpl.py @@ -901,6 +901,7 @@ any_operation = len(self.metainterp.history.operations) > 0 jitdriver_sd = self.metainterp.staticdata.jitdrivers_sd[jdindex] self.verify_green_args(jitdriver_sd, greenboxes) + import pdb; pdb.set_trace() self.debug_merge_point(jitdriver_sd, jdindex, self.metainterp.in_recursion, greenboxes) diff --git a/pypy/jit/metainterp/test/test_ajit.py b/pypy/jit/metainterp/test/test_ajit.py --- a/pypy/jit/metainterp/test/test_ajit.py +++ b/pypy/jit/metainterp/test/test_ajit.py @@ -508,6 +508,23 @@ assert res == 84 - 61 - 62 self.check_history(call=1) # because the trace starts immediately + def test_unroll_one_loop(self): + def unroll(x): + return x == 0 + myjitdriver = JitDriver(greens = ['x'], reds = ['y'], should_unroll_one_iteration=unroll) + + def f(x, y): + while y > 0: + myjitdriver.jit_merge_point(x=x, y=y) + if x == 0: + return y + f(0, 4) + y -= 1 + return 0 + + res = self.meta_interp(f, [1, 4], enable_opts="", inline=True) + self.check_history(call_assembler=0) + def test_format(self): def f(n): return len("<%d>" % n) diff --git a/pypy/jit/metainterp/warmspot.py b/pypy/jit/metainterp/warmspot.py --- a/pypy/jit/metainterp/warmspot.py +++ b/pypy/jit/metainterp/warmspot.py @@ -468,6 +468,9 @@ onlygreens=False) jd._can_never_inline_ptr = self._make_hook_graph(jd, annhelper, jd.jitdriver.can_never_inline, annmodel.s_Bool) + jd._should_unroll_one_iteration_ptr = self._make_hook_graph(jd, + annhelper, jd.jitdriver.should_unroll_one_iteration, + annmodel.s_Bool) annhelper.finish() def _make_hook_graph(self, jitdriver_sd, annhelper, func, diff --git a/pypy/module/pypyjit/interp_jit.py b/pypy/module/pypyjit/interp_jit.py --- a/pypy/module/pypyjit/interp_jit.py +++ b/pypy/module/pypyjit/interp_jit.py @@ -44,8 +44,8 @@ ec.w_tracefunc is None) def can_never_inline(next_instr, is_being_profiled, bytecode): - return (bytecode.co_flags & CO_GENERATOR) != 0 - + #return (bytecode.co_flags & CO_GENERATOR) != 0 + return False def wrap_oplist(space, logops, operations): list_w = [] diff --git a/pypy/rlib/jit.py b/pypy/rlib/jit.py --- a/pypy/rlib/jit.py +++ b/pypy/rlib/jit.py @@ -315,7 +315,7 @@ def __init__(self, greens=None, reds=None, virtualizables=None, get_jitcell_at=None, set_jitcell_at=None, get_printable_location=None, confirm_enter_jit=None, - can_never_inline=None): + can_never_inline=None, should_unroll_one_iteration=None): if greens is not None: self.greens = greens if reds is not None: @@ -334,6 +334,7 @@ self.get_printable_location = get_printable_location self.confirm_enter_jit = confirm_enter_jit self.can_never_inline = can_never_inline + self.should_unroll_one_iteration = should_unroll_one_iteration def _freeze_(self): return True _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit