dotnet/runtime

Chained comparison of two integers against a constant is not coalesced

Open

#101 347 ouverte le 21 avr. 2024

Voir sur GitHub
 (1 commentaire) (0 réactions) (0 assignés)C# (5 445 forks)batch import
area-CodeGen-coreclrhelp wantedin-prtenet-performance

Métriques du dépôt

Stars
 (17 886 stars)
Métriques de merge PR
 (Merge moyen 12j 11h) (661 PRs mergées en 30 j)

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

Guide contributeur