re PR tree-optimization/91723 (builtin fma is not optimized or vectorized as *+)
authorJakub Jelinek <jakub@redhat.com>
Wed, 11 Sep 2019 08:34:41 +0000 (10:34 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 11 Sep 2019 08:34:41 +0000 (10:34 +0200)
PR tree-optimization/91723
* tree-vect-stmts.c (vectorizable_call): Use types_compatible_p check
instead of pointer equality when checking if argument vectypes are
the same.

* gcc.dg/vect/vect-fma-3.c: New test.

From-SVN: r275634

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-fma-3.c [new file with mode: 0644]
gcc/tree-vect-stmts.c

index 360e606f47e3685624c858364c54a4f79954c0ce..33b43862051622bccbfb95fdbc5de4df43298188 100644 (file)
@@ -1,5 +1,10 @@
 2019-09-11  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/91723
+       * tree-vect-stmts.c (vectorizable_call): Use types_compatible_p check
+       instead of pointer equality when checking if argument vectypes are
+       the same.
+
        PR middle-end/91725
        * match.pd ((A / (1 << B)) -> (A >> B)): Call tree_nonzero_bits instead
        of get_nonzero_bits, only call it for integral types.
index 8ef80620c08a62de545bf7fc1830a0133be2c89e..d4488b6789c423a1f08f1d22bcf6b89445af058d 100644 (file)
@@ -1,5 +1,8 @@
 2019-09-11  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/91723
+       * gcc.dg/vect/vect-fma-3.c: New test.
+
        PR middle-end/91725
        * gcc.c-torture/compile/pr91725.c: New test.
 
diff --git a/gcc/testsuite/gcc.dg/vect/vect-fma-3.c b/gcc/testsuite/gcc.dg/vect/vect-fma-3.c
new file mode 100644 (file)
index 0000000..b231a32
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR tree-optimization/91723 */
+/* { dg-do compile { target { scalar_all_fma || { i?86-*-* x86_64-*-* } } } } */
+/* { dg-additional-options "-mfma" { target { i?86-*-* x86_64-*-* } } } */
+
+void
+foo (double *restrict r, const double *restrict a,
+     const double *restrict b, const double *restrict c)
+{
+  for (int i = 0; i < 1024; i++)
+    {
+      double x = __builtin_fma (a[i], b[i], c[i]);
+      x = __builtin_fma (a[i], b[i], x);
+      r[i] = x;
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target vect_double } } } */
index dd9d45a9547587d1d3499c857d60ee10642dccdf..edc7e0de4d3e3566ece216d83e1c2a09865e0556 100644 (file)
@@ -3308,7 +3308,7 @@ vectorizable_call (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
       if (!vectype_in)
        vectype_in = vectypes[i];
       else if (vectypes[i]
-              && vectypes[i] != vectype_in)
+              && !types_compatible_p (vectypes[i], vectype_in))
        {
          if (dump_enabled_p ())
            dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,