[pypy-commit] pypy optimizeopt-cleanup: move some use_unroll logic out of compile_loop()

rlamy pypy.commits at gmail.com
Thu May 9 10:39:57 EDT 2019


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: optimizeopt-cleanup
Changeset: r96580:37157d69c7e4
Date: 2019-04-27 17:00 +0100
http://bitbucket.org/pypy/pypy/changeset/37157d69c7e4/

Log:	move some use_unroll logic out of compile_loop()

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
@@ -2600,15 +2600,17 @@
                     self.staticdata.log('cancelled too many times!')
                     raise SwitchToBlackhole(Counters.ABORT_BAD_LOOP)
             else:
+                can_use_unroll = (self.staticdata.cpu.supports_guard_gc_type and
+                    'unroll' in self.jitdriver_sd.warmstate.enable_opts)
                 target_token = self.compile_loop(
-                    original_boxes, live_arg_boxes, start)
+                    original_boxes, live_arg_boxes, start, can_use_unroll=can_use_unroll)
                 self.raise_if_successful(live_arg_boxes, target_token)
                 # creation of the loop was cancelled!
                 self.cancel_count += 1
                 if self.cancelled_too_many_times():
                     target_token = self.compile_loop(
                         original_boxes, live_arg_boxes, start,
-                        try_disabling_unroll=True)
+                        try_disabling_unroll=True, can_use_unroll=can_use_unroll)
                     self.raise_if_successful(live_arg_boxes, target_token)
                     #
                     self.staticdata.log('cancelled too many times!')
@@ -2733,7 +2735,12 @@
         return cell.get_procedure_token()
 
     def compile_loop(self, original_boxes, live_arg_boxes, start,
-                     try_disabling_unroll=False):
+                     try_disabling_unroll=False, can_use_unroll=True):
+        use_unroll = can_use_unroll
+        if try_disabling_unroll:
+            if not use_unroll:
+                return
+            use_unroll = False
         num_green_args = self.jitdriver_sd.num_green_args
         greenkey = original_boxes[:num_green_args]
         ptoken = self.get_procedure_token(greenkey)
@@ -2741,12 +2748,6 @@
             # XXX this path not tested, but shown to occur on pypy-c :-(
             self.staticdata.log('cancelled: we already have a token now')
             raise SwitchToBlackhole(Counters.ABORT_BAD_LOOP)
-        use_unroll = (self.staticdata.cpu.supports_guard_gc_type and
-            'unroll' in self.jitdriver_sd.warmstate.enable_opts)
-        if try_disabling_unroll:
-            if not use_unroll:
-                return
-            use_unroll = False
         target_token = compile.compile_loop(
             self, greenkey, start, original_boxes[num_green_args:],
             live_arg_boxes[num_green_args:], use_unroll=use_unroll)
diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -2885,7 +2885,7 @@
             return i
         #
         def my_compile_loop(self, original_boxes, live_arg_boxes, start,
-                        try_disabling_unroll=False, exported_state=None):
+                        try_disabling_unroll=False, can_use_unroll=None):
             return None
         old_compile_loop = MetaInterp.compile_loop
         MetaInterp.compile_loop = my_compile_loop
@@ -2919,7 +2919,7 @@
         #
         seen = []
         def my_compile_loop(self, original_boxes, live_arg_boxes, start,
-                        try_disabling_unroll=False, exported_state=None):
+                        try_disabling_unroll=False, can_use_unroll=None):
             seen.append(try_disabling_unroll)
             return None
         old_compile_loop = MetaInterp.compile_loop


More information about the pypy-commit mailing list