Author: Armin Rigo <ar...@tunes.org> Branch: conditional_call_value_3 Changeset: r87034:88d339078b81 Date: 2016-09-12 12:32 +0200 http://bitbucket.org/pypy/pypy/changeset/88d339078b81/
Log: Add a flag 'supports_cond_call_value'. E.g. the ARM backend should first improve the code generation of 'cond_call' before we consider adding 'cond_call_value' (see XXXs) diff --git a/rpython/jit/backend/arm/regalloc.py b/rpython/jit/backend/arm/regalloc.py --- a/rpython/jit/backend/arm/regalloc.py +++ b/rpython/jit/backend/arm/regalloc.py @@ -1002,6 +1002,9 @@ prepare_op_cond_call_gc_wb_array = prepare_op_cond_call_gc_wb def prepare_op_cond_call(self, op, fcond): + # XXX don't force the arguments to be loaded in specific + # locations before knowing if we can take the fast path + # XXX add cond_call_value support assert 2 <= op.numargs() <= 4 + 2 tmpreg = self.get_scratch_reg(INT, selected_reg=r.r4) v = op.getarg(1) diff --git a/rpython/jit/backend/llgraph/runner.py b/rpython/jit/backend/llgraph/runner.py --- a/rpython/jit/backend/llgraph/runner.py +++ b/rpython/jit/backend/llgraph/runner.py @@ -325,6 +325,7 @@ supports_longlong = r_uint is not r_ulonglong supports_singlefloats = True supports_guard_gc_type = True + supports_cond_call_value = True translate_support_code = False is_llgraph = True vector_extension = True diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py --- a/rpython/jit/backend/llsupport/rewrite.py +++ b/rpython/jit/backend/llsupport/rewrite.py @@ -619,6 +619,8 @@ size, 1, ofs) def expand_call_shortcut(self, op): + if not self.cpu.supports_cond_call_value: + return descr = op.getdescr() if descr is None: return diff --git a/rpython/jit/backend/llsupport/test/test_rewrite.py b/rpython/jit/backend/llsupport/test/test_rewrite.py --- a/rpython/jit/backend/llsupport/test/test_rewrite.py +++ b/rpython/jit/backend/llsupport/test/test_rewrite.py @@ -209,6 +209,7 @@ load_constant_offset = True load_supported_factors = (1,2,4,8) + supports_cond_call_value = True translate_support_code = None diff --git a/rpython/jit/backend/model.py b/rpython/jit/backend/model.py --- a/rpython/jit/backend/model.py +++ b/rpython/jit/backend/model.py @@ -16,6 +16,7 @@ # Boxes and Consts are BoxFloats and ConstFloats. supports_singlefloats = False supports_guard_gc_type = False + supports_cond_call_value = False propagate_exception_descr = None diff --git a/rpython/jit/backend/test/runner_test.py b/rpython/jit/backend/test/runner_test.py --- a/rpython/jit/backend/test/runner_test.py +++ b/rpython/jit/backend/test/runner_test.py @@ -2448,6 +2448,9 @@ assert called == [(67, 89)] def test_cond_call_value(self): + if not self.cpu.supports_cond_call_value: + py.test.skip("missing supports_cond_call_value") + def func_int(*args): called.append(args) return len(args) * 100 + 1000 diff --git a/rpython/jit/backend/x86/runner.py b/rpython/jit/backend/x86/runner.py --- a/rpython/jit/backend/x86/runner.py +++ b/rpython/jit/backend/x86/runner.py @@ -15,6 +15,7 @@ debug = True supports_floats = True supports_singlefloats = True + supports_cond_call_value = True dont_keepalive_stuff = False # for tests with_threads = False _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit