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

Reply via email to