[Bug tree-optimization/126710] New: Missing CLZ detection
ktkachov at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Aug 7 09:00:05 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126710
Bug ID: 126710
Summary: Missing CLZ detection
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: ktkachov at gcc dot gnu.org
Target Milestone: ---
Target: aarch64
Consider the C++
int clz_i(unsigned int value) {
constexpr int W = sizeof(value) * 8;
int r = 0;
if (value == 0)
return W;
while (value >>= 1)
++r;
return W - 1 - r;
}
int clz_l(unsigned long value) {
constexpr int W = sizeof(value) * 8;
int r = 0;
if (value == 0)
return W;
while (value >>= 1)
++r;
return W - 1 - r;
}
I think on aarch64 these can optimise to the CLZ instructions as they are
defined to be bit-width at zero and the rest is a standard final value
replacement?
More information about the Gcc-bugs
mailing list