https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109011
--- Comment #15 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to Jakub Jelinek from comment #14) > (In reply to Hongtao.liu from comment #13) > > It looks like ffs is *just* ctz with defined behavior for zero, so we can > > handle it exactly the same as ctz in the same pattern match((bitsize - .CLZ > > ((x - 1) & ~x)) or .POPCOUNT ((x - 1) & ~x)) when CLZ_DEFINED_VALUE_AT_ZERO > > 2. > > No, ffs(x) is ctz(x) + 1 for all x != 0, and 0 for x == 0. But yes, we can > generally handle it similarly. Let me attach a patch. Oh, I see.