https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95529
Bug ID: 95529
Summary: Failure to reuse flags generated by trailing zeros
instruction for cmovcc
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: gabravier at gmail dot com
Target Milestone: ---
int f(int x)
{
return x == 0 ? 24 : ffs(x) - 1;
}
With -O3, LLVM outputs this :
f(int): # @f(int)
bsf ecx, edi
mov eax, 24
cmovne eax, ecx
ret
GCC outputs this :
f(int):
xor eax, eax
mov edx, 24
rep bsf eax, edi
test edi, edi
cmove eax, edx
ret
The `test` can be eliminated here.