Commit 26d815a3 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 6d5093da
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.
......
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.
......
/* 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 } } } */
......@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment