[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