[pypy-commit] pypy default: (cfbolz, arigo)
arigo
noreply at buildbot.pypy.org
Sat Apr 26 14:55:46 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r71004:5d641e103b00
Date: 2014-04-26 14:54 +0200
http://bitbucket.org/pypy/pypy/changeset/5d641e103b00/
Log: (cfbolz, arigo)
Pfff. Found and fixed the issue with unrolling logic.
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
@@ -5884,6 +5884,25 @@
"""
self.optimize_loop(ops, expected)
+ def test_bug_unroll(self):
+ ops = """
+ [p0]
+ i2 = getfield_gc_pure(p0, descr=immut_intval)
+ p1 = new_with_vtable(ConstClass(intobj_immut_vtable))
+ setfield_gc(p1, 1242, descr=immut_intval)
+ jump(p1)
+ """
+ preamble = """
+ [p0]
+ i2 = getfield_gc_pure(p0, descr=immut_intval)
+ jump()
+ """
+ expected = """
+ []
+ jump()
+ """
+ self.optimize_loop(ops, expected, preamble)
+
def test_immutable_constantfold_recursive(self):
ops = """
[]
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
@@ -180,10 +180,11 @@
self.optimizer.clear_newoperations()
for i in range(len(original_jump_args)):
+ srcbox = jump_args[i]
if values[i].is_virtual():
- values[i].force_box(self.optimizer)
- if original_jump_args[i] is not jump_args[i]:
- op = ResOperation(rop.SAME_AS, [jump_args[i]], original_jump_args[i])
+ srcbox = values[i].force_box(self.optimizer)
+ if original_jump_args[i] is not srcbox:
+ op = ResOperation(rop.SAME_AS, [srcbox], original_jump_args[i])
self.optimizer.emit_operation(op)
inputarg_setup_ops = self.optimizer.get_newoperations()
More information about the pypy-commit
mailing list