tree-optimization/98854 - avoid some PHI BB vectorization
This avoids cases of PHI node vectorization that just causes us to insert vector CTORs inside loops for values only required outside of the loop. 2021-01-27 Richard Biener <rguenther@suse.de> PR tree-optimization/98854 * tree-vect-slp.c (vect_build_slp_tree_2): Also build PHIs from scalars when the number of CTORs matches the number of children. * gcc.dg/vect/bb-slp-pr98854.c: New testcase.
This commit is contained in:
parent
3fd10728cb
commit
c91db798ec
|
@ -0,0 +1,24 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
double a[1024];
|
||||
|
||||
int bar();
|
||||
void foo (int n)
|
||||
{
|
||||
double x = 0, y = 0;
|
||||
int i = 1023;
|
||||
do
|
||||
{
|
||||
x += a[i] + a[i+1];
|
||||
y += a[i] / a[i+1];
|
||||
if (bar ())
|
||||
break;
|
||||
}
|
||||
while (--i);
|
||||
/* We want to avoid vectorizing the LC PHI and insert vector CTORs
|
||||
inside of the loop where it is only needed here. */
|
||||
a[0] = x;
|
||||
a[1] = y;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-not "vectorizing SLP node starting from: ._\[0-9\]+ = PHI" "slp1" } } */
|
|
@ -1896,7 +1896,10 @@ fail:
|
|||
n_vector_builds++;
|
||||
}
|
||||
}
|
||||
if (all_uniform_p || n_vector_builds > 1)
|
||||
if (all_uniform_p
|
||||
|| n_vector_builds > 1
|
||||
|| (n_vector_builds == children.length ()
|
||||
&& is_a <gphi *> (stmt_info->stmt)))
|
||||
{
|
||||
/* Roll back. */
|
||||
matches[0] = false;
|
||||
|
|
Loading…
Reference in New Issue