area-CodeGen-coreclrhelp wantedtenet-performance
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