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?