https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126544
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=116083
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
This is to be expected and is mostly dependence analysis which is naturally
quadratic.
a[0] = b[0] * c[0] + 0;
a[1] = b[1] * c[1] + 1;
a[2] = b[2] * c[2] + 2;
a[3] = b[3] * c[3] + 3;
a[4] = b[4] * c[4] + 4;
a[5] = b[5] * c[5] + 5;
a[6] = b[6] * c[6] + 6;
...
we verify that we can hoist all loads across all stores (that's also
how we emit code - causing register pressure issues when not fixing
that via later scheduling, which we generally not do).
In principle we could do better if we'd split the SLP graph along vector
boundaries before this, which would also possibly solve some dependence
issues.
Analyzing larger groups initially is done because we want to delay
vector type determining and to find optimal subsets of the graph to
vectorize.