https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90018
--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> --- Created attachment 46131 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=46131&action=edit patch for GCC 9 So trunk, instead of grouping (a) and (b) groups (d) and (b), leaving (a) alone. for (int i = 0; i < n; ++i) { /* We may not apply interleaving to the group (a), (b) because of (c). */ double tem1 = a4[i*4] + a4[i*4+n*4] /* (a) */; double tem2 = a4[i*4+2*n*4+1]; a4[i*4+n*4+1] = tem1; /* (c) */ a4[i*4+1] = tem2; double tem3 = a4[i*4] - tem2; double tem4 = tem3 + a4[i*4+n*4]; a4[i*4+n*4+1] = tem4 + a4[i*4+n*4+1] /* (b) */; }