http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58110
Bug ID: 58110 Summary: Useless GPR push and pop when only xmm registers are used. Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: neleai at seznam dot cz Hi,attached code generates extra push/pop rbx pair while there is no gpr register assigned in segment between them. This was generated by head xgcc -O3. A gcc-4.7 has similar issues with attached program. pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 movdqu (%rsi), %xmm15 movdqu -16(%rsi,%rdx), %xmm14 movdqu 16(%rsi), %xmm13 movdqu -32(%rsi,%rdx), %xmm12 movdqu 32(%rsi), %xmm11 movdqu -48(%rsi,%rdx), %xmm10 movdqu 48(%rsi), %xmm9 movdqu -64(%rsi,%rdx), %xmm8 movdqu 64(%rsi), %xmm7 movdqu -80(%rsi,%rdx), %xmm6 movdqu 80(%rsi), %xmm5 movdqu -96(%rsi,%rdx), %xmm4 movdqu 96(%rsi), %xmm3 movdqu -112(%rsi,%rdx), %xmm2 movdqu 112(%rsi), %xmm1 movdqu -128(%rsi,%rdx), %xmm0 movdqu %xmm15, (%rdi) movdqu %xmm14, -16(%rdi,%rdx) movdqu %xmm13, 16(%rdi) movdqu %xmm12, -32(%rdi,%rdx) movdqu %xmm11, 32(%rdi) movdqu %xmm10, -48(%rdi,%rdx) movdqu %xmm9, 48(%rdi) movdqu %xmm8, -64(%rdi,%rdx) movdqu %xmm7, 64(%rdi) movdqu %xmm6, -80(%rdi,%rdx) movdqu %xmm5, 80(%rdi) movdqu %xmm4, -96(%rdi,%rdx) movdqu %xmm3, 96(%rdi) movdqu %xmm2, -112(%rdi,%rdx) movdqu %xmm1, 112(%rdi) movdqu %xmm0, -128(%rdi,%rdx) popq %rbx