Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79441:030bab936ddf Date: 2015-09-04 19:21 +0200 http://bitbucket.org/pypy/pypy/changeset/030bab936ddf/
Log: kill jit-residual-call, a bit useless diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py --- a/rpython/jit/metainterp/pyjitpl.py +++ b/rpython/jit/metainterp/pyjitpl.py @@ -1548,100 +1548,96 @@ def do_residual_call(self, funcbox, argboxes, descr, pc, assembler_call=False, assembler_call_jd=None): - debug_start("jit-residual-call") - try: - # First build allboxes: it may need some reordering from the - # list provided in argboxes, depending on the order in which - # the arguments are expected by the function - # - allboxes = self._build_allboxes(funcbox, argboxes, descr) - effectinfo = descr.get_extra_info() - if effectinfo.oopspecindex == effectinfo.OS_NOT_IN_TRACE: - return self.metainterp.do_not_in_trace_call(allboxes, descr) + # First build allboxes: it may need some reordering from the + # list provided in argboxes, depending on the order in which + # the arguments are expected by the function + # + allboxes = self._build_allboxes(funcbox, argboxes, descr) + effectinfo = descr.get_extra_info() + if effectinfo.oopspecindex == effectinfo.OS_NOT_IN_TRACE: + return self.metainterp.do_not_in_trace_call(allboxes, descr) - if (assembler_call or - effectinfo.check_forces_virtual_or_virtualizable()): - # residual calls require attention to keep virtualizables in-sync - self.metainterp.clear_exception() - if effectinfo.oopspecindex == EffectInfo.OS_JIT_FORCE_VIRTUAL: - resbox = self._do_jit_force_virtual(allboxes, descr, pc) - if resbox is not None: - return resbox - self.metainterp.vable_and_vrefs_before_residual_call() - tp = descr.get_result_type() - if effectinfo.oopspecindex == effectinfo.OS_LIBFFI_CALL: - resbox = self.metainterp.direct_libffi_call(allboxes, descr, - tp) - elif effectinfo.is_call_release_gil(): - resbox = self.metainterp.direct_call_release_gil(allboxes, - descr, tp) - elif tp == 'i': - resbox = self.metainterp.execute_and_record_varargs( - rop.CALL_MAY_FORCE_I, allboxes, descr=descr) + if (assembler_call or + effectinfo.check_forces_virtual_or_virtualizable()): + # residual calls require attention to keep virtualizables in-sync + self.metainterp.clear_exception() + if effectinfo.oopspecindex == EffectInfo.OS_JIT_FORCE_VIRTUAL: + resbox = self._do_jit_force_virtual(allboxes, descr, pc) + if resbox is not None: + return resbox + self.metainterp.vable_and_vrefs_before_residual_call() + tp = descr.get_result_type() + if effectinfo.oopspecindex == effectinfo.OS_LIBFFI_CALL: + resbox = self.metainterp.direct_libffi_call(allboxes, descr, + tp) + elif effectinfo.is_call_release_gil(): + resbox = self.metainterp.direct_call_release_gil(allboxes, + descr, tp) + elif tp == 'i': + resbox = self.metainterp.execute_and_record_varargs( + rop.CALL_MAY_FORCE_I, allboxes, descr=descr) + elif tp == 'r': + resbox = self.metainterp.execute_and_record_varargs( + rop.CALL_MAY_FORCE_R, allboxes, descr=descr) + elif tp == 'f': + resbox = self.metainterp.execute_and_record_varargs( + rop.CALL_MAY_FORCE_F, allboxes, descr=descr) + elif tp == 'v': + resbox = self.metainterp.execute_and_record_varargs( + rop.CALL_MAY_FORCE_N, allboxes, descr=descr) + else: + assert False + self.metainterp.vrefs_after_residual_call() + vablebox = None + if assembler_call: + vablebox, resbox = self.metainterp.direct_assembler_call( + assembler_call_jd) + if resbox and resbox.type != 'v': + self.make_result_of_lastop(resbox) + self.metainterp.vable_after_residual_call(funcbox) + self.metainterp.generate_guard(rop.GUARD_NOT_FORCED, None) + if vablebox is not None: + self.metainterp.history.record(rop.KEEPALIVE, [vablebox], None) + self.metainterp.handle_possible_exception() + return resbox + else: + effect = effectinfo.extraeffect + tp = descr.get_result_type() + if effect == effectinfo.EF_LOOPINVARIANT: + if tp == 'i': + return self.execute_varargs(rop.CALL_LOOPINVARIANT_I, + allboxes, + descr, False, False) elif tp == 'r': - resbox = self.metainterp.execute_and_record_varargs( - rop.CALL_MAY_FORCE_R, allboxes, descr=descr) + return self.execute_varargs(rop.CALL_LOOPINVARIANT_R, + allboxes, + descr, False, False) elif tp == 'f': - resbox = self.metainterp.execute_and_record_varargs( - rop.CALL_MAY_FORCE_F, allboxes, descr=descr) + return self.execute_varargs(rop.CALL_LOOPINVARIANT_F, + allboxes, + descr, False, False) elif tp == 'v': - resbox = self.metainterp.execute_and_record_varargs( - rop.CALL_MAY_FORCE_N, allboxes, descr=descr) + return self.execute_varargs(rop.CALL_LOOPINVARIANT_N, + allboxes, + descr, False, False) else: assert False - self.metainterp.vrefs_after_residual_call() - vablebox = None - if assembler_call: - vablebox, resbox = self.metainterp.direct_assembler_call( - assembler_call_jd) - if resbox and resbox.type != 'v': - self.make_result_of_lastop(resbox) - self.metainterp.vable_after_residual_call(funcbox) - self.metainterp.generate_guard(rop.GUARD_NOT_FORCED, None) - if vablebox is not None: - self.metainterp.history.record(rop.KEEPALIVE, [vablebox], None) - self.metainterp.handle_possible_exception() - return resbox + exc = effectinfo.check_can_raise() + pure = effectinfo.check_is_elidable() + if tp == 'i': + return self.execute_varargs(rop.CALL_I, allboxes, descr, + exc, pure) + elif tp == 'r': + return self.execute_varargs(rop.CALL_R, allboxes, descr, + exc, pure) + elif tp == 'f': + return self.execute_varargs(rop.CALL_F, allboxes, descr, + exc, pure) + elif tp == 'v': + return self.execute_varargs(rop.CALL_N, allboxes, descr, + exc, pure) else: - effect = effectinfo.extraeffect - tp = descr.get_result_type() - if effect == effectinfo.EF_LOOPINVARIANT: - if tp == 'i': - return self.execute_varargs(rop.CALL_LOOPINVARIANT_I, - allboxes, - descr, False, False) - elif tp == 'r': - return self.execute_varargs(rop.CALL_LOOPINVARIANT_R, - allboxes, - descr, False, False) - elif tp == 'f': - return self.execute_varargs(rop.CALL_LOOPINVARIANT_F, - allboxes, - descr, False, False) - elif tp == 'v': - return self.execute_varargs(rop.CALL_LOOPINVARIANT_N, - allboxes, - descr, False, False) - else: - assert False - exc = effectinfo.check_can_raise() - pure = effectinfo.check_is_elidable() - if tp == 'i': - return self.execute_varargs(rop.CALL_I, allboxes, descr, - exc, pure) - elif tp == 'r': - return self.execute_varargs(rop.CALL_R, allboxes, descr, - exc, pure) - elif tp == 'f': - return self.execute_varargs(rop.CALL_F, allboxes, descr, - exc, pure) - elif tp == 'v': - return self.execute_varargs(rop.CALL_N, allboxes, descr, - exc, pure) - else: - assert False - finally: - debug_stop("jit-residual-call") + assert False def do_conditional_call(self, condbox, funcbox, argboxes, descr, pc): if isinstance(condbox, ConstInt) and condbox.value == 0: _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit