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).

Reply via email to