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

fijal noreply at buildbot.pypy.org
Mon Jul 6 15:24:28 CEST 2015


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

Log:	port test_optimizebasic 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
@@ -23,25 +23,27 @@
     from rpython.jit.metainterp.pyjitpl import SwitchToBlackhole
     raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
 
+class CompileData(object):
+    def forget_optimization_info(self):
+        for arg in self.start_label.getarglist():
+            arg.set_forwarded(None)
+        for op in self.operations:
+            op.set_forwarded(None)
 
-class LoopCompileData(object):
+class LoopCompileData(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, start_label, end_label, operations):
+    def __init__(self, start_label, end_label, operations,
+                 call_pure_results=None):
         self.start_label = start_label
         self.end_label = end_label
         assert start_label.getopnum() == rop.LABEL
         assert end_label.getopnum() == rop.LABEL
         self.operations = operations
-
-    def forget_optimization_info(self):
-        for arg in self.start_label.getarglist():
-            arg.set_forwarded(None)
-        for op in self.operations:
-            op.set_forwarded(None)
+        self.call_pure_results = call_pure_results
 
     def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
         from rpython.jit.metainterp.optimizeopt.unroll import UnrollOptimizer
@@ -54,6 +56,22 @@
         else:
             xxx
 
+class SimpleCompileData(CompileData):
+    """ This represents label() ops jump with no extra info associated with
+    the label
+    """
+    def __init__(self, start_label, operations, call_pure_results=None):
+        self.start_label = start_label
+        self.operations = operations
+        self.call_pure_results = call_pure_results
+
+    def optimize(self, metainterp_sd, jitdriver_sd, optimizations, unroll):
+        from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer
+
+        opt = Optimizer(metainterp_sd, jitdriver_sd, optimizations)
+        return opt.propagate_all_forward(self.start_label.getarglist(),
+                                         self.operations,
+                                         self.call_pure_results)
 
 def show_procedures(metainterp_sd, procedure=None, error=None):
     # debugging
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -439,8 +439,9 @@
         else:
             return CONST_0
 
-    def propagate_all_forward(self, inputargs, ops, create_inp_args=True):
+    def propagate_all_forward(self, inputargs, ops, call_pure_results=None):
         self.init_inparg_dict_from(inputargs)
+        self.call_pure_results = call_pure_results
         for op in ops:
             self._really_emitted_operation = None
             self.first_optimization.propagate_forward(op)
@@ -448,6 +449,7 @@
         #self.loop.quasi_immutable_deps = self.quasi_immutable_deps
         # accumulate counters
         self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
+        return None, self._newoperations
 
     def send_extra_operation(self, op):
         self.first_optimization.propagate_forward(op)
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -151,9 +151,9 @@
         opnum = OpHelpers.call_for_descr(op.getdescr())
         newop = self.optimizer.replace_op_with(op, opnum)
         self.emit_operation(newop)
-        if self.optimizer.emitting_dissabled:
-            self.extra_call_pure.append(op) # XXX
-        else:
+        #if self.optimizer.emitting_dissabled:
+        #    self.extra_call_pure.append(op) # XXX
+        #else:
             # don't move call_pure_with_exception in the short preamble...
             # issue #2015
 
@@ -162,9 +162,9 @@
             # fix together with unroll
             #effectinfo = op.getdescr().get_extra_info()
             #if not effectinfo.check_can_raise(ignore_memoryerror=True):
-            if 1:
-                self.call_pure_positions.append(
-                    len(self.optimizer._newoperations) - 1)
+        #    if 1:
+        self.call_pure_positions.append(
+            len(self.optimizer._newoperations) - 1)
 
     optimize_CALL_PURE_R = optimize_CALL_PURE_I
     optimize_CALL_PURE_F = optimize_CALL_PURE_I
diff --git a/rpython/jit/metainterp/optimizeopt/simplify.py b/rpython/jit/metainterp/optimizeopt/simplify.py
--- a/rpython/jit/metainterp/optimizeopt/simplify.py
+++ b/rpython/jit/metainterp/optimizeopt/simplify.py
@@ -45,29 +45,29 @@
     def optimize_RECORD_KNOWN_CLASS(self, op):
         pass
 
-    def optimize_LABEL(self, op):
-        if not self.unroll:
-            descr = op.getdescr()
-            if isinstance(descr, JitCellToken):
-                return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
-            self.last_label_descr = op.getdescr()
-        self.emit_operation(op)
+    # def optimize_LABEL(self, op):
+    #     if not self.unroll:
+    #         descr = op.getdescr()
+    #         if isinstance(descr, JitCellToken):
+    #             return self.optimize_JUMP(op.copy_and_change(rop.JUMP))
+    #         self.last_label_descr = op.getdescr()
+    #     self.emit_operation(op)
 
-    def optimize_JUMP(self, op):
-        if not self.unroll:
-            op = op.copy_and_change(op.getopnum())
-            descr = op.getdescr()
-            assert isinstance(descr, JitCellToken)
-            if not descr.target_tokens:
-                assert self.last_label_descr is not None
-                target_token = self.last_label_descr
-                assert isinstance(target_token, TargetToken)
-                assert target_token.targeting_jitcell_token is descr
-                op.setdescr(self.last_label_descr)
-            else:
-                assert len(descr.target_tokens) == 1
-                op.setdescr(descr.target_tokens[0])
-        self.emit_operation(op)
+    # def optimize_JUMP(self, op):
+    #     if not self.unroll:
+    #         op = op.copy_and_change(op.getopnum())
+    #         descr = op.getdescr()
+    #         assert isinstance(descr, JitCellToken)
+    #         if not descr.target_tokens:
+    #             assert self.last_label_descr is not None
+    #             target_token = self.last_label_descr
+    #             assert isinstance(target_token, TargetToken)
+    #             assert target_token.targeting_jitcell_token is descr
+    #             op.setdescr(self.last_label_descr)
+    #         else:
+    #             assert len(descr.target_tokens) == 1
+    #             op.setdescr(descr.target_tokens[0])
+    #     self.emit_operation(op)
 
     def optimize_GUARD_FUTURE_CONDITION(self, op):
         pass
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,17 +73,28 @@
     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()
-        loop.operations = [ResOperation(rop.LABEL, loop.inputargs, descr=TargetToken(token))] + \
-                          loop.operations
+        label_op = ResOperation(rop.LABEL, loop.inputargs,
+                                descr=TargetToken(token))
         if loop.operations[-1].getopnum() == rop.JUMP:
             loop.operations[-1].setdescr(token)
         exp = parse(optops, namespace=self.namespace.copy())
         expected = convert_old_style_to_targets(exp, jump=True)
-        self._do_optimize_loop(loop, call_pure_results, export_state=False)
+        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
+        compile_data = compile.SimpleCompileData(label_op, loop.operations,
+                                                 call_pure_results)
+        _, ops = self._do_optimize_loop(compile_data)
+        loop.operations = [label_op] + ops
         #print '\n'.join([str(o) for o in loop.operations])
+        self.loop = loop
         self.assert_equal(loop, expected)
 
 
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
@@ -407,12 +407,6 @@
 
     def _do_optimize_loop(self, compile_data, call_pure_results=None):
         from rpython.jit.metainterp.optimizeopt import optimize_trace
-        from rpython.jit.metainterp.optimizeopt.util import args_dict
-
-        # XXX
-        if call_pure_results is not None:
-            for k, v in call_pure_results.items():
-                loop.call_pure_results[list(k)] = v
         metainterp_sd = FakeMetaInterpStaticData(self.cpu)
         if hasattr(self, 'vrefinfo'):
             metainterp_sd.virtualref_info = self.vrefinfo


More information about the pypy-commit mailing list