Author: Hakan Ardo <ha...@debian.org> Branch: jit-targets Changeset: r48934:8f5285d28ef9 Date: 2011-11-08 13:38 +0100 http://bitbucket.org/pypy/pypy/changeset/8f5285d28ef9/
Log: respect retrace limit diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py --- a/pypy/jit/metainterp/optimizeopt/unroll.py +++ b/pypy/jit/metainterp/optimizeopt/unroll.py @@ -506,42 +506,48 @@ pass target.virtual_state.debug_print(debugmsg, bad) - if ok: - debug_stop('jit-log-virtualstate') + if ok: + debug_stop('jit-log-virtualstate') - values = [self.getvalue(arg) - for arg in jumpop.getarglist()] - args = target.virtual_state.make_inputargs(values, self.optimizer, - keyboxes=True) - short_inputargs = target.short_preamble[0].getarglist() - inliner = Inliner(short_inputargs, args) + values = [self.getvalue(arg) + for arg in jumpop.getarglist()] + args = target.virtual_state.make_inputargs(values, self.optimizer, + keyboxes=True) + short_inputargs = target.short_preamble[0].getarglist() + inliner = Inliner(short_inputargs, args) - for guard in extra_guards: - if guard.is_guard(): - descr = target.start_resumedescr.clone_if_mutable() - inliner.inline_descr_inplace(descr) - guard.setdescr(descr) - self.optimizer.send_extra_operation(guard) + for guard in extra_guards: + if guard.is_guard(): + descr = target.start_resumedescr.clone_if_mutable() + inliner.inline_descr_inplace(descr) + guard.setdescr(descr) + self.optimizer.send_extra_operation(guard) - try: - for shop in target.short_preamble[1:]: - newop = inliner.inline_op(shop) - self.optimizer.send_extra_operation(newop) - except InvalidLoop: - debug_print("Inlining failed unexpectedly", - "jumping to preamble instead") - assert cell_token.target_tokens[0].virtual_state is None - jumpop.setdescr(cell_token.target_tokens[0]) - self.optimizer.send_extra_operation(jumpop) - return True + try: + for shop in target.short_preamble[1:]: + newop = inliner.inline_op(shop) + self.optimizer.send_extra_operation(newop) + except InvalidLoop: + debug_print("Inlining failed unexpectedly", + "jumping to preamble instead") + assert cell_token.target_tokens[0].virtual_state is None + jumpop.setdescr(cell_token.target_tokens[0]) + self.optimizer.send_extra_operation(jumpop) + return True debug_stop('jit-log-virtualstate') - retraced_count = cell_token.retraced_count limit = self.optimizer.metainterp_sd.warmrunnerdesc.memory_manager.retrace_limit - if retraced_count<limit: - debug_print('Retracing (%d/%d)' % (retraced_count, limit)) + if cell_token.retraced_count<limit: cell_token.retraced_count += 1 + debug_print('Retracing (%d/%d)' % (cell_token.retraced_count, limit)) return False + else: + debug_print("Retrace count reached, jumping to preamble") + assert cell_token.target_tokens[0].virtual_state is None + jumpop.setdescr(cell_token.target_tokens[0]) + self.optimizer.send_extra_operation(jumpop) + return True + # FIXME: kill _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit