https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110919

--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Generalized for -O1 case:
// (a & (b & ~a)) -> 0
// (a & (b | ~a)) -> a & b
// (a & (b ^ ~a)) -> a & b
// (a & (b cmp !a)) -> a & (b cmp 0)
(for op (tcc_comparison bit_and bit_xor bit_and)
 (simplify
  (bit_and:c zero_one_valued_p@0 (op:c @1 (convert? @2)))
  (with { bool wascmp; }
   (if (bitwise_inverted_equal_p (@0, @2, wascmp))
    (bit_and @0 (op @1 { build_zero_cst (TREE_TYPE (@1)); })))))


Note I filed PR 111282 for `(a & (b ^ ~a))` also.

Reply via email to