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

--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
This is what I have so far:
/* Transform (a * { 0 or 1 }) != 0 into {0 or 1} != 0 & (a != 0) */
/* Transform (a * { 0 or 1 }) == 0 into ({0 or 1} == 0) | (a == 0) */
(for cmp (ne eq)
     bit_op (bit_and bit_ior)
 (simplify
  (cmp (mult:cs @0 zero_one_valued_p@1) integer_zerop@2)
  (bit_op (cmp @1 { build_zero_cst (TREE_TYPE (@1)); })
          (cmp @0 @2))))

/* zero_one_valued_p != 0 -> (cast)zero_one_valued_p */
(simplify
 (ne zero_one_valued_p@0 integer_zerop)
 (convert @0))

Reply via email to