https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61605
Bug ID: 61605 Summary: Potential optimization: Keep unclobbered argument registers live across function calls Product: gcc Version: 4.10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: patrick at parcs dot ath.cx If a function is known to not clobber an argument register then the caller shouldn't have to save/reload that register across the function call. Example: The C code: static int __attribute__ ((noinline)) bar (int x) { return x + 3; } int foo (int y) { return y + bar (y); } generates: bar: .LFB0: .cfi_startproc leal 3(%rdi), %eax ret .cfi_endproc foo: .LFB1: .cfi_startproc movl %edi, %edx call bar addl %edx, %eax ret .cfi_endproc Here, %edi is saved to %edx even though the call to bar doesn't clobber %edi. The assembly for the function foo could potentially be: call bar addl %edi, %eax