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.

Reply via email to