[pypy-commit] pypy optresult-unroll: port test_optimizeopt to the new style

fijal noreply at buildbot.pypy.org
Mon Jul 6 16:00:01 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78458:775e4245077a
Date: 2015-07-06 15:59 +0200
http://bitbucket.org/pypy/pypy/changeset/775e4245077a/

Log:	port test_optimizeopt to the new style

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
@@ -52,7 +52,6 @@
             opt = UnrollOptimizer(metainterp_sd, jitdriver_sd, optimizations)
             return opt.optimize_preamble(self.start_label, self.end_label,
                                          self.operations)
-            xxx
         else:
             xxx
 
@@ -68,11 +67,32 @@
     def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
         from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
 
+        assert not unroll
         opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
         return opt.propagate_all_forward(self.start_label.getarglist(),
                                          self.operations,
                                          self.call_pure_results)
 
+class UnrolledLoopData(CompileData):
+    """ This represents label() ops jump with extra info that's from the
+    run of LoopCompileData
+    """
+    def __init__(self, start_label, end_jump, operations, state,
+                 call_pure_results=None):
+        self.start_label = start_label
+        self.end_jump = end_jump
+        self.operations = operations
+        self.state = state
+        self.call_pure_results = call_pure_results
+
+    def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+        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.start_label, self.end_jump,
+                                        self.operations, self.state)
+
 def show_procedures(metainterp_sd, procedure=None, error=None):
     # debugging
     if option and (option.view or option.viewloops):
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
@@ -73,9 +73,6 @@
     enable_opts = "intbounds:rewrite:virtualize:string:earlyforce:pure:heap"
 
     def optimize_loop(self, ops, optops, call_pure_results=None):
-        from rpython.jit.metainterp.optimizeopt.util import args_dict
-
-                
         loop = self.parse(ops, postprocess=self.postprocess)
         token = JitCellToken()
         label_op = ResOperation(rop.LABEL, loop.inputargs,
@@ -84,11 +81,7 @@
             loop.operations[-1].setdescr(token)
         exp = parse(optops, namespace=self.namespace.copy())
         expected = convert_old_style_to_targets(exp, jump=True)
-        if call_pure_results is not None:
-            d = call_pure_results
-            call_pure_results = args_dict()
-            for k, v in d.items():
-                call_pure_results[list(k)] = v
+        call_pure_results = self._convert_call_pure_results(call_pure_results)
         compile_data = compile.SimpleCompileData(label_op, loop.operations,
                                                  call_pure_results)
         _, ops = self._do_optimize_loop(compile_data)
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
@@ -418,8 +418,36 @@
         compile_data.forget_optimization_info()
         return state
 
+    def _convert_call_pure_results(self, d):
+        from rpython.jit.metainterp.optimizeopt.util import args_dict
+
+        if d is None:
+            return
+        call_pure_results = args_dict()
+        for k, v in d.items():
+            call_pure_results[list(k)] = v
+        return call_pure_results
+
     def unroll_and_optimize(self, loop, call_pure_results=None):
-        xxx
+        jump_op = loop.operations[-1]
+        assert jump_op.getopnum() == rop.JUMP
+        ops = loop.operations[:-1]
+        start_label = ResOperation(rop.LABEL, loop.inputargs)
+        end_label = jump_op.copy_and_change(opnum=rop.LABEL)
+        preamble_data = compile.LoopCompileData(start_label, end_label, ops)
+        start_state, preamble_ops = self._do_optimize_loop(preamble_data,
+                                                  call_pure_results)
+        preamble_data.forget_optimization_info()
+        loop_data = compile.UnrolledLoopData(end_label, jump_op,
+                                             ops + [jump_op], start_state)
+        _, ops = self._do_optimize_loop(loop_data, call_pure_results)
+        preamble = TreeLoop('preamble')
+        preamble.inputargs = start_label.getarglist()
+        preamble.operations = [start_label] + preamble_ops
+        loop.operations = [end_label] + ops
+        return preamble
+
+    def foo(self):
         metainterp_sd = FakeMetaInterpStaticData(self.cpu)
         self.add_guard_future_condition(loop)
         operations =  loop.operations
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -62,6 +62,14 @@
         self.optimizer.propagate_all_forward(start_label.getarglist(), ops)
         exported_state = self.export_state(start_label, end_label)
         return exported_state, self.optimizer._newoperations
+
+    def optimize_peeled_loop(self, start_label, end_jump, ops, state):
+        self._check_no_forwarding([[start_label, end_jump], ops])
+        self.import_state(start_label, state)
+        self.optimizer.propagate_all_forward(start_label.getarglist(), ops)
+        return None, self.optimizer._newoperations
+
+    def random_garbage(self):
         # WTF is the rest of this function
         if not jumpop:
             return
@@ -211,12 +219,9 @@
         return ExportedState([], [])
 
     def import_state(self, targetop, exported_state):
-        if not targetop: # Trace did not start with a label
-            self.inputargs = self.optimizer.loop.inputargs
-            self.short = None
-            self.initial_virtual_state = None
-            return
-
+        for source, target in exported_state.inputarg_mapping:
+            xxx
+        return
         self.inputargs = targetop.getarglist()
         target_token = targetop.getdescr()
         assert isinstance(target_token, TargetToken)


More information about the pypy-commit mailing list