https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66598
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2015-06-22 Component|c |tree-optimization Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- I believe I fixed this on trunk for PR66510. Confirmed with GCC 5 though. GCC 6 now generates .L2: movupd 16(%rax), %xmm0 addq $40, %rax addq $32, %rdx movupd -40(%rax), %xmm1 movaps %xmm0, -16(%rdx) movaps %xmm1, -32(%rdx) cmpq $P+1240, %rax jne .L2 movupd P+1256(%rip), %xmm0 xorl %eax, %eax movupd P+1240(%rip), %xmm1 movaps %xmm0, Q+1008(%rip) movaps %xmm1, Q+992(%rip) ret might be a bit hard to backport the changes though. Mine nevertheless.