https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106331
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code CC| |rguenth at gcc dot gnu.org Target| |x86_64-*-* --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed - we get # S.0_3 = PHI <1(2), S.0_7(4)> if (S.0_3 > 2) goto <bb 5>; [33.33%] else goto <bb 4>; [66.67%] _1 = S.0_3 + -1; _2 = &a[_1]; __builtin_memset (_2, 32, 24); S.0_7 = S.0_3 + 1; goto <bb 3>; [100.00%] but somehow we fail to see that while the first [24] is 16 byte aligned, the second is not: .L4: leaq -3(%rax,%rax,2), %rcx leaq 0(,%rcx,8), %rdx leaq -56(%rsp,%rdx), %rdx movdqa .LC0(%rip), %xmm0 movaps %xmm0, (%rdx) movabsq $2314885530818453536, %rsi movq %rsi, 16(%rdx) addq $1, %rax .L3: cmpq $2, %rax jle .L4 we shouldn't have used movaps %xmm0, (%rdx) here. Probably middle-end but bisection will show.