https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100864
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |pinskia at gcc dot gnu.org Last reconfirmed| |2021-06-02 Ever confirmed|0 |1 Status|UNCONFIRMED |ASSIGNED Summary|(a&!b) | b is not opimized |(a&!b) | b is not opimized |to a | b for conditionals |to a | b for comparisons --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The pattern which matches this when this is not a comparison: (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))) We should be able to add something similar for tcc_comparison/inverted_tcc_comparison_with_nans too.