[pypy-commit] pypy rewrite-unrolling: shuffle stuff around so we don't need unroller as an attribute

fijal noreply at buildbot.pypy.org
Sun Jan 11 11:22:20 CET 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: rewrite-unrolling
Changeset: r75297:2c65ae7ccd02
Date: 2015-01-11 12:22 +0200
http://bitbucket.org/pypy/pypy/changeset/2c65ae7ccd02/

Log:	shuffle stuff around so we don't need unroller as an attribute

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
@@ -847,6 +847,20 @@
                                  op.getopnum(), argboxes, op.getdescr())
         return resbox.constbox()
 
+    # for unrolling
+    def reuse_pure_result(self, box):
+        #if box in self.short_boxes_seen:
+        #    return
+        label1_op = self.loop.operations[0]
+        label1_args = label1_op.getarglist()
+        label2_op = self.loop.operations[-1]
+        label2_args = label2_op.getarglist()
+        assert len(label1_args) == len(self.loop.inputargs)
+        assert len(label2_args) == len(self.loop.inputargs)
+        self.loop.inputargs.append(box)
+        label1_args.append(box)
+        label2_args.append(box)
+
     #def optimize_GUARD_NO_OVERFLOW(self, op):
     #    # otherwise the default optimizer will clear fields, which is unwanted
     #    # in this case
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
@@ -388,8 +388,7 @@
         assert equaloplists(optimized.operations,
                             expected.operations, False, remap, text_right)
 
-    def _do_optimize_loop(self, loop, call_pure_results, start_state=None,
-                          export_state=False):
+    def _do_optimize_loop(self, loop, call_pure_results, unroller=None):
         from rpython.jit.metainterp.optimizeopt import optimize_trace
         from rpython.jit.metainterp.optimizeopt.util import args_dict
 
@@ -406,8 +405,7 @@
         #
         return optimize_trace(metainterp_sd, None, loop,
                               self.enable_opts,
-                              start_state=start_state,
-                              export_state=export_state)
+                              unroller=unroller)
 
     def unroll_and_optimize(self, loop, call_pure_results=None):
         self.add_guard_future_condition(loop)
@@ -427,8 +425,7 @@
         preamble.operations = [ResOperation(rop.LABEL, inputargs, None, descr=TargetToken(token))] + \
                               operations +  \
                               [ResOperation(rop.LABEL, jump_args, None, descr=token)]
-        start_state = self._do_optimize_loop(preamble, call_pure_results,
-                                             export_state=True)
+        start_state = self._do_optimize_loop(preamble, call_pure_results)
 
         assert preamble.operations[-1].getopnum() == rop.LABEL
 
@@ -442,8 +439,7 @@
         assert loop.operations[0].getopnum() == rop.LABEL
         loop.inputargs = loop.operations[0].getarglist()
 
-        self._do_optimize_loop(loop, call_pure_results, start_state,
-                               export_state=False)
+        self._do_optimize_loop(loop, call_pure_results, unroller=start_state)
         extra_same_as = []
         while loop.operations[0].getopnum() != rop.LABEL:
             extra_same_as.append(loop.operations[0])
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
@@ -13,17 +13,17 @@
 
 
 class OptPureValue(OptValue):
-    _attrs_ = ('unroller', 'keybox')
+    _attrs_ = ('keybox',)
     box = None
 
     def __init__(self, unroller, keybox):
         self.unroller = unroller
         self.keybox = keybox
 
-    def force_box(self, ignored):
+    def force_box(self, optforce):
         if self.box is None:
             self.box = self.keybox
-            self.unroller.reuse_pure_result(self.box)
+            optforce.optimizer.reuse_pure_result(self.box)
         return self.box
 
 
@@ -48,14 +48,3 @@
                 if not value.is_virtual():
                     pure_value = OptPureValue(self, value.box)
                     new_optpure.pure_operations[opargs] = pure_value
-
-    def reuse_pure_result(self, box):
-        label1_op = self.optimizer.loop.operations[0]
-        label1_args = label1_op.getarglist()
-        label2_op = self.optimizer.loop.operations[-1]
-        label2_args = label2_op.getarglist()
-        assert len(label1_args) == len(self.optimizer.loop.inputargs)
-        assert len(label2_args) == len(self.optimizer.loop.inputargs)
-        self.optimizer.loop.inputargs.append(box)
-        label1_args.append(box)
-        label2_args.append(box)


More information about the pypy-commit mailing list