Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79280:c3486c27afbd Date: 2015-08-28 16:59 +0200 http://bitbucket.org/pypy/pypy/changeset/c3486c27afbd/
Log: test and a fix diff --git a/rpython/jit/metainterp/optimizeopt/earlyforce.py b/rpython/jit/metainterp/optimizeopt/earlyforce.py --- a/rpython/jit/metainterp/optimizeopt/earlyforce.py +++ b/rpython/jit/metainterp/optimizeopt/earlyforce.py @@ -26,7 +26,7 @@ not is_raw_free(op, opnum)): for arg in op.getarglist(): - self.optimizer.force_box(arg) + self.optimizer.force_box(arg, self) self.emit_operation(op) def setup(self): 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 @@ -146,8 +146,8 @@ def getlastop(self): return self.optimizer.getlastop() - def force_box(self, box): - return self.optimizer.force_box(box) + def force_box(self, box, optforce=None): + return self.optimizer.force_box(box, optforce) def replace_op_with(self, op, newopnum, args=None, descr=None): return self.optimizer.replace_op_with(op, newopnum, args, descr) @@ -336,8 +336,10 @@ return op return op.get_box_replacement(not_const) - def force_box(self, op): + def force_box(self, op, optforce=None): op = self.get_box_replacement(op) + if optforce is None: + optforce = self info = op.get_forwarded() if self.optunroll and self.optunroll.potential_extra_ops: # XXX hack @@ -351,7 +353,7 @@ if info is not None: if op.type == 'i' and info.is_constant(): return ConstInt(info.getint()) - return info.force_box(op, self) + return info.force_box(op, optforce) return op def is_inputarg(self, op): diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py --- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py @@ -579,9 +579,9 @@ i3 = getfield_gc_i(p3, descr=valuedescr) escape_n(i3) p1 = new_with_vtable(descr=nodesize) - setfield_gc(p1, i1, descr=valuedescr) p1sub = new_with_vtable(descr=nodesize2) setfield_gc(p1sub, i1, descr=valuedescr) + setfield_gc(p1, i1, descr=valuedescr) setfield_gc(p1, p1sub, descr=nextdescr) jump(i1, p1, p2) """ @@ -5785,5 +5785,25 @@ """ self.optimize_loop(ops, expected) + def test_force_virtual_write(self): + ops = """ + [i1, i2] + p1 = new(descr=ssize) + setfield_gc(p1, i1, descr=adescr) + setfield_gc(p1, i2, descr=bdescr) + call_n(123, p1, descr=writeadescr) + i3 = getfield_gc_i(p1, descr=bdescr) + finish(i3) + """ + expected = """ + [i1, i2] + p1 = new(descr=ssize) + setfield_gc(p1, i1, descr=adescr) + call_n(123, p1, descr=writeadescr) + setfield_gc(p1, i2, descr=bdescr) + finish(i2) + """ + self.optimize_loop(ops, expected) + class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin): pass _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit