https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98709
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- At the end of gimple, we have _6 = a_3(D) ^ b_4(D); _1 = ~_6; _2 = a_3(D) == b_4(D); _7 = _1 & _2; I guess we are missing a simplification of ~(a^b) to a==b for bool (similar to ~(a!=b) be we canonicalize != to ^).