When lowering call arguments to stack, specify a stack MPI, as well as the stack alignment, instead of using the defaults (which would be an unknown location with ABI alignment). I believe the asm diffs are just changes in scheduling.
(a & x) | (~a & y) -> (a & (x ^ y)) ^ y