[pypy-commit] pypy optresult-unroll: fix a case of heapcache - now breaks some tests because it produces less good code, but seems to work, fixing

fijal noreply at buildbot.pypy.org
Fri Aug 28 14:10:32 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79275:cfa79aa0c03f
Date: 2015-08-28 14:10 +0200
http://bitbucket.org/pypy/pypy/changeset/cfa79aa0c03f/

Log:	fix a case of heapcache - now breaks some tests because it produces
	less good code, but seems to work, fixing

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
@@ -123,7 +123,7 @@
                 return constptr
             #
             op.set_forwarded(None)
-            optforce._emit_operation(op)
+            optforce.emit_operation(op)
             newop = optforce.getlastop()
             op.set_forwarded(newop)
             newop.set_forwarded(self)
@@ -187,10 +187,7 @@
                 setfieldop = ResOperation(rop.SETFIELD_GC, [op, subbox],
                                           descr=flddescr)
                 self._fields[i] = None
-                if optforce.optheap is not None:
-                    optforce.optheap.propagate_forward(setfieldop)
-                else:
-                    optforce.emit_operation(setfieldop)
+                optforce.emit_operation(setfieldop)
 
     def _force_at_the_end_of_preamble(self, op, optforce, rec):
         if self._fields is None:
@@ -456,10 +453,7 @@
                                  [op, ConstInt(i), subbox],
                                   descr=arraydescr)
             self._items[i] = None
-            if optforce.optheap is not None:
-                optforce.optheap.propagate_forward(setop)
-            else:
-                optforce.emit_operation(setop)
+            optforce.emit_operation(setop)
         optforce.pure_from_args(rop.ARRAYLEN_GC, [op], ConstInt(len(self._items)))
 
     def setitem(self, descr, index, struct, op, cf=None, optheap=None):
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -146,6 +146,9 @@
     def getlastop(self):
         return self.optimizer.getlastop()
 
+    def force_box(self, box):
+        return self.optimizer.force_box(box)
+
     def replace_op_with(self, op, newopnum, args=None, descr=None):
         return self.optimizer.replace_op_with(op, newopnum, args, descr)
 
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
@@ -827,8 +827,8 @@
         escape_n(i3)
         p4 = new_with_vtable(descr=nodesize)
         p1sub = new_with_vtable(descr=nodesize2)
+        setfield_gc(p1sub, i1, descr=valuedescr)
         setfield_gc(p4, i1, descr=valuedescr)
-        setfield_gc(p1sub, i1, descr=valuedescr)
         setfield_gc(p4, p1sub, descr=nextdescr)
         jump(i1, p4)
         """
@@ -3971,9 +3971,9 @@
         p3 = force_token()
         #
         p2 = new_with_vtable(descr=vref_descr)
+        setfield_gc(p2, p3, descr=virtualtokendescr)
+        setfield_gc(p2, NULL, descr=virtualforceddescr)
         setfield_gc(p0, p2, descr=nextdescr)
-        setfield_gc(p2, NULL, descr=virtualforceddescr)
-        setfield_gc(p2, p3, descr=virtualtokendescr)
         #
         call_may_force_n(i1, descr=mayforcevirtdescr)
         guard_not_forced() [i1]
@@ -3982,9 +3982,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)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -265,7 +265,8 @@
 
     def _enum(self, virtual_state):
         for s in self.fieldstate:
-            s.enum(virtual_state)
+            if s:
+                s.enum(virtual_state)
 
     def debug_header(self, indent):
         debug_print(indent + 'VArrayStateInfo(%d):' % self.position)
@@ -573,6 +574,8 @@
 
     def make_inputargs(self, inputargs, optimizer, force_boxes=False,
                        append_virtuals=False):
+        if optimizer.optearlyforce:
+            optimizer = optimizer.optearlyforce
         assert len(inputargs) == len(self.state)
         boxes = [None] * self.numnotvirtuals
 


More information about the pypy-commit mailing list