From: Jakub Jelinek Date: Mon, 21 Oct 2019 11:41:40 +0000 (+0200) Subject: backport: re PR tree-optimization/91723 (builtin fma is not optimized or vectorized... X-Git-Tag: releases/gcc-9.3.0~518 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=75a07394b1386542d2d9a0e08e6dfbc8782579fc;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/91723 (builtin fma is not optimized or vectorized as *+) Backported from mainline 2019-09-11 Jakub Jelinek 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: r277250 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c98ac09f6fa2..fc6fbfd3e2a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,13 @@ 2019-10-21 Jakub Jelinek Backported from mainline + 2019-09-11 Jakub Jelinek + + 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. + 2019-09-07 Jakub Jelinek PR tree-optimization/91665 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c6a1ad795a18..c72e2983701b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-10-21 Jakub Jelinek Backported from mainline + 2019-09-11 Jakub Jelinek + + PR tree-optimization/91723 + * gcc.dg/vect/vect-fma-3.c: New test. + 2019-09-07 Jakub Jelinek PR tree-optimization/91665 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 000000000000..b231a328fa59 --- /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 ad998aa5770e..8263889cbe41 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3279,7 +3279,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,