aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-09-11 10:34:41 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-09-11 10:34:41 +0200
commit26d815a3e587ac04dbd63eec3fb5aecb04db7242 (patch)
tree5b032c0adc701307f94217840e497ba3f0f66ffb /gcc
parent6d5093dad6a4927d23a914300605e76dd00c7a15 (diff)
downloadgcc-26d815a3e587ac04dbd63eec3fb5aecb04db7242.zip
gcc-26d815a3e587ac04dbd63eec3fb5aecb04db7242.tar.gz
gcc-26d815a3e587ac04dbd63eec3fb5aecb04db7242.tar.bz2
re PR tree-optimization/91723 (builtin fma is not optimized or vectorized as *+)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-fma-3.c17
-rw-r--r--gcc/tree-vect-stmts.c2
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 360e606..33b4386 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8ef8062..d4488b6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..b231a32
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-fma-3.c
@@ -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 } } } */
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index dd9d45a..edc7e0d 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -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,