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; }