http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60473
Bug ID: 60473 Summary: optimization after shift sub-optimal Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: rtl-optimization Assignee: unassigned at gcc dot gnu.org Reporter: marmoo1024 at gmail dot com Created attachment 32316 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32316&action=edit source file with outputs, 3 versions with simple function using them unsigned long long simple_rdtsc_64 () { unsigned long long h,l; asm volatile ("rdtsc": "=a" (l), "=d" (h)); return (l) | (h << 32); } Optimizes to: rdtsc salq $32, %rdx orq %rax, %rdx movq %rdx, %rax ret with "return l+h*0x100000000LLU;" it optimizes better rdtsc salq $32, %rdx addq %rdx, %rax ret This also seems to affects how the function is inlined (see file).