https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87288
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amker at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- -fno-ivopts also avoids the issue but still generates aligned accesses: 400510: 66 0f 10 02 movupd (%rdx),%xmm0 400514: 83 c6 01 add $0x1,%esi 400517: 48 83 c2 20 add $0x20,%rdx 40051b: 48 83 c1 10 add $0x10,%rcx 40051f: 66 0f 16 42 f0 movhpd -0x10(%rdx),%xmm0 400524: 0f 29 41 f0 movaps %xmm0,-0x10(%rcx) 400528: 41 39 f0 cmp %esi,%r8d 40052b: 77 e3 ja 400510 <main+0x40> Oh, the issue is bogus iteration... in the original cited assembly we start with rdx == rcx == 0 and thus iterate until overflow. IVOPTs does - MEM[(double &)vectp_jacobianTransposeds.15_51] = vect_perm_even_49; - vectp.11_45 = vectp.11_47 + 16; - vectp_jacobianTransposeds.15_52 = vectp_jacobianTransposeds.15_51 + 16; - ivtmp_55 = ivtmp_54 + 1; - if (ivtmp_55 >= bnd.8_41) + MEM[symbol: jacobianTransposeds, index: ivtmp.23_27, offset: 0] = vect_perm_even_49; + ivtmp.23_26 = ivtmp.23_27 + 16; + if (ivtmp.23_26 == _19) the >= -> == transform looks wrong. Bin?