dotnet/runtime

Chained comparison of two integers against a constant is not coalesced

Open

#101,347 opened on Apr 21, 2024

View on GitHub
 (1 comment) (0 reactions) (0 assignees)C# (5,445 forks)batch import
area-CodeGen-coreclrhelp wantedin-prtenet-performance

Repository metrics

Stars
 (17,886 stars)
PR merge metrics
 (Avg merge 12d 11h) (661 merged PRs in 30d)

Description

Description

Given the snippet

static bool Test(int a, int b) => a is 0x80 && b is 0x80;

.NET emits

       cmp      ecx, 128
       jne      SHORT G_M000_IG05
       xor      eax, eax
       cmp      edx, 128
       sete     al
       ret      
G_M000_IG05:                ;; offset=0x0014
       xor      eax, eax
       ret      

While Clang emits

        xor     edi, 128
        xor     esi, 128
        or      esi, edi
        sete    al
        ret

It would be nice if JIT/ILC could emit branchless comparison for such patterns.

Configuration

.NET 8.0.3

Regression?

No

Contributor guide