dotnet/runtime

Jit: Missing folding some compares in optimizebools

Open

#123.291 aberto em 16 de jan. de 2026

Ver no GitHub
 (4 comments) (0 reactions) (0 assignees)C# (5.445 forks)batch import
area-CodeGen-coreclrhelp wantedtenet-performance

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

Code like the following (from this test) should have the eq and gt folded into GE:

    private static bool IsGreaterThanOrEqualZero(int x)
    {
        bool b = x == 0 || x > 0;
        if (b)
        {
            Console.WriteLine("IsGreaterThanOrEqualZero true");
        }
        return b;
    }

I looked at arm64 and x64 targets, and we still generate a redundant test instruction(*)

IN0001: 000005 mov      ebx, 1
IN0002: 00000A test     ecx, ecx
IN0003: 00000C setg     al
IN0004: 00000F movzx    rax, al
IN0005: 000012 test     ecx, ecx *
IN0006: 000014 cmovne   ebx, eax
IN0007: 000017 test     ebx, ebx
IN0008: 000019 je       SHORT G_M32186_IG04

I think optimizebools was supposed to get this via this pr but perhaps got regressed over a couple years.

category:cq theme:basic-cq skill-level:beginner cost:small impact:small

Guia do colaborador