Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79328:00a0ca84a79d
Date: 2015-08-31 19:12 +0200
http://bitbucket.org/pypy/pypy/changeset/00a0ca84a79d/

Log:    finish the weird modify-short-preamble-in-place

diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py 
b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -344,7 +344,32 @@
 empty_info = EmptyInfo()
 
 class AbstractShortPreambleBuilder(object):
-    pass
+    def use_box(self, box, preamble_op, optimizer=None):
+        for arg in preamble_op.getarglist():
+            if isinstance(arg, Const):
+                continue
+            if isinstance(arg, AbstractInputArg):
+                info = arg.get_forwarded()
+                if info is not None and info is not empty_info:
+                    info.make_guards(arg, self.short)
+            elif arg.get_forwarded() is None:
+                pass
+            else:
+                self.short.append(arg)
+                info = arg.get_forwarded()
+                if info is not empty_info:
+                    info.make_guards(arg, self.short)
+                arg.set_forwarded(None)
+        self.short.append(preamble_op)
+        if preamble_op.is_ovf():
+            self.short.append(ResOperation(rop.GUARD_NO_OVERFLOW, [], None))
+        info = preamble_op.get_forwarded()
+        preamble_op.set_forwarded(None)
+        if optimizer is not None:
+            optimizer.setinfo_from_preamble(box, info, None)
+        if info is not empty_info:
+            info.make_guards(preamble_op, self.short)
+        return preamble_op
 
 class ShortPreambleBuilder(AbstractShortPreambleBuilder):
     """ ShortPreambleBuilder is used during optimizing of the peeled loop,
@@ -372,33 +397,6 @@
         self.extra_same_as = []
         self.short_inputargs = short_inputargs
 
-    def use_box(self, box, preamble_op, optimizer=None):
-        for arg in preamble_op.getarglist():
-            if isinstance(arg, Const):
-                continue
-            if isinstance(arg, AbstractInputArg):
-                info = arg.get_forwarded()
-                if info is not None and info is not empty_info:
-                    info.make_guards(arg, self.short)
-            elif arg.get_forwarded() is None:
-                pass
-            else:
-                self.short.append(arg)
-                info = arg.get_forwarded()
-                if info is not empty_info:
-                    info.make_guards(arg, self.short)
-                arg.set_forwarded(None)
-        self.short.append(preamble_op)
-        if preamble_op.is_ovf():
-            self.short.append(ResOperation(rop.GUARD_NO_OVERFLOW, [], None))
-        info = preamble_op.get_forwarded()
-        preamble_op.set_forwarded(None)
-        if optimizer is not None:
-            optimizer.setinfo_from_preamble(box, info, None)
-        if info is not empty_info:
-            info.make_guards(preamble_op, self.short)
-        return preamble_op
-
     def add_preamble_op(self, preamble_op):
         """ Notice that we're actually using the preamble_op, add it to
         label and jump
@@ -444,3 +442,8 @@
         self.sb.label_dict[op] = None
         self.label_args.append(op)
         self.jump_args.append(preamble_op.preamble_op)
+
+    def use_box(self, box, preamble_op, optimizer=None):
+        jump_op = self.short.pop()
+        AbstractShortPreambleBuilder.use_box(self, box, preamble_op, optimizer)
+        self.short.append(jump_op)
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
@@ -8372,9 +8372,9 @@
         expected = """
         [p1, p2]
         call_n(p2, descr=nonwritedescr)
+        ifoo = arraylen_gc(p1, descr=gcarraydescr) # killed
         p3 = new_with_vtable(descr=nodesize)
         setarrayitem_gc(p1, 3, p3, descr=gcarraydescr)
-        ifoo = arraylen_gc(p1, descr=gcarraydescr) # killed
         jump(p1, p3)
         """
         self.optimize_loop(ops, expected)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to