https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79185

            Bug ID: 79185
           Summary: Possible regression in gcc 4.9 and later with the
                    addition of two 128 bit ints
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: drraph at gmail dot com
  Target Milestone: ---

Consider this code:

__int128_t ai (__int128_t x, __int128_t y) {
  return x + y;
}

In gcc 4.8.5, clang and icc using -O2 this gives code that is more or less
exactly:

ai:
        mov     rax, rdx
        mov     rdx, rcx
        add     rax, rdi
        adc     rdx, rsi
        ret


However in gcc 4.9 and later you get

ai:
        mov     r9, rdi
        mov     r10, rsi
        add     r9, rdx
        adc     r10, rcx
        mov     rax, r9
        mov     rdx, r10
        ret

Interestingly, that is also the code you get in gcc 4.8.5 if you use -O instead
of -O2.

Is this addition of two extra mov's a regression?

Reply via email to