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

--- Comment #12 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Further simplified without any headers, -O1 works, -O2 fails.
double a[2] = { 0.8147, 0.9058 };
double b[6] = { 0.1576, 0.9706, 1, 1, 1, 1 };
double c[16];
typedef double U __attribute__ ((vector_size(16), may_alias, aligned(1)));
typedef double V __attribute__ ((vector_size(16), may_alias));

int
main ()
{
  for (int f = 0; f < 6; f++)
    {
      *(U *) &c[f] = *(U *) &c[f] + (V) { b[f], b[f] } * *(U *) a;
      *(U *) &c[f + 2] = *(U *) &c[f + 2] + (V) { b[f], b[f] } * *(U *) a;
    }
  if (c[1] <= 0.93 || c[1] >= 0.94)
    __builtin_abort ();
  return 0;
}

Reply via email to