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

Zhao Wei Liew <zhaoweiliew at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #52091|0                           |1
        is obsolete|                            |

--- Comment #2 from Zhao Wei Liew <zhaoweiliew at gmail dot com> ---
Created attachment 52097
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52097&action=edit
Optimization for both unsigned and signed integer X

I've attached a new patch which does the optimization for both the unsigned and
the signed case.

With this patch, x86-64 gcc -std=c++20 -O3 produces the following assembly:

f(int):
        lea eax, [rdi + 1]
        cmp eax, 2
        mov eax, 0
        cmovbe eax, edi
        ret
f(unsigned int):
        xor eax, eax
        cmp edi, 1
        sete al
        ret

which is virtually identical to the following assembly produced by clang++
-std=c++20 -O3:

f(int):
        lea ecx, [rdi + 1]
        xor eax, eax
        cmp ecx, 3
        cmovb eax, edi
        ret
f(unsigned int):
        xor eax, eax
        cmp edi, 1
        sete al
        ret

Reply via email to