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

            Bug ID: 105219
           Summary: [12 Regression] SVE: Wrong code with -O3
                    -msve-vector-bits=128 -mtune=thunderx
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: acoplan at gcc dot gnu.org
  Target Milestone: ---

The following C program appears to be miscompiled with -O3 -march=armv8.2-a+sve
-msve-vector-bits=128 -mtune=thunderx :

int a;
char b[60];
short c[18];
short d[4][19];
long long f;
void e(int g, int h, short k[][19]) {
  for (signed i = 0; i < 3; i += 2)
    for (signed j = 1; j < h + 14; j++) {
      b[i * 14 + j] = 1;
      c[i + j] = k[2][j];
      a = g ? k[i][j] : 0;
    }
}
int main() {
  e(9, 1, d);
  for (long l = 0; l < 6; ++l)
    for (long m = 0; m < 4; ++m)
      f ^= b[l + m * 4];
  if (f)
    __builtin_abort ();
}

Of course the choice of tuning is not sensible when asking for SVE, but GCC
shouldn't produce wrong code in any case. I can't reproduce the problem with
GCC 11.

Reply via email to