https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106138
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2022-07-07 --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #2) > I'd say reassoc would be a better place to handle it, so that we handle both > the logical op short circuit && and x == 4 && y == 25 && z != 16 && (x & 3) > != 0. Right now reassoc calls maybe_fold_and_comparisons and maybe_fold_or_comparisons which are places where this could be added. Or even match-and-simplify gets called (via those two functions). You could add it either in combine_comparisons or match.pd. Maybe something like (psedu code as I didn't add the wi part and it can be extended and all): (simplify (bit_and (eq @0 INTEGER_CST@1) (ne (bit_and @0 INTEGER_CST@2) zero_p)) (if ((@1 & @2) == 0)) ({true_bool_value;})) You can change @1 and @2 to with_possible_nonzero_bits/with_possible_nonzero_bits2 and then compare the nonzero bits to see if they overlap. Also extend it to handle ior too.