dotnet/runtime

Jit: Missing folding some compares in optimizebools

開放

#123,291 建立於 2026年1月16日

 (4 則留言) (0 個反應) (0 位負責人)C# (5,445 個分叉)batch import
area-CodeGen-coreclrhelp wantedtenet-performance

倉庫指標

星標
 (17,886 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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

貢獻者指南