[pypy-commit] pypy result-in-resops: some fixes

fijal noreply at buildbot.pypy.org
Tue Sep 25 17:03:14 CEST 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: result-in-resops
Changeset: r57578:8c16939c1313
Date: 2012-09-25 14:50 +0200
http://bitbucket.org/pypy/pypy/changeset/8c16939c1313/

Log:	some fixes

diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py
--- a/pypy/jit/metainterp/optimizeopt/heap.py
+++ b/pypy/jit/metainterp/optimizeopt/heap.py
@@ -360,7 +360,7 @@
                     assert itemindex >= 0
                 else:
                     assert 0
-                pendingfields.append((op.getdescr(), value.box,
+                pendingfields.append((op.getdescr(), value.op,
                                       fieldvalue.get_key_box(), itemindex))
             else:
                 cf.force_lazy_setfield(self)
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
@@ -1598,8 +1598,8 @@
         setfield_gc(p1, i1, descr=valuedescr)
         setfield_gc(p0, p1, descr=nextdescr)
         setfield_raw(i1, i1, descr=valuedescr)    # random op with side-effects
-        p2 = getfield_gc(p0, descr=nextdescr)
-        i2 = getfield_gc(p2, descr=valuedescr)
+        p2 = getfield_gc_p(p0, descr=nextdescr)
+        i2 = getfield_gc_i(p2, descr=valuedescr)
         setfield_gc(p0, NULL, descr=nextdescr)
         escape(i2)
         jump(p0, i1)
@@ -1641,7 +1641,7 @@
         [p1, i2, i3]
         p2 = new_with_vtable(ConstClass(node_vtable))
         setfield_gc(p1, p2, descr=nextdescr)
-        guard_true(i3) []
+        guard_true(i3) [p1]
         i4 = int_neg(i2)
         setfield_gc(p1, NULL, descr=nextdescr)
         jump(p1, i2, i4)
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_util.py b/pypy/jit/metainterp/optimizeopt/test/test_util.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_util.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_util.py
@@ -401,16 +401,12 @@
         return parse(s, self.cpu, self.namespace,
                      type_system=self.type_system,
                      boxkinds=boxkinds,
-                     results=results)
+                     results=results, process_guard=self.process_guard)
 
-    def invent_fail_descr(self, model, fail_args):
-        xxx
-        if fail_args is None:
-            return None
-        descr = Storage()
-        descr.rd_frame_info_list = resume.FrameInfo(None, "code", 11)
-        descr.rd_snapshot = resume.Snapshot(None, _sortboxes(fail_args))
-        return descr
+    def process_guard(self, guard_op):
+        fail_args = guard_op.get_extra("failargs")
+        guard_op.set_rd_frame_info_list(resume.FrameInfo(None, "code", 11))
+        guard_op.set_rd_snapshot(resume.Snapshot(None, _sortboxes(fail_args)))
 
     def assert_equal(self, optimized, expected, text_right=None):
         from pypy.jit.metainterp.optimizeopt.util import equaloplists
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
@@ -24,11 +24,6 @@
     def is_virtual(self):
         return not self.forced
 
-    def get_key_box(self):
-        if self.box is None:
-            return self.keybox
-        return self.box
-
     def force_box(self, optforce):
         if not self.forced:
             optforce.forget_numberings(self.op)
@@ -186,12 +181,12 @@
         return lst
 
     def get_args_for_fail(self, modifier):
-        if self.box is None and not modifier.already_seen_virtual(self.keybox):
+        if not self.forced and not modifier.already_seen_virtual(self.op):
             # checks for recursion: it is False unless
             # we have already seen the very same keybox
             lst = self._get_field_descr_list()
             fieldboxes = [self._fields[ofs].get_key_box() for ofs in lst]
-            modifier.register_virtual_fields(self.keybox, fieldboxes)
+            modifier.register_virtual_fields(self.op, fieldboxes)
             for ofs in lst:
                 fieldvalue = self._fields[ofs]
                 fieldvalue.get_args_for_fail(modifier)
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -300,7 +300,7 @@
         self._register_boxes(fieldboxes)
 
     def register_box(self, box):
-        if (isinstance(box, Box) and box not in self.liveboxes_from_env
+        if (not box.is_constant() and box not in self.liveboxes_from_env
                                  and box not in self.liveboxes):
             self.liveboxes[box] = UNASSIGNED
 
diff --git a/pypy/jit/tool/oparser.py b/pypy/jit/tool/oparser.py
--- a/pypy/jit/tool/oparser.py
+++ b/pypy/jit/tool/oparser.py
@@ -289,8 +289,6 @@
             r = create_resop_dispatch(opnum, result, args)
             if descr is not None:
                 r.setdescr(descr)
-            if self.process_guard and r.is_guard():
-                self.process_guard(r)
             return r
 
     def parse_result_op(self, line, num):
@@ -308,6 +306,8 @@
         self.vars[res] = opres
         if fail_args is not None:
             opres.set_extra("failargs", fail_args)
+        if self.process_guard and opres.is_guard():
+            self.process_guard(opres)
         return opres
 
     def parse_op_no_result(self, line):
@@ -315,6 +315,8 @@
         res = self.create_op(opnum, None, args, descr)
         if fail_args is not None:
             res.set_extra("failargs", fail_args)
+        if self.process_guard and res.is_guard():
+            self.process_guard(res)
         return res
 
     def parse_next_op(self, line, num):


More information about the pypy-commit mailing list