https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111149
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Just a few notes here. canonicalize_cond_expr_cond does handle `a ^ b` . gimple_cond_get_ops_from_tree/is_gimple_condexpr_1 does not but they do handle TRUTH_NOT_EXPR which is shocking because that is only can come from fold ... So forwprop and ifcombine all handle this correctly (since they use canonicalize_cond_expr_cond) but others don't.