Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78972:58f957a4e8fb
Date: 2015-08-13 17:06 +0200
http://bitbucket.org/pypy/pypy/changeset/58f957a4e8fb/

Log:    (fijal, arigo) change subtle order issues

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
@@ -161,9 +161,11 @@
                 subbox = optforce.force_box(fld)
                 setfieldop = ResOperation(rop.SETFIELD_GC, [op, subbox],
                                           descr=flddescr)
-                optforce._emit_operation(setfieldop)
-                if optforce.optheap is not None:
-                    optforce.optheap.register_dirty_field(flddescr, op, self)
+                self._fields[i] = None
+                optforce.optheap.propagate_forward(setfieldop)
+                #optforce._emit_operation(setfieldop)
+                #if optforce.optheap is not None:
+                #    optforce.optheap.register_dirty_field(flddescr, op, self)
 
     def _visitor_walk_recursive(self, instbox, visitor, optimizer):
         lst = self.vdescr.get_all_fielddescrs()
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -823,8 +823,8 @@
         i3 = getfield_gc_i(p2, descr=valuedescr)
         escape_n(i3)
         p4 = new_with_vtable(descr=nodesize)
+        p1sub = new_with_vtable(descr=nodesize2)
         setfield_gc(p4, i1, descr=valuedescr)
-        p1sub = new_with_vtable(descr=nodesize2)
         setfield_gc(p1sub, i1, descr=valuedescr)
         setfield_gc(p4, p1sub, descr=nextdescr)
         jump(i1, p4)
@@ -851,8 +851,8 @@
         i3 = getfield_gc_i(p3sub, descr=valuedescr)
         escape_n(i3)
         p2sub = new_with_vtable(descr=nodesize2)
+        setfield_gc(p2, p2sub, descr=nextdescr)
         setfield_gc(p2sub, i1, descr=valuedescr)
-        setfield_gc(p2, p2sub, descr=nextdescr)
         i4 = same_as_i(i1)
         jump(i1, p2, p2sub, i4)
         """
@@ -1217,10 +1217,10 @@
         i1 = int_add(i0, 1)
         p1 = new_with_vtable(descr=nodesize2)
         p2 = new_with_vtable(descr=nodesize2)
+        setfield_gc(p2, p1, descr=nextdescr)
+        setfield_gc(p0, p1, descr=nextdescr)
         setfield_gc(p2, i1, descr=valuedescr)
-        setfield_gc(p2, p1, descr=nextdescr)
         setfield_gc(p1, p2, descr=nextdescr)
-        setfield_gc(p0, p1, descr=nextdescr)
         jump(p1)
         """
         loop = """
@@ -1230,10 +1230,10 @@
         i1 = int_add(i0, 1)
         p1 = new_with_vtable(descr=nodesize2)
         p2 = new_with_vtable(descr=nodesize2)
+        setfield_gc(p2, p1, descr=nextdescr)
+        setfield_gc(p0, p1, descr=nextdescr)
         setfield_gc(p2, i1, descr=valuedescr)
-        setfield_gc(p2, p1, descr=nextdescr)
         setfield_gc(p1, p2, descr=nextdescr)
-        setfield_gc(p0, p1, descr=nextdescr)
         jump(p1)
         """
         self.optimize_loop(ops, loop, preamble)
@@ -1288,8 +1288,8 @@
         i28 = int_add(i0, 1)
         i29 = int_add(i0, 2)
         p30 = new_with_vtable(descr=nodesize)
+        setfield_gc(p3, p30, descr=nextdescr)
         setfield_gc(p30, i28, descr=valuedescr)
-        setfield_gc(p3, p30, descr=nextdescr)
         #p46 = same_as(p30) # This same_as should be killed by backend
         jump(i29, p30, p3)
         """
@@ -1298,8 +1298,8 @@
         i28 = int_add(i0, 1)
         i29 = int_add(i0, 2)
         p30 = new_with_vtable(descr=nodesize)
+        setfield_gc(p3, p30, descr=nextdescr)
         setfield_gc(p30, i28, descr=valuedescr)
-        setfield_gc(p3, p30, descr=nextdescr)
         jump(i29, p30, p3)
         """
         self.optimize_loop(ops, expected, preamble)
@@ -2706,8 +2706,8 @@
         guard_true(i3) [p1, p4]
         i4 = int_neg(i2)
         p2 = new_with_vtable(descr=nodesize)
+        setfield_gc(p1, p2, descr=nextdescr)
         setfield_gc(p2, p4, descr=nextdescr)
-        setfield_gc(p1, p2, descr=nextdescr)
         #i101 = same_as(i4)
         jump(p1, i2, i4, p4) #, i101)
         """
@@ -2715,8 +2715,8 @@
         [p1, i2, i4, p4] #, i5]
         guard_true(i4) [p1, p4]
         p2 = new_with_vtable(descr=nodesize)
+        setfield_gc(p1, p2, descr=nextdescr)
         setfield_gc(p2, p4, descr=nextdescr)
-        setfield_gc(p1, p2, descr=nextdescr)
         jump(p1, i2, 1, p4) #, i5)
         """
         self.optimize_loop(ops, expected, preamble)
@@ -3953,9 +3953,9 @@
         p3 = force_token()
         #
         p2 = new_with_vtable(descr=vref_descr)
+        setfield_gc(p0, p2, descr=nextdescr)
+        setfield_gc(p2, NULL, descr=virtualforceddescr)
         setfield_gc(p2, p3, descr=virtualtokendescr)
-        setfield_gc(p2, NULL, descr=virtualforceddescr)
-        setfield_gc(p0, p2, descr=nextdescr)
         #
         call_may_force_n(i1, descr=mayforcevirtdescr)
         guard_not_forced() [i1]
@@ -3964,9 +3964,9 @@
         setfield_gc(p2, NULL, descr=virtualtokendescr)
         p1 = new_with_vtable(descr=nodesize)
         p1b = new_with_vtable(descr=nodesize)
+        setfield_gc(p2, p1, descr=virtualforceddescr)
         setfield_gc(p1b, 252, descr=valuedescr)
         setfield_gc(p1, p1b, descr=nextdescr)
-        setfield_gc(p2, p1, descr=virtualforceddescr)
         jump(p0, i1)
         """
         self.optimize_loop(ops, expected, expected)
@@ -3993,9 +3993,9 @@
         p3 = force_token()
         #
         p2 = new_with_vtable(descr=vref_descr)
+        setfield_gc(p0, p2, descr=nextdescr)
+        setfield_gc(p2, NULL, descr=virtualforceddescr)
         setfield_gc(p2, p3, descr=virtualtokendescr)
-        setfield_gc(p2, NULL, descr=virtualforceddescr)
-        setfield_gc(p0, p2, descr=nextdescr)
         #
         call_may_force_n(i1, descr=mayforcevirtdescr)
         guard_not_forced() [p2, i1]
@@ -4004,9 +4004,9 @@
         setfield_gc(p2, NULL, descr=virtualtokendescr)
         p1 = new_with_vtable(descr=nodesize)
         p1b = new_with_vtable(descr=nodesize)
+        setfield_gc(p2, p1, descr=virtualforceddescr)
         setfield_gc(p1b, i1, descr=valuedescr)
         setfield_gc(p1, p1b, descr=nextdescr)
-        setfield_gc(p2, p1, descr=virtualforceddescr)
         jump(p0, i1)
         """
         # the point of this test is that 'i1' should show up in the fail_args
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -121,7 +121,7 @@
             start_label.getarglist() + self.short_preamble_producer.used_boxes,
             jump_args + extra_jump_args)
         jump_op = ResOperation(rop.JUMP, jump_args)
-        self.optimizer._newoperations.append(jump_op)
+        self.optimizer.send_extra_operation(jump_op)
         return (UnrollInfo(self.short_preamble_producer.build_short_preamble(),
                            label_args,
                            self.short_preamble_producer.extra_same_as),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to