[pypy-commit] pypy optimizeopt-cleanup: LoopCompileData.optimize() is only called with unroll=True; simplify optimize() and optimize_trace()

rlamy pypy.commits at gmail.com
Sat Apr 13 19:18:37 EDT 2019


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: optimizeopt-cleanup
Changeset: r96465:f6577bae1fb3
Date: 2019-04-13 23:52 +0100
http://bitbucket.org/pypy/pypy/changeset/f6577bae1fb3/

Log:	LoopCompileData.optimize() is only called with unroll=True; simplify
	optimize() and optimize_trace()

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
@@ -35,7 +35,7 @@
         for arg in self.trace.inputargs:
             arg.set_forwarded(None)
 
-class LoopCompileData(CompileData):
+class PreambleCompileData(CompileData):
     """ An object that accumulates all of the necessary info for
     the optimization phase, but does not actually have any other state
 
@@ -49,19 +49,13 @@
         assert runtime_boxes is not None
         self.runtime_boxes = runtime_boxes
 
-    def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
-        from rpython.jit.metainterp.optimizeopt.unroll import (UnrollOptimizer,
-                                                               Optimizer)
-
-        if unroll:
-            opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
-            return opt.optimize_preamble(self.trace,
-                                         self.runtime_boxes,
-                                         self.call_pure_results,
-                                         self.box_names_memo)
-        else:
-            opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
-            return opt.propagate_all_forward(self.trace, self.call_pure_results)
+    def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
+        from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
+        opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
+        return opt.optimize_preamble(self.trace,
+                                        self.runtime_boxes,
+                                        self.call_pure_results,
+                                        self.box_names_memo)
 
 class SimpleCompileData(CompileData):
     """ This represents label() ops jump with no extra info associated with
@@ -74,11 +68,9 @@
         self.call_pure_results = call_pure_results
         self.enable_opts = enable_opts
 
-    def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+    def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
         from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
         from rpython.jit.metainterp.optimizeopt.bridgeopt import deserialize_optimizer_knowledge
-
-        #assert not unroll
         opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
         traceiter = self.trace.get_iter()
         if self.resumestorage:
@@ -101,7 +93,7 @@
         self.inline_short_preamble = inline_short_preamble
         self.resumestorage = resumestorage
 
-    def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+    def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
         from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
 
         opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
@@ -113,7 +105,7 @@
 
 class UnrolledLoopData(CompileData):
     """ This represents label() ops jump with extra info that's from the
-    run of LoopCompileData. Jump goes to the same label
+    run of PreambleCompileData. Jump goes to the same label
     """
     log_noopt = False
 
@@ -127,10 +119,8 @@
         self.call_pure_results = call_pure_results
         self.inline_short_preamble = inline_short_preamble
 
-    def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+    def optimize(self, metainterp_sd, jitdriver_sd, optimizations):
         from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
-
-        assert unroll # we should not be here if it's disabled
         opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
         return opt.optimize_peeled_loop(self.trace, self.celltoken, self.state,
             self.call_pure_results, self.inline_short_preamble)
@@ -217,7 +207,7 @@
 
 def compile_simple_loop(metainterp, greenkey, trace, runtime_args, enable_opts,
                         cut_at):
-    from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling
+    from rpython.jit.metainterp.optimizeopt import optimize_trace
 
     jitdriver_sd = metainterp.jitdriver_sd
     metainterp_sd = metainterp.staticdata
@@ -225,11 +215,9 @@
     call_pure_results = metainterp.call_pure_results
     data = SimpleCompileData(trace, call_pure_results=call_pure_results,
                              enable_opts=enable_opts)
-    use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
     try:
         loop_info, ops = optimize_trace(
-            metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo,
-            use_unrolling=use_unroll)
+            metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
     except InvalidLoop:
         metainterp_sd.jitlog.trace_aborted()
         trace.cut_at(cut_at)
@@ -287,13 +275,13 @@
         return compile_simple_loop(metainterp, greenkey, trace, jumpargs,
                                    enable_opts, cut_at)
     call_pure_results = metainterp.call_pure_results
-    preamble_data = LoopCompileData(trace, jumpargs,
+    preamble_data = PreambleCompileData(trace, jumpargs,
                                     call_pure_results=call_pure_results,
                                     enable_opts=enable_opts)
     try:
         start_state, preamble_ops = optimize_trace(
             metainterp_sd, jitdriver_sd, preamble_data,
-            metainterp.box_names_memo, use_unrolling=use_unroll)
+            metainterp.box_names_memo)
     except InvalidLoop:
         metainterp_sd.jitlog.trace_aborted()
         history.cut(cut_at)
@@ -309,8 +297,7 @@
                                  enable_opts=enable_opts)
     try:
         loop_info, loop_ops = optimize_trace(
-            metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo,
-            use_unrolling=use_unroll)
+            metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo)
     except InvalidLoop:
         metainterp_sd.jitlog.trace_aborted()
         history.cut(cut_at)
@@ -373,15 +360,15 @@
     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,
                                  enable_opts=enable_opts)
-    use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
     try:
         loop_info, loop_ops = optimize_trace(
-            metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo,
-            use_unrolling=use_unroll)
+            metainterp_sd, jitdriver_sd, loop_data, metainterp.box_names_memo)
     except InvalidLoop:
         # Fall back on jumping directly to preamble
         history.cut(cut)
@@ -393,7 +380,7 @@
         try:
             loop_info, loop_ops = optimize_trace(
                 metainterp_sd, jitdriver_sd, loop_data,
-                metainterp.box_names_memo, use_unrolling=use_unroll)
+                metainterp.box_names_memo)
         except InvalidLoop:
             metainterp_sd.jitlog.trace_aborted()
             history.cut(cut)
@@ -1091,8 +1078,7 @@
     use_unroll = use_unrolling(metainterp_sd.cpu, enable_opts)
     try:
         info, newops = optimize_trace(
-            metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo,
-            use_unrolling=use_unroll)
+            metainterp_sd, jitdriver_sd, data, metainterp.box_names_memo)
     except InvalidLoop:
         metainterp_sd.jitlog.trace_aborted()
         # XXX I am fairly convinced that optimize_bridge cannot actually raise
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
@@ -53,8 +53,7 @@
     if not is_unrolled:
         metainterp_sd.logger_noopt.log_loop_from_trace(trace, memo=memo)
 
-def optimize_trace(metainterp_sd, jitdriver_sd, compile_data,
-                   memo=None, use_unrolling=True):
+def optimize_trace(metainterp_sd, jitdriver_sd, compile_data, memo=None):
     """Optimize loop.operations to remove internal overheadish operations.
     """
     debug_start("jit-optimize")
@@ -65,8 +64,8 @@
             memo = {}
         compile_data.box_names_memo = memo
         optimizations = build_opt_chain(compile_data.enable_opts)
-        return compile_data.optimize(metainterp_sd, jitdriver_sd,
-                                     optimizations, unroll=use_unrolling)
+        return compile_data.optimize(
+            metainterp_sd, jitdriver_sd, optimizations)
     finally:
         compile_data.forget_optimization_info()
         debug_stop("jit-optimize")
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -5,7 +5,6 @@
 from rpython.rlib.rarithmetic import LONG_BIT
 from rpython.rtyper import rclass
 from rpython.rtyper.lltypesystem import lltype
-from rpython.jit.metainterp.optimizeopt import use_unrolling
 from rpython.jit.metainterp.optimizeopt.test.test_util import (
     BaseTest, FakeMetaInterpStaticData, convert_old_style_to_targets)
 from rpython.jit.metainterp.history import (
@@ -34,10 +33,9 @@
         expected = convert_old_style_to_targets(exp, jump=True)
         call_pure_results = self._convert_call_pure_results(call_pure_results)
         trace = convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu))
-        use_unroll = use_unrolling(self.cpu, self.enable_opts)
         compile_data = compile.SimpleCompileData(
             trace, call_pure_results=call_pure_results)
-        info, ops = self._do_optimize_loop(compile_data, use_unroll)
+        info, ops = self._do_optimize_loop(compile_data)
         label_op = ResOperation(rop.LABEL, info.inputargs)
         loop.inputargs = info.inputargs
         loop.operations = [label_op] + ops
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebridge.py
@@ -1,4 +1,3 @@
-from rpython.jit.metainterp.optimizeopt import use_unrolling
 from rpython.jit.metainterp.optimizeopt.test.test_util import (
     BaseTest, convert_old_style_to_targets, FakeMetaInterpStaticData)
 from rpython.jit.metainterp import compile
@@ -30,13 +29,12 @@
         self.add_guard_future_condition(bridge)
         trace = oparser.convert_loop_to_trace(
             bridge, FakeMetaInterpStaticData(self.cpu))
-        use_unroll = use_unrolling(self.cpu, self.enable_opts)
         data = compile.BridgeCompileData(
             trace,
             self.convert_values(bridge.operations[-1].getarglist(), bridge_values),
             None, enable_opts=self.enable_opts,
             inline_short_preamble=inline_short_preamble)
-        bridge_info, ops = self._do_optimize_loop(data, use_unroll)
+        bridge_info, ops = self._do_optimize_loop(data)
         loop.check_consistency(check_descr=False)
         info.preamble.check_consistency(check_descr=False)
         bridge.operations = ([ResOperation(rop.LABEL, bridge_info.inputargs)] +
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_unroll.py
@@ -11,12 +11,11 @@
 from rpython.jit.metainterp.support import ptr2int
 from rpython.jit.metainterp.optimizeopt.shortpreamble import (
     ShortPreambleBuilder, PreambleOp, ShortInputArg)
-from rpython.jit.metainterp.compile import LoopCompileData
+from rpython.jit.metainterp.compile import PreambleCompileData
 from rpython.jit.metainterp.optimizeopt.virtualstate import (
     NotVirtualStateInfo, LEVEL_CONSTANT, LEVEL_UNKNOWN, LEVEL_KNOWNCLASS,
     VirtualStateInfo)
 from rpython.jit.metainterp.optimizeopt import info, optimizer
-from rpython.jit.metainterp.optimizeopt import use_unrolling
 from rpython.jit.tool import oparser
 
 class FakeOptimizer(object):
@@ -47,9 +46,8 @@
         inputargs = loop.inputargs
         preamble = TreeLoop('preamble')
         trace = oparser.convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu))
-        use_unroll = use_unrolling(self.cpu, self.enable_opts)
-        compile_data = LoopCompileData(trace, inputargs)
-        start_state, newops = self._do_optimize_loop(compile_data, use_unroll)
+        compile_data = PreambleCompileData(trace, inputargs)
+        start_state, newops = self._do_optimize_loop(compile_data)
         preamble.operations = newops
         preamble.inputargs = start_state.renamed_inputargs
         return start_state, loop, preamble
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -23,7 +23,7 @@
 from rpython.jit.metainterp.resoperation import (
     rop, ResOperation, InputArgRef, AbstractValue)
 from rpython.jit.metainterp.virtualref import VirtualRefInfo
-from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling
+from rpython.jit.metainterp.optimizeopt import optimize_trace
 from rpython.jit.metainterp.optimizeopt.util import (
     sort_descrs, equaloplists, args_dict)
 
@@ -538,14 +538,13 @@
         assert equaloplists(optimized.operations,
                             expected.operations, False, remap, text_right)
 
-    def _do_optimize_loop(self, compile_data, use_unroll):
+    def _do_optimize_loop(self, compile_data):
         metainterp_sd = FakeMetaInterpStaticData(self.cpu)
         metainterp_sd.virtualref_info = self.vrefinfo
         compute_bitstrings(self.cpu.fetch_all_descrs())
         #
         compile_data.enable_opts = self.enable_opts
-        state = optimize_trace(
-            metainterp_sd, None, compile_data, use_unrolling=use_unroll)
+        state = optimize_trace(metainterp_sd, None, compile_data)
         return state
 
     def _convert_call_pure_results(self, d):
@@ -583,14 +582,13 @@
         jump_op.setdescr(celltoken)
         call_pure_results = self._convert_call_pure_results(call_pure_results)
         t = convert_loop_to_trace(loop, FakeMetaInterpStaticData(self.cpu))
-        use_unroll = use_unrolling(self.cpu, self.enable_opts)
-        preamble_data = compile.LoopCompileData(t, runtime_boxes,
-                                                call_pure_results)
-        start_state, preamble_ops = self._do_optimize_loop(preamble_data, use_unroll)
+        preamble_data = compile.PreambleCompileData(
+            t, runtime_boxes, call_pure_results, enable_opts=self.enable_opts)
+        start_state, preamble_ops = self._do_optimize_loop(preamble_data)
         preamble_data.forget_optimization_info()
         loop_data = compile.UnrolledLoopData(preamble_data.trace,
             celltoken, start_state, call_pure_results)
-        loop_info, ops = self._do_optimize_loop(loop_data, use_unroll)
+        loop_info, ops = self._do_optimize_loop(loop_data)
         preamble = TreeLoop('preamble')
         preamble.inputargs = start_state.renamed_inputargs
         start_label = ResOperation(rop.LABEL, start_state.renamed_inputargs)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_virtualstate.py
@@ -853,7 +853,7 @@
     enable_opts = "intbounds:rewrite:virtualize:string:pure:earlyforce:heap:unroll"
 
     def _do_optimize_bridge(self, bridge, call_pure_results, values):
-        from rpython.jit.metainterp.optimizeopt import optimize_trace, use_unrolling
+        from rpython.jit.metainterp.optimizeopt import optimize_trace
         from rpython.jit.metainterp.optimizeopt.util import args_dict
 
         self.bridge = bridge
@@ -871,9 +871,7 @@
         data = compile.BridgeCompileData(trace, runtime_boxes,
             enable_opts=self.enable_opts, inline_short_preamble=True)
 
-        use_unroll = use_unrolling(self.cpu, self.enable_opts)
-        info, newops = optimize_trace(metainterp_sd, None, data,
-                                      use_unrolling=use_unroll)
+        info, newops = optimize_trace(metainterp_sd, None, data)
         if info.final():
             bridge.operations = newops
             bridge.inputargs = info.inputargs
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
@@ -2918,9 +2918,8 @@
             return i
         #
         seen = []
-        def my_optimize_trace(metainterp_sd, jitdriver_sd, data, memo=None,
-                              use_unrolling=True):
-            assert use_unrolling == ('unroll' in data.enable_opts)
+        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


More information about the pypy-commit mailing list