Author: Alex Gaynor <alex.gay...@gmail.com> Branch: dynamic-specialized-tuple Changeset: r54730:4a8980d38df8 Date: 2012-04-24 13:38 -0400 http://bitbucket.org/pypy/pypy/changeset/4a8980d38df8/
Log: include the fields in forced stuff on an array 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 @@ -5081,6 +5081,25 @@ """ self.optimize_loop(ops, expected) + def test_forced_gcstruct_as_array(self): + ops = """ + [i0] + p0 = new_array(3, descr=gcstructarraydescr) + setfield_gc(p0, i0, descr=gcstructarray_fielddescr) + escape(p0) + i1 = getfield_gc(p0, descr=gcstructarray_fielddescr) + finish(i1) + """ + expected = """ + [i0] + p0 = new_array(3, descr=gcstructarraydescr) + setfield_gc(p0, i0, descr=gcstructarray_fielddescr) + escape(p0) + i1 = getfield_gc(p0, descr=gcstructarray_fielddescr) + finish(i1) + """ + self.optimize_loop(ops, expected) + class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin): pass diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py b/pypy/jit/metainterp/optimizeopt/virtualize.py --- a/pypy/jit/metainterp/optimizeopt/virtualize.py +++ b/pypy/jit/metainterp/optimizeopt/virtualize.py @@ -278,6 +278,14 @@ self.source_op.name = 'FORCE ' + self.source_op.name optforce.emit_operation(self.source_op) self.box = box = self.source_op.result + if self._fields: + for ofs, value in self._fields.iteritems(): + if value.is_null(): + continue + subbox = value.force_box(optforce) + op = ResOperation(rop.SETFIELD_GC, [box, subbox], None, descr=ofs) + optforce.emit_operation(op) + for index in range(len(self._items)): subvalue = self._items[index] if subvalue is not self.constvalue: _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit