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