https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107881
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I was thinking about having reassociation changing bool == bool, bool < bool, and bool <= bool into ~(bool ^ bool), !bool & bool, !bool | bool to "linearizing" so then reassociation can handle the rest (with the xor patch still? or we change ^ to how we expand xor like it is done in the patch) and then when finalizing, we simplify back to ==, <, and <= (and ^).