https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86174
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |alias, missed-optimization Target| |x86_64-*-*, i?86-*-* Status|UNCONFIRMED |NEW Last reconfirmed| |2018-06-18 CC| |rguenth at gcc dot gnu.org Component|c |tree-optimization Blocks| |53947 Ever confirmed|0 |1 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. There's two things in the way - first we transform the #pragma omp simd for (int kk=0; kk<Sk; kk++) { c[(i+ii)*p+k+kk] = C[ii][kk]; } loop to memcpy (we could simply avoid that for force_vectorize loops as a hack). And if we avoid that, for example with -fno-tree-loop-distribute-patterns then we fail to elide the stores to C[]. That happens because unrolling doesn't preserve restrict info and when vectorization makes C addressable it doesn't make restrict info reflect that it doesn't alias with anything. We also do not have a late enough scalarization pass that would elide the array - we'd rely on LIM/DSE here. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947 [Bug 53947] [meta-bug] vectorizer missed-optimizations