Author: Maciej Fijalkowski <[email protected]>
Branch: rewrite-unrolling
Changeset: r75306:62e5eb68ec00
Date: 2015-01-12 15:44 +0200
http://bitbucket.org/pypy/pypy/changeset/62e5eb68ec00/

Log:    fix the merge enough to pass tests

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
@@ -95,11 +95,13 @@
     def setup(self):
         self.optimizer.optpure = self
 
-    def pure(self, opnum, args, result):
+    def pure(self, opnum, args, result, value=None):
         op = ResOperation(opnum, args, result)
         key = self.optimizer.make_args_key(op)
         if key not in self.pure_operations:
-            self.pure_operations[key] = self.getvalue(result)
+            if value is None:
+                value = self.getvalue(result)
+            self.pure_operations[key] = value
 
     def has_pure_result(self, opnum, args, descr):
         op = ResOperation(opnum, args, None, descr)
@@ -109,19 +111,5 @@
     def get_pure_result(self, key):
         return self.pure_operations.get(key, None)
 
-    def produce_potential_short_preamble_ops(self, sb):
-        xxx
-        ops = sb.optimizer._newoperations
-        for i, op in enumerate(ops):
-            if op.is_always_pure():
-                sb.add_potential(op)
-            if op.is_ovf() and ops[i + 1].getopnum() == rop.GUARD_NO_OVERFLOW:
-                sb.add_potential(op)
-        for i in self.call_pure_positions:
-            op = ops[i]
-            assert op.getopnum() == rop.CALL
-            op = op.copy_and_change(rop.CALL_PURE)
-            sb.add_potential(op)
-
 dispatch_opt = make_dispatcher_method(OptPure, 'optimize_',
                                       default=OptPure.optimize_default)
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
@@ -6,7 +6,7 @@
 from rpython.jit.metainterp.optimizeopt.test.test_util import BaseTest,\
      FakeMetaInterpStaticData
 from rpython.jit.metainterp.optimizeopt.pure import OptPure
-from rpython.jit.metainterp.resoperation import rop
+from rpython.jit.metainterp.resoperation import rop, ResOperation
 from rpython.jit.metainterp.history import ConstInt, BoxInt
 from rpython.jit.backend.llgraph import runner
 
@@ -54,8 +54,10 @@
         i1 = BoxInt()
         unroller = Unroller()
         unroller.optimizer = Optimizer(self.metainterp_sd, None, None, [pure])
+        unroller.optimizer._newoperations = [
+            ResOperation(rop.INT_ADD, [i0, ConstInt(1)], i1)
+        ]
         pure.optimizer = unroller.optimizer
-        pure.pure(rop.INT_ADD, [i0, ConstInt(1)], i1)
         expected = """
         [i0, i1]
         label(i0, i1)
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
@@ -44,7 +44,26 @@
         if old_optpure:
             # import all pure operations from the old optimizer
             new_optpure = self.optimizer.optpure
-            for opargs, value in old_optpure.pure_operations.items():
-                if not value.is_virtual():
-                    pure_value = OptPureValue(self, value.box)
-                    new_optpure.pure_operations[opargs] = pure_value
+            old_ops = old_optimizer._newoperations
+            for op in old_ops:
+                if op.is_always_pure():
+                    pure_value = OptPureValue(self, op.result)
+                    new_optpure.pure(op.getopnum(), op.getarglist(),
+                                     op.result, pure_value)
+    #         for opargs, value in old_optpure.pure_operations.items():
+    #             if not value.is_virtual():
+    #                 pure_value = OptPureValue(self, value.box)
+    #                 new_optpure.pure_operations[opargs] = pure_value
+
+    # def produce_potential_short_preamble_ops(self, sb):
+    #     ops = sb.optimizer._newoperations
+    #     for i, op in enumerate(ops):
+    #         if op.is_always_pure():
+    #             sb.add_potential(op)
+    #         if op.is_ovf() and ops[i + 1].getopnum() == 
rop.GUARD_NO_OVERFLOW:
+    #             sb.add_potential(op)
+    #     for i in self.call_pure_positions:
+    #         op = ops[i]
+    #         assert op.getopnum() == rop.CALL
+    #         op = op.copy_and_change(rop.CALL_PURE)
+    #         sb.add_potential(op)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to