https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95489
--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> --- (In reply to Richard Biener from comment #1) > (bit_and (ne (bit_and x_3 y_4) 0) (ne x_3 0)) This could be simplified > where I'd say we miss > > (bit_and (ne @0 integer_zerop) (ne @1 integer_zerop)) > > -> > > (ne (bit_and @0 @1) integer_zerop) This only seems possible for 1-bit types: 1!=0 & 2!0 is not (1&2)!=0 To me, this falls in the general category of (x!=a)?f(x):y where y happens to be f(a) and f is not as costly as a condition+jump. I handled a few such cases a while ago with neutral_element_p, but it could be much more general (I am not saying it is easy).