https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98567
Bug ID: 98567
Summary: Failure to optimize using ZF flag from blsi
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: ---
bool f(__UINT64_TYPE__ x)
{
return (-x & x) == 0;
}
With -O3 -mbmi, LLVM compiles this to:
f:
blsi rax, rdi
sete al
ret
GCC compiles this to:
f:
blsi rdi, rdi
test rdi, rdi
sete al
ret
The usage of `test` can be entirely removed, as `blsi` already sets ZF
accordingly.