[pypy-commit] pypy result-in-resops: sharing lists is not a good idea. ever

fijal noreply at buildbot.pypy.org
Fri Oct 26 13:28:31 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r58446:f84873f1f80a
Date: 2012-10-25 15:17 +0200
http://bitbucket.org/pypy/pypy/changeset/f84873f1f80a/

Log:	sharing lists is not a good idea. ever

diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -531,6 +531,11 @@
             for opt in reversed(self.optimizations):
                 opt.postprocess_op(orig_op)
             i += 1
+        # clean up
+        for op in self.loop.operations:
+            op._forwarded = None
+        for arg in self.loop.inputargs:
+            arg._forwarded = None
         self.loop.operations = self.get_newoperations()
         self.loop.quasi_immutable_deps = self.quasi_immutable_deps
         # accumulate counters
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -118,7 +118,7 @@
     def optimize_loop(self, ops, optops, results=None):
         loop = self.parse(ops, results=results)
         token = JitCellToken()
-        loop.operations = [create_resop(rop.LABEL, None, loop.inputargs, descr=TargetToken(token))] + \
+        loop.operations = [create_resop(rop.LABEL, None, loop.inputargs[:], descr=TargetToken(token))] + \
                           loop.operations
         if loop.operations[-1].getopnum() == rop.JUMP:
             loop.operations[-1]._descr = token
@@ -148,18 +148,18 @@
     def test_constant_propagate(self):
         ops = """
         [i]
-        guard_value(i, 2) []
+        guard_value(i, 2)
         i0 = int_add(i, 3)
         i1 = int_is_true(i0)
-        guard_true(i1) []
+        guard_true(i1)
         i2 = int_is_zero(i1)
-        guard_false(i2) []
-        guard_value(i0, 5) []
+        guard_false(i2)
+        guard_value(i0, 5)
         jump(i)
         """
         expected = """
         [i]
-        guard_value(i, 2) []
+        guard_value(i, 2)
         jump(2)
         """
         self.optimize_loop(ops, expected)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_util.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py
@@ -413,7 +413,7 @@
         from pypy.jit.metainterp.optimizeopt.util import equaloplists
         assert len(optimized.inputargs) == len(expected.inputargs)
         remap = {}
-        for box1, box2 in zip(optimized.inputargs, expected.inputargs):
+        for box1, box2 in zip(optimized.operations[0].getarglist(), expected.inputargs):
             #assert box1.__class__ == box2.__class__
             remap[box2] = box1
         assert equaloplists(optimized.operations,
@@ -501,7 +501,7 @@
 def convert_old_style_to_targets(loop, jump):
     newloop = TreeLoop(loop.name)
     newloop.inputargs = loop.inputargs
-    newloop.operations = [create_resop(rop.LABEL, None, loop.inputargs, descr=FakeDescr())] + \
+    newloop.operations = [create_resop(rop.LABEL, None, loop.inputargs[:], descr=FakeDescr())] + \
                       loop.operations
     if not jump:
         assert newloop.operations[-1].getopnum() == rop.JUMP


More information about the pypy-commit mailing list