[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