https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103633
Bug ID: 103633
Summary: Missed popcount recognition
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: acoplan at gcc dot gnu.org
Target Milestone: ---
For:
int f1 (unsigned long b) {
int c = 0;
while (b) {
b &= b - 1;
c++;
}
return c;
}
int f2(unsigned long x) {
int c = 0;
for (; x; x >>= 1) {
if (x & 1)
c++;
}
return c;
}
GCC recognizes f1 as popcount but not the more naive f2.