[pypy-commit] pypy default: disable sum accumulation for floats as well (pointed out by armin, thanks)
plan_rich
pypy.commits at gmail.com
Thu Dec 1 12:01:52 EST 2016
Author: Richard Plangger <planrichi at 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)
More information about the pypy-commit
mailing list