[pypy-commit] pypy optresult: a test, explanation and update TODO

fijal noreply at buildbot.pypy.org
Fri Jun 5 09:36:08 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult
Changeset: r77880:93f24053fbe7
Date: 2015-06-05 09:35 +0200
http://bitbucket.org/pypy/pypy/changeset/93f24053fbe7/

Log:	a test, explanation and update TODO

diff --git a/rpython/jit/metainterp/optimizeopt/TODO b/rpython/jit/metainterp/optimizeopt/TODO
--- a/rpython/jit/metainterp/optimizeopt/TODO
+++ b/rpython/jit/metainterp/optimizeopt/TODO
@@ -1,5 +1,3 @@
-* certain cases where VirtualArray or VirtualStructArray is forced (but
-  heap.py is not notified about fields being dirty)
 * arraylen_gc is not handling length bound optimization at all (we need to
   wait till unrolling for tests)
 * mark_opaque_pointer is ignored (which is fine until unrolling)
diff --git a/rpython/jit/metainterp/optimizeopt/info.py b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -374,7 +374,8 @@
                                               [op, ConstInt(index), subbox],
                                               descr=flddescr)
                     optforce._emit_operation(setfieldop)
-                    # XXX optforce.optheap
+                    # heapcache does not work for interiorfields
+                    # if it does, we would need a fix here
                 i += 1
 
     def visitor_walk_recursive(self, instbox, visitor, optimizer):
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
@@ -5571,5 +5571,18 @@
         """
         self.optimize_loop(ops, ops)
 
+    def test_dirty_array_of_structs_field_after_force(self):
+        ops = """
+        []
+        p0 = new_array_clear(1, descr=complexarraydescr)
+        setinteriorfield_gc(p0, 0, 0.0, descr=complexrealdescr)
+        setinteriorfield_gc(p0, 0, 0.0, descr=compleximagdescr)
+        escape_n(p0) # force
+        call_may_force_n(1, descr=mayforcevirtdescr)
+        f1 = getinteriorfield_gc_f(p0, 0, descr=compleximagdescr)
+        finish(f1)
+        """
+        self.optimize_loop(ops, ops)
+
 class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
     pass


More information about the pypy-commit mailing list