https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94718
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- In fold-const.c this is optimized by fold_binary case EQ_EXPR: case NE_EXPR: /* Fold (X & C) op (Y & C) as (X ^ Y) & C op 0", and symmetries. */ Of course, the (x op 0) op2 (y op 0) for op < or >= and op2 == or != could be added to the same spot, but is there any reason why the above mentioned optimization shouldn't be moved into match.pd (won't it be even much simpler there where it can just use :c 3 times)?