https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120479
Jeffrey A. Law <law at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2025-06-04 --- Comment #4 from Jeffrey A. Law <law at gcc dot gnu.org> --- Unfortunately I'm not seeing any pattern we can really target. We're looking at a 3 insn combination here. We need both source arguments to be substituted into the AND so that we know we're only dealing with 0/1. combine does the substitution for the equality test, but not the output of the slt. So the closest we get to a useful combine step is: Failed to match this instruction: (set (reg:SI 181) (and:SI (eq:SI (reg:SI 175) (const_int -1 [0xffffffffffffffff])) (reg:SI 135 [ _2 ]))) Maybe we could do something in match.pd. I haven't really looked to see if that's a viable path or whether or not the result meets the gimple costing conditions. At least in gimple we know the types are single bit which simplifies the problem a bit. The other thought would be look at the expansion code itself. But I'm hesitant to put any special code in there. Sigh. At least right now I don't see a direct path forward.