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

Reply via email to