Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r78479:ab1fed37b3d6
Date: 2015-07-06 18:35 +0200
http://bitbucket.org/pypy/pypy/changeset/ab1fed37b3d6/

Log:    hopefully a better fix

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
@@ -466,11 +466,8 @@
         assert not op.is_call_pure()
         orig_op = op
         op = self.replace_op_with(op, op.getopnum())
-        # XXX look in C and maybe specialize on number of args
         for i in range(op.numargs()):
             arg = self.force_box(op.getarg(i))
-            #self.ensure_imported(value)
-            #    newbox = value.force_box(self)
             op.setarg(i, arg)
         self.metainterp_sd.profiler.count(jitprof.Counters.OPT_OPS)
         if op.is_guard():
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -177,6 +177,9 @@
             """ % expected_value
             self.optimize_loop(ops, expected)
 
+    #def test_cast_1(self):
+    #    xxx
+
     def test_reverse_of_cast_1(self):
         ops = """
         [i0]
@@ -3332,6 +3335,7 @@
         self.optimize_loop(ops, expected)
 
     def test_int_and_or_with_zero(self):
+        xxx
         ops = """
         [i0, i1]
         i2 = int_and(i0, 0)
@@ -5341,6 +5345,7 @@
         self.optimize_loop(ops, expected)
 
     def test_lshift_rshift(self):
+        xxx
         ops = """
         [i1, i2, i2b, i1b]
         i3 = int_lshift(i1, i2)
@@ -6214,6 +6219,7 @@
         self.optimize_strunicode_loop(ops, expected, expected)
 
     def test_newstr_2(self):
+        xxx
         ops = """
         [i0, i1]
         p1 = newstr(2)
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
@@ -443,6 +443,7 @@
         start_state, preamble_ops = self._do_optimize_loop(preamble_data,
                                                   call_pure_results)
         preamble_data.forget_optimization_info()
+        end_label = ResOperation(rop.LABEL, start_state.end_args)
         loop_data = compile.UnrolledLoopData(end_label, jump_op,
                                              ops + [jump_op], start_state)
         _, ops = self._do_optimize_loop(loop_data, call_pure_results)
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
@@ -71,14 +71,14 @@
     
     def optimize_preamble(self, start_label, end_label, ops):
         self._check_no_forwarding([[start_label, end_label], ops])
-        self.optimizer.propagate_all_forward(start_label.getarglist(), ops)
+        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)
+        self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops)
         return None, self.optimizer._newoperations
 
     def random_garbage(self):
@@ -186,7 +186,7 @@
         infos = {}
         for arg in end_args:
             infos[arg] = self.optimizer.getinfo(arg)
-        return ExportedState(inparg_mapping, virtual_state, infos,
+        return ExportedState(end_args, inparg_mapping, virtual_state, infos,
                              sb.short_boxes)
 
 
@@ -696,8 +696,9 @@
     * short boxes - a mapping op -> preamble_op
     """
     
-    def __init__(self, inputarg_mapping, virtual_state, exported_infos,
-                 short_boxes):
+    def __init__(self, end_args, inputarg_mapping, virtual_state,
+                 exported_infos, short_boxes):
+        self.end_args = end_args
         self.inputarg_mapping = inputarg_mapping
         self.virtual_state = virtual_state
         self.exported_infos = exported_infos
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -92,6 +92,9 @@
     def getarglist(self):
         raise NotImplementedError
 
+    def getarglist_copy(self):
+        return self.getarglist()
+
     def getarg(self, i):
         raise NotImplementedError
 
@@ -131,7 +134,7 @@
         from rpython.jit.metainterp.history import DONT_CHANGE
         
         if args is None:
-            args = self.getarglist()
+            args = self.getarglist_copy()
         if descr is None:
             descr = self.getdescr()
         if descr is DONT_CHANGE:
@@ -591,6 +594,9 @@
     def getarglist(self):
         return self._args
 
+    def getarglist_copy(self):
+        return self._args[:]
+
     def numargs(self):
         return len(self._args)
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to