Author: Richard Plangger <planri...@gmail.com> Branch: Changeset: r88798:5055d03e5f24 Date: 2016-12-01 17:36 +0100 http://bitbucket.org/pypy/pypy/changeset/5055d03e5f24/
Log: disable sum accumulation for floats as well (pointed out by armin, thanks) 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 @@ -978,9 +978,7 @@ self.right is other.right class AccumPack(Pack): - SUPPORTED = { rop.FLOAT_ADD: '+', - rop.INT_ADD: '+', - } + SUPPORTED = { rop.INT_ADD: '+', } def __init__(self, nodes, operator, position): Pack.__init__(self, nodes) diff --git a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py --- a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py @@ -197,7 +197,7 @@ f13 = float_add(f12, f11) """) savings = self.savings(loop1) - assert savings == 2 + assert savings == -2 @py.test.mark.parametrize("bytes,s", [(4,0),(8,0)]) def test_sum_float_to_int(self, bytes, s): diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py --- a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py @@ -1162,32 +1162,32 @@ vopt = self.vectorize(loop,1) self.assert_equal(loop, self.parse_loop(opt)) - def test_accumulate_basic(self): - trace = """ - [p0, i0, f0] - f1 = raw_load_f(p0, i0, descr=floatarraydescr) - f2 = float_add(f0, f1) - i1 = int_add(i0, 8) - i2 = int_lt(i1, 100) - guard_true(i2) [p0, i0, f2] - jump(p0, i1, f2) - """ - trace_opt = """ - [p0, i0, f0] - v6[0xf64] = vec_f() - v7[2xf64] = vec_float_xor(v6[0xf64], v6[0xf64]) - v2[2xf64] = vec_pack_f(v7[2xf64], f0, 0, 1) - label(p0, i0, v2[2xf64]) - i1 = int_add(i0, 16) - i2 = int_lt(i1, 100) - guard_true(i2) [p0, i0, v2[2xf64]] - v1[2xf64] = vec_load_f(p0, i0, 1, 0, descr=floatarraydescr) - v3[2xf64] = vec_float_add(v2[2xf64], v1[2xf64]) - jump(p0, i1, v3[2xf64]) - """ - loop = self.parse_loop(trace) - opt = self.vectorize(loop) - self.assert_equal(loop, self.parse_loop(trace_opt)) + #def test_accumulate_basic(self): + # trace = """ + # [p0, i0, f0] + # f1 = raw_load_f(p0, i0, descr=floatarraydescr) + # f2 = float_add(f0, f1) + # i1 = int_add(i0, 8) + # i2 = int_lt(i1, 100) + # guard_true(i2) [p0, i0, f2] + # jump(p0, i1, f2) + # """ + # trace_opt = """ + # [p0, i0, f0] + # v6[0xf64] = vec_f() + # v7[2xf64] = vec_float_xor(v6[0xf64], v6[0xf64]) + # v2[2xf64] = vec_pack_f(v7[2xf64], f0, 0, 1) + # label(p0, i0, v2[2xf64]) + # i1 = int_add(i0, 16) + # i2 = int_lt(i1, 100) + # guard_true(i2) [p0, i0, v2[2xf64]] + # v1[2xf64] = vec_load_f(p0, i0, 1, 0, descr=floatarraydescr) + # v3[2xf64] = vec_float_add(v2[2xf64], v1[2xf64]) + # jump(p0, i1, v3[2xf64]) + # """ + # loop = self.parse_loop(trace) + # opt = self.vectorize(loop) + # self.assert_equal(loop, self.parse_loop(trace_opt)) def test_element_f45_in_guard_failargs(self): trace = self.parse_loop(""" diff --git a/rpython/jit/metainterp/optimizeopt/vector.py b/rpython/jit/metainterp/optimizeopt/vector.py --- a/rpython/jit/metainterp/optimizeopt/vector.py +++ b/rpython/jit/metainterp/optimizeopt/vector.py @@ -842,7 +842,8 @@ oplist.append(vecop) opnum = rop.VEC_INT_XOR if datatype == FLOAT: - opnum = rop.VEC_FLOAT_XOR + # see PRECISION loss below + raise NotImplementedError vecop = VecOperation(opnum, [vecop, vecop], vecop, count) oplist.append(vecop) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit