https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81558
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org Blocks| |53947 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- The inner loop in foo2 is completely unrolled by GCC and imgY_org[y][x] is _32 = (long unsigned int) y_103; _33 = _32 * 8; _34 = imgY_org.8_31 + _33; _35 = *_34; where *_34 aliases *orgptr. Thus it's not possible to vectorize this without a runtime alias check. The innermost loop in foo1 is vectorized, the unrolled loop in foo2 is not basic-block vectorized because basic-block vectorization runs into the very same dependence issue. Does LLVM do a runtime alias check here? For foo1 GCC adds a runtime alias check (BB vectorization cannot version for aliasing). Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947 [Bug 53947] [meta-bug] vectorizer missed-optimizations