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

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Slightly further simplified, -O2 -msse4 fails, -O2 works:
static void
foo (unsigned char *d, unsigned char *s, int e, int f)
{
  for (int i = 0; i < 4; i++)
    {
      d[0] = s[-2];
      d[5] = (s[5] + s[6]) * 2 - (s[4] + s[7]) + s[3] + s[8];
      d[6] = (s[6] + s[7]) * 2 - (s[5] + s[8]) + s[4] + s[9];
      d[7] = (s[7] + s[8]) * 2 - (s[6] + s[9]) + s[5] + s[10];
      d += e;
      s += f;
    }
}

unsigned char s[128] = { 2 }, d[128];

int
main ()
{
  foo (d, s + 2, 16, 16);
  if (d[5] != 0)
    __builtin_abort ();
}

Reply via email to