https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101450

            Bug ID: 101450
           Summary: GCC doesn't vectorize loop due to evolution of base is
                    not affine.
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: crazylht at gmail dot com
  Target Milestone: ---
              Host: x86_64-pc-linux-gnu

the testcase is extracted from coremark

cat test.c

void
matrix_add_const(unsigned int N, short *A, short val)
{
  unsigned int i, j;
  for (i = 0; i < N; i++)
    {
      for (j = 0; j < N; j++)
        {
          A[i * N + j] += val;
        }
    }
}

gcc failed to vectorize it since there could be wrap for i*N + j, but we can do
multi-versioning for it?

llvm seems does that.

https://godbolt.org/z/Er44ffTE3

Reply via email to