On Linux/x86-64, IRA/reload moves asm statement by adding "movss" at -O2:
[...@gnu-6 vzeroupper-1]$ cat foo.c extern void bar2 (void); float foo (float y) { asm volatile ("nop"); bar2 (); return y; } [...@gnu-6 vzeroupper-1]$ gcc -S -O foo.c [...@gnu-6 vzeroupper-1]$ cat foo.s .file "foo.c" .text .globl foo .type foo, @function foo: .LFB0: .cfi_startproc subq $24, %rsp .cfi_def_cfa_offset 32 movss %xmm0, 12(%rsp) #APP # 5 "foo.c" 1 nop # 0 "" 2 #NO_APP call bar2 movss 12(%rsp), %xmm0 addq $24, %rsp .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 4.4.3 20100127 (Red Hat 4.4.3-4)" .section .note.GNU-stack,"",@progbits [...@gnu-6 vzeroupper-1]$ gcc -S -O2 foo.c [...@gnu-6 vzeroupper-1]$ cat foo.s .file "foo.c" .text .p2align 4,,15 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc subq $24, %rsp .cfi_def_cfa_offset 32 #APP # 5 "foo.c" 1 nop # 0 "" 2 #NO_APP movss %xmm0, (%rsp) call bar2 movss (%rsp), %xmm0 addq $24, %rsp .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 4.4.3 20100127 (Red Hat 4.4.3-4)" .section .note.GNU-stack,"",@progbits [...@gnu-6 vzeroupper-1]$ -- Summary: IRA/reload moves asm statement Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hjl dot tools at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44323