[pypy-commit] pypy vecopt: added test case for float_truediv (was not included in transformation), float_neg, float_abs

plan_rich noreply at buildbot.pypy.org
Tue May 26 10:42:47 CEST 2015


Author: Richard Plangger <rich at pasra.at>
Branch: vecopt
Changeset: r77559:39f5a5e73321
Date: 2015-05-26 08:37 +0200
http://bitbucket.org/pypy/pypy/changeset/39f5a5e73321/

Log:	added test case for float_truediv (was not included in
	transformation), float_neg, float_abs added float_abs, float_neg to
	resop as vector operations

diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vectorize.py
@@ -1190,6 +1190,26 @@
         except NotAVectorizeableLoop:
             pass
 
+    def test_truediv_abs_neg_float(self):
+        ops = """
+        [f9,p10,i11,p4,i12,p2,p5,p13,i14,p7,i15,p8,i16,f17,i18,i19]
+        guard_early_exit() [p8, p7, p5, p4, p2, f9, i12, i11, p10, i15, i14, p13]
+        f20 = raw_load(i16, i12, descr=floatarraydescr)
+        guard_not_invalidated() [p8, p7, p5, p4, p2, f20, None, i12, i11, p10, i15, i14, p13]
+        i23 = int_add(i12, 8)
+        f24 = float_truediv(f20, f17)
+        f25 = float_abs(f20)
+        f26 = float_neg(f20)
+        raw_store(i18, i15, f24, descr=floatarraydescr)
+        i26 = int_add(i14, 1)
+        i28 = int_add(i15, 8)
+        i29 = int_ge(i26, i19)
+        guard_false(i29) [p8, p7, p5, p4, p2, f20, i23, i28, None, p13]
+        jump(f20, p10, i11, p4, i23, p2, p5, p13, i26, p7, i28, p8, i16, f17, i18, i19)
+        """
+        opt = self.vectorize(self.parse_loop(ops))
+        self.debug_print_operations(opt.loop)
+
     def test_reduction_basic(self):
         trace = """
         [p0, p1, p2, p3, p4]
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
@@ -1032,6 +1032,7 @@
 
 INT_OP_TO_VOP = OpToVectorOp((PT_INT_GENERIC, PT_INT_GENERIC), INT_RES)
 FLOAT_OP_TO_VOP = OpToVectorOp((PT_FLOAT_GENERIC, PT_FLOAT_GENERIC), FLOAT_RES)
+FLOAT_SINGLE_ARG_OP_TO_VOP = OpToVectorOp((PT_FLOAT_GENERIC,), FLOAT_RES)
 
 ROP_ARG_RES_VECTOR = {
     rop.VEC_INT_ADD:     INT_OP_TO_VOP,
@@ -1046,6 +1047,9 @@
     rop.VEC_FLOAT_ADD:   FLOAT_OP_TO_VOP,
     rop.VEC_FLOAT_SUB:   FLOAT_OP_TO_VOP,
     rop.VEC_FLOAT_MUL:   FLOAT_OP_TO_VOP,
+    rop.VEC_FLOAT_TRUEDIV:   FLOAT_OP_TO_VOP,
+    rop.VEC_FLOAT_ABS:   FLOAT_SINGLE_ARG_OP_TO_VOP,
+    rop.VEC_FLOAT_NEG:   FLOAT_SINGLE_ARG_OP_TO_VOP,
     rop.VEC_FLOAT_EQ:    OpToVectorOp((PT_FLOAT_GENERIC,PT_FLOAT_GENERIC), INT_RES),
 
     rop.VEC_RAW_LOAD:         OpToVectorOp((), LOAD_RES, has_descr=True,
@@ -1091,7 +1095,7 @@
         op0 = pack.operations[0].getoperation()
         tovector = ROP_ARG_RES_VECTOR.get(op0.vector, None)
         if tovector is None:
-            raise NotImplementedError("vecop map entry missing. trans: pack -> vop")
+            raise NotImplementedError("missing vecop for '" + op0.getopname() + "'")
         oplist = []
         tovector.as_vector_operation(pack, self, oplist)
         return oplist
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
@@ -462,7 +462,9 @@
     'VEC_FLOAT_ADD/2',
     'VEC_FLOAT_SUB/2',
     'VEC_FLOAT_MUL/2',
-    'VEC_FLOAT_DIV/2',
+    'VEC_FLOAT_TRUEDIV/2',
+    'VEC_FLOAT_NEG/1',
+    'VEC_FLOAT_ABS/1',
     '_VEC_ARITHMETIC_LAST',
     'VEC_FLOAT_EQ/2',
 
@@ -744,7 +746,9 @@
     rop.FLOAT_ADD: rop.VEC_FLOAT_ADD,
     rop.FLOAT_SUB: rop.VEC_FLOAT_SUB,
     rop.FLOAT_MUL: rop.VEC_FLOAT_MUL,
-    rop.FLOAT_TRUEDIV: rop.VEC_FLOAT_DIV,
+    rop.FLOAT_TRUEDIV: rop.VEC_FLOAT_TRUEDIV,
+    rop.FLOAT_ABS: rop.VEC_FLOAT_ABS,
+    rop.FLOAT_NEG: rop.VEC_FLOAT_NEG,
     rop.FLOAT_EQ:  rop.VEC_FLOAT_EQ,
 
     rop.INT_SIGNEXT: rop.VEC_INT_SIGNEXT,


More information about the pypy-commit mailing list