Author: Alex Gaynor <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit