Author: Richard Plangger <r...@pasra.at>
Branch: vecopt
Changeset: r78317:369284ff1423
Date: 2015-06-25 12:21 +0200
http://bitbucket.org/pypy/pypy/changeset/369284ff1423/

Log:    passing all scheduling tests again

diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py 
b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -250,16 +250,12 @@
             # prohibit the packing of signext calls that
             # cast to int16/int8.
             _, outsize = op0.cast_to()
-            self._prevent_signext(outsize, insize)
+            self.sched_data._prevent_signext(outsize, insize)
         if op0.getopnum() == rop.INT_MUL:
             if insize == 8 or insize == 1:
                 # see assembler for comment why
                 raise NotAProfitableLoop
 
-    def _prevent_signext(self, outsize, insize):
-        if outsize < 4 and insize != outsize:
-            raise NotAProfitableLoop
-
     def as_vector_operation(self, pack, sched_data, oplist):
         self.sched_data = sched_data
         self.preamble_ops = oplist
@@ -394,7 +390,7 @@
 
     def extend_int(self, vbox, newtype):
         vbox_cloned = newtype.new_vector_box(vbox.item_count)
-        self._prevent_signext(newtype.getsize(), vbox.getsize())
+        self.sched_data._prevent_signext(newtype.getsize(), vbox.getsize())
         op = ResOperation(rop.VEC_INT_SIGNEXT, 
                           [vbox, ConstInt(newtype.getsize())],
                           vbox_cloned)
@@ -676,6 +672,10 @@
         self.expanded_map = {}
         self.costmodel = costmodel
 
+    def _prevent_signext(self, outsize, insize):
+        if outsize < 4 and insize != outsize:
+            raise NotAProfitableLoop
+
     def as_vector_operation(self, pack, preproc_renamer):
         assert pack.opcount() > 1
         # properties that hold for the pack are:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_schedule.py 
b/rpython/jit/metainterp/optimizeopt/test/test_schedule.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_schedule.py
@@ -61,7 +61,7 @@
     def pack(self, loop, l, r):
         return Pack([Node(op,1+l+i) for i,op in 
enumerate(loop.operations[1+l:1+r])], None, None)
 
-    def schedule(self, loop_orig, packs, vec_reg_size=16, 
prepend_invariant=False, getvboxfunc=None):
+    def schedule(self, loop_orig, packs, vec_reg_size=16, 
prepend_invariant=False, overwrite_funcs=None):
         loop = get_model(False).ExtendedTreeLoop("loop")
         loop.original_jitcell_token = loop_orig.original_jitcell_token
         loop.inputargs = loop_orig.inputargs
@@ -69,8 +69,8 @@
         ops = []
         cm = X86_CostModel(0, vec_reg_size)
         vsd = VecScheduleData(vec_reg_size, cm)
-        if getvboxfunc is not None:
-            vsd.getvector_of_box = getvboxfunc
+        for name, overwrite in (overwrite_funcs or {}).items():
+            setattr(vsd, name, overwrite)
         renamer = Renamer()
         for pack in packs:
             if pack.opcount() == 1:
@@ -191,7 +191,10 @@
         var = self.find_input_arg('v10', loop1)
         def i1inv103204(v):
             return 0, var
-        loop2 = self.schedule(loop1, [pack1], prepend_invariant=True, 
getvboxfunc=i1inv103204)
+        loop2 = self.schedule(loop1, [pack1], prepend_invariant=True,
+                              overwrite_funcs = {
+                                'getvector_of_box': i1inv103204,
+                              })
         loop3 = self.parse("""
         v11[i32|2] = vec_int_signext(v10[i64|2], 4)
         """, False, additional_args=['v10[i64|2]'])
@@ -239,7 +242,12 @@
         pack2 = self.pack(loop1, 8, 16)
         pack3 = self.pack(loop1, 16, 24)
         pack4 = self.pack(loop1, 24, 32)
-        loop2 = self.schedule(loop1, [pack1,pack2,pack3,pack4])
+        def void(b,c):
+            pass
+        loop2 = self.schedule(loop1, [pack1,pack2,pack3,pack4],
+                              overwrite_funcs={
+                                  '_prevent_signext': void
+                              })
         loop3 = self.parse("""
         v10[f64|2] = vec_raw_load(p0, i1, 2, descr=double)
         v11[f64|2] = vec_raw_load(p0, i3, 2, descr=double)
diff --git a/rpython/jit/metainterp/optimizeopt/vectorize.py 
b/rpython/jit/metainterp/optimizeopt/vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/vectorize.py
@@ -76,10 +76,11 @@
                        ns))
         debug_stop("xxx-clock")
     except NotAVectorizeableLoop:
+        debug_stop("vec-opt-loop")
         # vectorization is not possible
         loop.operations = orig_ops
+    except NotAProfitableLoop:
         debug_stop("vec-opt-loop")
-    except NotAProfitableLoop:
         # cost model says to skip this loop
         loop.operations = orig_ops
     except Exception as e:
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -814,8 +814,8 @@
     rop.CAST_FLOAT_TO_INT: rop.VEC_CAST_FLOAT_TO_INT,
 
     # guard
-    #rop.GUARD_TRUE: rop.GUARD_TRUE,
-    #rop.GUARD_FALSE: rop.GUARD_FALSE,
+    rop.GUARD_TRUE: rop.GUARD_TRUE,
+    rop.GUARD_FALSE: rop.GUARD_FALSE,
 }
 
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to