https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94787

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #5)
> Note the expansion part is handled by r14-5612, r14-5613, and r14-6940 .
> 
> So now we just need the match part which I will handle for 15.

Actually the expansion part is not fully complete.
```
int f(int a)
{
        return __builtin_popcount(a) <= 1;
}

int f1(int a)
{
        return __builtin_popcount(a) == 1;
}
```

f1 is handled but f is not.
f should expand to `!(v & (v - 1))`.

The other match patterns needed:
```
int g(int a)
{
        if (a == 0) return 0;
        return __builtin_popcount(a) <= 1;
}

int g1(int a)
{
        if (a == 0) return 1;
        return __builtin_popcount(a) <= 1;
}
```

g should be transformed into just `__builtin_popcount(a) == 1`
and g1 should be transformed into just `__builtin_popcount(a) <= 1`.
Both during phi-opt.

Reply via email to