Author: Maciej Fijalkowski <fij...@gmail.com> Branch: jit-threshold-hooks Changeset: r66356:055e0f71be5c Date: 2013-08-27 10:06 +0100 http://bitbucket.org/pypy/pypy/changeset/055e0f71be5c/
Log: another hint to not trace inside something diff --git a/pypy/module/pypyjit/__init__.py b/pypy/module/pypyjit/__init__.py --- a/pypy/module/pypyjit/__init__.py +++ b/pypy/module/pypyjit/__init__.py @@ -19,6 +19,7 @@ 'Box': 'interp_resop.WrappedBox', 'PARAMETER_DOCS': 'space.wrap(rpython.rlib.jit.PARAMETER_DOCS)', 'set_local_threshold': 'interp_jit.set_local_threshold', + 'dont_trace_inside': 'interp_jit.dont_trace_inside', } def setup_after_space_initialization(self): 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 @@ -168,6 +168,15 @@ the JIT follow the call.''' return space.call_args(w_callable, __args__) +def _jitcell_at(w_code, pos): + try: + jitcell = w_code.jit_cells[pos << 1] + except KeyError: + ref = jit_hooks.new_jitcell() + jitcell = cast_base_ptr_to_instance(BaseJitCell, ref) + w_code.jit_cells[pos << 1] = jitcell + return jitcell + @jit.dont_look_inside @unwrap_spec(w_code=PyCode, pos=r_uint, value=int) def set_local_threshold(space, w_code, pos, value): @@ -176,10 +185,19 @@ For testing. Set the threshold for this code object at position pos at value given. """ - try: - jitcell = w_code.jit_cells[pos << 1] - except KeyError: - ref = jit_hooks.new_jitcell() - jitcell = cast_base_ptr_to_instance(BaseJitCell, ref) - w_code.jit_cells[pos << 1] = jitcell + jitcell = _jitcell_at(w_code, pos) jitcell.counter = value + +@jit.dont_look_inside +@unwrap_spec(w_code=PyCode) +def dont_trace_inside(space, w_code): + """ dont trace inside this function + """ + from rpython.rlib.nonconst import NonConstant + + flag = True + if NonConstant(0): + flag = False # annotation hack to annotate it as real bool + jitcell = _jitcell_at(w_code, 0) + jitcell.dont_trace_here = flag + diff --git a/pypy/module/pypyjit/test/test_jit_hook.py b/pypy/module/pypyjit/test/test_jit_hook.py --- a/pypy/module/pypyjit/test/test_jit_hook.py +++ b/pypy/module/pypyjit/test/test_jit_hook.py @@ -279,4 +279,5 @@ pass pypyjit.set_local_threshold(f.__code__, 0, 0) + pypyjit.dont_trace_inside(f.__code__) # assert did not crash diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py --- a/rpython/rlib/jit.py +++ b/rpython/rlib/jit.py @@ -682,7 +682,7 @@ # Annotation and rtyping of some of the JitDriver methods class BaseJitCell(object): - __slots__ = ('counter') + __slots__ = ('counter', 'dont_trace_here') class ExtEnterLeaveMarker(ExtRegistryEntry): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit