https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100864
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- You can possibly merge it with the (for bitop (bit_and bit_ior) rbitop (bit_ior bit_and) /* (x | y) & x -> x */ /* (x & y) | x -> x */ (simplify (bitop:c (rbitop:c @0 @1) @0) @0) /* (~x | y) & x -> x & y */ /* (~x & y) | x -> x | y */ (simplify (bitop:c (rbitop:c (bit_not @0) @1) @0) (bitop @0 @1))) by using sth like logical_inverted_value (you want bit_inverted_value), Also you don't need (for cmp (tcc_comparison) (for icmp (tcc_comparison) but just (for cmp (tcc_comparison) icmp (inverted_tcc_comparison) ncmp (inverted_tcc_comparison_with_nans)) ... (if (ic == icmp || ic == ncmp) ... right?