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.)