[pypy-commit] pypy optresult-unroll: hack hack hack

fijal noreply at buildbot.pypy.org
Tue Aug 11 16:56:54 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78913:838e242ff7a9
Date: 2015-08-11 16:38 +0200
http://bitbucket.org/pypy/pypy/changeset/838e242ff7a9/

Log:	hack hack hack

diff --git a/rpython/jit/metainterp/optimizeopt/pure.py b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -146,8 +146,11 @@
             old_op = self.optimizer._newoperations[pos]
             if self.optimize_call_pure(op, old_op):
                 return
-        for old_op in self.extra_call_pure:
+        for i, old_op in enumerate(self.extra_call_pure):
             if self.optimize_call_pure(op, old_op):
+                if isinstance(old_op, PreambleOp):
+                    old_op = self.optimizer.force_op_from_preamble(old_op)
+                    self.extra_call_pure[i] = old_op
                 return
 
         # replace CALL_PURE with just CALL
@@ -181,6 +184,9 @@
             # all identical
             # this removes a CALL_PURE that has the same (non-constant)
             # arguments as a previous CALL_PURE.
+            if isinstance(old_op, PreambleOp):
+                # xxx obscure, it's dealt with in the caller
+                old_op = old_op.op
             self.make_equal_to(op, old_op)
             self.last_emitted_operation = REMOVED
             return True
@@ -226,11 +232,9 @@
             if op.is_ovf() and ops[i + 1].getopnum() == rop.GUARD_NO_OVERFLOW:
                 sb.add_pure_op(op)
         for i in self.call_pure_positions:
-            yyy
             op = ops[i]
-            assert op.getopnum() == rop.CALL
-            op = op.copy_and_change(rop.CALL_PURE)
-            sb.add_potential(op)
+            assert op.is_call()
+            sb.add_pure_op(op)
 
 dispatch_opt = make_dispatcher_method(OptPure, 'optimize_',
                                       default=OptPure.optimize_default)
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
@@ -20,6 +20,12 @@
         self.op = op
         self.preamble_op = preamble_op
 
+    def numargs(self):
+        return self.op.numargs()
+
+    def getarglist(self):
+        return self.op.getarglist()
+
     def getarg(self, i):
         return self.op.getarg(i)
 
@@ -68,7 +74,10 @@
         if optpure is None:
             return
         op = self.res
-        opt.pure(op.getopnum(), PreambleOp(op, preamble_op))
+        if op.is_call():
+            optpure.extra_call_pure.append(PreambleOp(op, preamble_op))
+        else:
+            opt.pure(op.getopnum(), PreambleOp(op, preamble_op))
 
     def __repr__(self):
         return "PureOp(%r)" % (self.res,)
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
@@ -3653,7 +3653,6 @@
         setfield_gc(p1, i1, descr=valuedescr)
         i3 = call_assembler_i(i1, descr=asmdescr)
         setfield_gc(p1, i3, descr=valuedescr)
-        i143 = same_as(i3) # Should be killed by backend
         jump(p1, i4, i3)
         '''
         self.optimize_loop(ops, ops, preamble)
@@ -3678,18 +3677,16 @@
         jump(p1, i4, i3)
         '''
         expected = '''
-        [p1, i4, i3, i5]
-        setfield_gc(p1, i5, descr=valuedescr)
-        jump(p1, i3, i5, i5)
+        [p1, i4, i3]
+        setfield_gc(p1, i3, descr=valuedescr)
+        jump(p1, i3, i3)
         '''
         preamble = '''
         [p1, i1, i4]
         setfield_gc(p1, i1, descr=valuedescr)
         i3 = call_i(p1, descr=elidablecalldescr)
         setfield_gc(p1, i3, descr=valuedescr)
-        i148 = same_as(i3)
-        i147 = same_as(i3)
-        jump(p1, i4, i3, i148)
+        jump(p1, i4, i3)
         '''
         self.optimize_loop(ops, expected, preamble)
 
@@ -3706,9 +3703,9 @@
         jump(p1, i4, i3)
         '''
         expected = '''
-        [p1, i4, i3, i5]
-        setfield_gc(p1, i5, descr=valuedescr)
-        jump(p1, i3, i5, i5)
+        [p1, i4, i3]
+        setfield_gc(p1, i3, descr=valuedescr)
+        jump(p1, i3, i3)
         '''
         preamble = '''
         [p1, i1, i4]
@@ -3716,9 +3713,9 @@
         i3 = call_i(p1, descr=elidable2calldescr)
         guard_no_exception() []
         setfield_gc(p1, i3, descr=valuedescr)
-        i148 = same_as(i3)
-        i147 = same_as(i3)
-        jump(p1, i4, i3, i148)
+        #i148 = same_as(i3)
+        #i147 = same_as(i3)
+        jump(p1, i4, i3) #, i148)
         '''
         self.optimize_loop(ops, expected, preamble)
 
@@ -3957,7 +3954,7 @@
         [p0, i1]
         p3 = force_token()
         #
-        p2 = new_with_vtable(ConstClass(jit_virtual_ref_vtable))
+        p2 = new_with_vtable(descr=vref_descr)
         setfield_gc(p2, NULL, descr=virtualforceddescr)
         setfield_gc(p2, p3, descr=virtualtokendescr)
         setfield_gc(p0, p2, descr=nextdescr)
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
@@ -21,6 +21,7 @@
     def force_op_from_preamble(self, preamble_op):
         if isinstance(preamble_op, PreambleOp):
             op = preamble_op.op
+            self.optimizer.inparg_dict[op] = None # XXX ARGH
             self.optunroll.short_preamble_producer.use_box(op, self)
             self.optunroll.potential_extra_ops[op] = preamble_op
             return op
@@ -34,12 +35,6 @@
             if i is not None:
                 self.setinfo_from_preamble(item, i, infos)
 
-    def is_inputarg(self, op):
-        if self.optunroll.short_preamble_producer is None:
-            return op in self.inparg_dict
-        return (op in self.inparg_dict or
-                op in self.optunroll.short_preamble_producer.used_boxes)
-
     def setinfo_from_preamble(self, op, preamble_info, exported_infos):
         op = self.get_box_replacement(op)
         if isinstance(preamble_info, info.PtrInfo):
@@ -76,7 +71,6 @@
     become the preamble or entry bridge (don't think there is a
     distinction anymore)"""
 
-    ops_to_import = None
     short_preamble_producer = None
 
     def __init__(self, metainterp_sd, jitdriver_sd, optimizations):


More information about the pypy-commit mailing list