Author: Ronan Lamy <[email protected]>
Branch: optimizeopt-cleanup
Changeset: r96495:9aea58ad1da8
Date: 2019-04-14 02:00 +0100
http://bitbucket.org/pypy/pypy/changeset/9aea58ad1da8/

Log:    Move try_disabling_unroll logic up to MetaInterp.compile_loop()

diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -3,21 +3,22 @@
 from rpython.rtyper.annlowlevel import (
     cast_instance_to_gcref, cast_gcref_to_instance)
 from rpython.rlib.objectmodel import we_are_translated
-from rpython.rlib.debug import debug_start, debug_stop, debug_print, 
have_debug_prints
+from rpython.rlib.debug import (
+    debug_start, debug_stop, debug_print, have_debug_prints)
 from rpython.rlib.rarithmetic import r_uint, intmask
 from rpython.rlib import rstack
 from rpython.rlib.jit import JitDebugInfo, Counters, dont_look_inside
 from rpython.rlib.rjitlog import rjitlog as jl
 
-from rpython.jit.metainterp.resoperation import ResOperation, rop,\
-     get_deep_immutable_oplist, OpHelpers, InputArgInt, InputArgRef,\
-     InputArgFloat
-from rpython.jit.metainterp.history import (TreeLoop, Const, JitCellToken,
+from rpython.jit.metainterp.resoperation import (
+    ResOperation, rop, get_deep_immutable_oplist, OpHelpers, InputArgInt,
+    InputArgRef, InputArgFloat)
+from rpython.jit.metainterp.history import (TreeLoop, JitCellToken,
     TargetToken, AbstractFailDescr, ConstInt)
 from rpython.jit.metainterp import history, jitexc
 from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.resume import (PENDINGFIELDSP,
-        ResumeDataDirectReader, AccumInfo)
+from rpython.jit.metainterp.resume import (
+    PENDINGFIELDSP, ResumeDataDirectReader)
 from rpython.jit.metainterp.resumecode import NUMBERING
 from rpython.jit.metainterp.support import adr2int
 from rpython.jit.codewriter import longlong
@@ -28,6 +29,9 @@
     raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
 
 class CompileData(object):
+    """ An object that accumulates all of the necessary info for
+    the optimization phase, but does not actually have any other state
+    """
     memo = None
     log_noopt = True
 
@@ -36,9 +40,7 @@
             arg.set_forwarded(None)
 
 class PreambleCompileData(CompileData):
-    """ An object that accumulates all of the necessary info for
-    the optimization phase, but does not actually have any other state
-
+    """
     This is the case of label() ops label()
     """
     def __init__(self, trace, runtime_boxes, call_pure_results=None,
@@ -204,7 +206,6 @@
 
 # ____________________________________________________________
 
-
 def compile_simple_loop(metainterp, greenkey, trace, runtime_args, enable_opts,
                         cut_at):
     from rpython.jit.metainterp.optimizeopt import optimize_trace
@@ -242,11 +243,11 @@
     return target_token
 
 def compile_loop(metainterp, greenkey, start, inputargs, jumpargs,
-                 full_preamble_needed=True, try_disabling_unroll=False):
+                 use_unroll=True):
     """Try to compile a new procedure by closing the current history back
     to the first operation.
     """
-    from rpython.jit.metainterp.optimizeopt import optimize_trace, 
use_unrolling
+    from rpython.jit.metainterp.optimizeopt import optimize_trace
 
     metainterp_sd = metainterp.staticdata
     jitdriver_sd = metainterp.jitdriver_sd
@@ -258,14 +259,6 @@
             faildescr=None, entry_bridge=False)
     #
     enable_opts = jitdriver_sd.warmstate.enable_opts
-    use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
-    if try_disabling_unroll:
-        if not use_unroll:
-            return None
-        enable_opts = enable_opts.copy()
-        del enable_opts['unroll']
-        use_unroll = False
-
     jitcell_token = make_jitcell_token(jitdriver_sd)
     cut_at = history.get_trace_position()
     history.record(rop.JUMP, jumpargs, None, descr=jitcell_token)
@@ -344,7 +337,7 @@
     """Try to compile a new procedure by closing the current history back
     to the first operation.
     """
-    from rpython.jit.metainterp.optimizeopt import optimize_trace, 
use_unrolling
+    from rpython.jit.metainterp.optimizeopt import optimize_trace
 
     trace = metainterp.history.trace.cut_trace_from(start, inputargs)
     metainterp_sd = metainterp.staticdata
@@ -360,8 +353,6 @@
     cut = history.get_trace_position()
     history.record(rop.JUMP, jumpargs[:], None, descr=loop_jitcell_token)
     enable_opts = jitdriver_sd.warmstate.enable_opts
-    use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
-    assert use_unroll
     call_pure_results = metainterp.call_pure_results
     loop_data = UnrolledLoopData(trace, loop_jitcell_token, start_state,
                                  call_pure_results=call_pure_results,
@@ -1039,7 +1030,7 @@
     to some existing place.
     """
 
-    from rpython.jit.metainterp.optimizeopt import optimize_trace, 
use_unrolling
+    from rpython.jit.metainterp.optimizeopt import optimize_trace
 
     # The history contains new operations to attach as the code for the
     # failure of 'resumekey.guard_op'.
@@ -1075,7 +1066,6 @@
         data = SimpleCompileData(trace, resumestorage,
                                  call_pure_results=call_pure_results,
                                  enable_opts=enable_opts)
-    use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
     try:
         info, newops = optimize_trace(
             metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
diff --git a/rpython/jit/metainterp/optimizeopt/__init__.py 
b/rpython/jit/metainterp/optimizeopt/__init__.py
--- a/rpython/jit/metainterp/optimizeopt/__init__.py
+++ b/rpython/jit/metainterp/optimizeopt/__init__.py
@@ -31,9 +31,6 @@
 assert ENABLE_ALL_OPTS == ALL_OPTS_NAMES, (
     'please fix rlib/jit.py to say ENABLE_ALL_OPTS = %r' % (ALL_OPTS_NAMES,))
 
-def use_unrolling(cpu, enable_opts):
-    return cpu.supports_guard_gc_type and 'unroll' in enable_opts
-
 def build_opt_chain(enable_opts):
     optimizations = []
     for name, opt in unroll_all_opts:
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
@@ -2733,14 +2733,21 @@
                                                    self.resumekey,
                                                    exported_state)
         else:
-            target_token = compile.compile_loop(self, greenkey, start,
-                                                
original_boxes[num_green_args:],
-                                                
live_arg_boxes[num_green_args:],
-                                     try_disabling_unroll=try_disabling_unroll)
+            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)
             if target_token is not None:
                 assert isinstance(target_token, TargetToken)
-                
self.jitdriver_sd.warmstate.attach_procedure_to_interp(greenkey, 
target_token.targeting_jitcell_token)
-                
self.staticdata.stats.add_jitcell_token(target_token.targeting_jitcell_token)
+                self.jitdriver_sd.warmstate.attach_procedure_to_interp(
+                    greenkey, target_token.targeting_jitcell_token)
+                self.staticdata.stats.add_jitcell_token(
+                    target_token.targeting_jitcell_token)
 
         if target_token is not None: # raise if it *worked* correctly
             assert isinstance(target_token, TargetToken)
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
@@ -9,6 +9,7 @@
 from rpython.jit.metainterp import history
 from rpython.jit.metainterp.test.support import LLJitMixin, noConst
 from rpython.jit.metainterp.warmspot import get_stats
+from rpython.jit.metainterp.pyjitpl import MetaInterp
 from rpython.rlib import rerased
 from rpython.rlib.jit import (JitDriver, we_are_jitted, hint, dont_look_inside,
     loop_invariant, elidable, promote, jit_debug, assert_green,
@@ -2883,10 +2884,11 @@
                 i += 1
             return i
         #
-        def my_optimize_trace(*args, **kwds):
-            raise InvalidLoop
-        old_optimize_trace = optimizeopt.optimize_trace
-        optimizeopt.optimize_trace = my_optimize_trace
+        def my_compile_loop(self, original_boxes, live_arg_boxes, start,
+                        try_disabling_unroll=False, exported_state=None):
+            return None
+        old_compile_loop = MetaInterp.compile_loop
+        MetaInterp.compile_loop = my_compile_loop
         try:
             res = self.meta_interp(f, [23, 4])
             assert res == 23
@@ -2898,13 +2900,11 @@
             self.check_trace_count(0)
             self.check_aborted_count(2)
         finally:
-            optimizeopt.optimize_trace = old_optimize_trace
+            MetaInterp.compile_loop = old_compile_loop
 
     def test_max_unroll_loops_retry_without_unroll(self):
         if not self.basic:
             py.test.skip("unrolling")
-        from rpython.jit.metainterp.optimize import InvalidLoop
-        from rpython.jit.metainterp import optimizeopt
         myjitdriver = JitDriver(greens = [], reds = ['n', 'i'])
         #
         def f(n, limit):
@@ -2918,19 +2918,19 @@
             return i
         #
         seen = []
-        def my_optimize_trace(metainterp_sd, jitdriver_sd, data, memo=None):
-            use_unrolling = ('unroll' in data.enable_opts)
-            seen.append(use_unrolling)
-            raise InvalidLoop
-        old_optimize_trace = optimizeopt.optimize_trace
-        optimizeopt.optimize_trace = my_optimize_trace
+        def my_compile_loop(self, original_boxes, live_arg_boxes, start,
+                        try_disabling_unroll=False, exported_state=None):
+            seen.append(try_disabling_unroll)
+            return None
+        old_compile_loop = MetaInterp.compile_loop
+        MetaInterp.compile_loop = my_compile_loop
         try:
             res = self.meta_interp(f, [23, 4])
             assert res == 23
             assert False in seen
             assert True in seen
         finally:
-            optimizeopt.optimize_trace = old_optimize_trace
+            MetaInterp.compile_loop = old_compile_loop
 
     def test_retrace_limit_with_extra_guards(self):
         myjitdriver = JitDriver(greens = [], reds = ['n', 'i', 'sa', 'a',
diff --git a/rpython/jit/metainterp/test/test_compile.py 
b/rpython/jit/metainterp/test/test_compile.py
--- a/rpython/jit/metainterp/test/test_compile.py
+++ b/rpython/jit/metainterp/test/test_compile.py
@@ -102,10 +102,10 @@
     metainterp.history.trace = t
     #
     greenkey = 'faked'
-    target_token = compile_loop(metainterp, greenkey, (0, 0, 0),
-                                t.inputargs,
-                                [t._mapping[x] for x in 
loop.operations[-1].getarglist()],
-                                None)
+    target_token = compile_loop(
+        metainterp, greenkey, (0, 0, 0), t.inputargs,
+        [t._mapping[x] for x in loop.operations[-1].getarglist()],
+        use_unroll=False)
     jitcell_token = target_token.targeting_jitcell_token
     assert jitcell_token == target_token.original_jitcell_token
     assert jitcell_token.target_tokens == [target_token]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to