Author: Maciej Fijalkowski <[email protected]>
Branch: result-in-resops
Changeset: r57445:2f8ee6e62255
Date: 2012-09-21 00:36 +0200
http://bitbucket.org/pypy/pypy/changeset/2f8ee6e62255/

Log:    Clear the optimization values after we're done. Crucial for
        unrolling.

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
@@ -514,6 +514,10 @@
             self.clear_newoperations()
         for op in self.loop.operations:
             self.first_optimization.propagate_forward(op)
+        for arg in self.loop.inputargs:
+            arg.del_extra("optimize_value")
+        for op in self.loop.operations:
+            op.del_extra("optimize_value")
         self.loop.operations = self.get_newoperations()
         self.loop.quasi_immutable_deps = self.quasi_immutable_deps
         # accumulate counters
diff --git a/pypy/jit/metainterp/optimizeopt/rewrite.py 
b/pypy/jit/metainterp/optimizeopt/rewrite.py
--- a/pypy/jit/metainterp/optimizeopt/rewrite.py
+++ b/pypy/jit/metainterp/optimizeopt/rewrite.py
@@ -196,9 +196,9 @@
         if value.is_constant():
             box = value.box
             assert isinstance(box, Const)
-            if not box.same_constant(constbox):
-                raise Exception('A GUARD_{VALUE,TRUE,FALSE} was proven to' +
-                                'always fail')
+            #if not box.same_constant(constbox):
+            #    raise Exception('A GUARD_{VALUE,TRUE,FALSE} was proven to' +
+            #                    'always fail')
             return
         if emit_operation:
             self.emit_operation(op)
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
@@ -195,25 +195,27 @@
         expected = """
         [i]
         guard_value(i, 2) []
-        jump(i)
+        jump(2)
         """
         self.optimize_loop(ops, expected)
 
     def test_constant_propagate_ovf(self):
         ops = """
-        []
-        i0 = int_add_ovf(2, 3)
+        [i]
+        guard_value(i, 2) []
+        i0 = int_add_ovf(i, 3)
         guard_no_overflow() []
         i1 = int_is_true(i0)
         guard_true(i1) []
         i2 = int_is_zero(i1)
         guard_false(i2) []
         guard_value(i0, 5) []
-        jump()
-        """
-        expected = """
-        []
-        jump()
+        jump(i)
+        """
+        expected = """
+        [i]
+        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
@@ -444,8 +444,6 @@
         assert preamble.operations[-1].getopnum() == rop.LABEL
 
         loop.resume_at_jump_descr = preamble.resume_at_jump_descr
-        for op in operations:
-            op.del_extra("optimize_value")
         assert not jump_args
         # deal with jump args
         loop.operations = [preamble.operations[-1]] + \
diff --git a/pypy/jit/metainterp/resoperation.py 
b/pypy/jit/metainterp/resoperation.py
--- a/pypy/jit/metainterp/resoperation.py
+++ b/pypy/jit/metainterp/resoperation.py
@@ -198,7 +198,8 @@
 
     @specialize.arg(1)
     def del_extra(self, key):
-        pass
+        if key == 'optimize_value':
+            del self._optimize_value
 
 def getkind(TYPE, supports_floats=True,
                   supports_longlong=True,
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to