[pypy-commit] pypy jit-targets: respect retrace limit
hakanardo
noreply at buildbot.pypy.org
Tue Nov 8 14:10:08 CET 2011
Author: Hakan Ardo <hakan at 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
More information about the pypy-commit
mailing list