This adds two folds:

`A + (B & ~A)`-->`A | B`(https://alive2.llvm.org/ce/z/N5fWZ9)`A + ((A & B) ^ B)`-->`A | B`(https://alive2.llvm.org/ce/z/so3jNz)

The reason why the second fold is necessary is that we consider this to be the canonical form if `B` is a constant. (I did check whether we can change that, but it looks like a number of folds depend on the current canonicalization, so I ended up adding both patterns here.)