[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