[InstCombine] Fold `(X | C2) ^ C1 --> (X & ~C2) ^ (C1^C2)`
These two are equivalent, and i *think* the `and` form is more-ish canonical. General proof: https://alive2.llvm.org/ce/z/RrF5s6 If constant on the (outer) `xor` is an `undef`, the whole lane is dead: https://alive2.llvm.org/ce/z/mu4Sh2 However, if the constant on the (inner) `or` is an `undef`, we must sanitize it first: https://alive2.llvm.org/ce/z/MHYJL7 I guess, producing a zero `and`-mask is optimal in that case. alive-tv is happy about the entirety of `xor-of-or.ll`.
Loading
Please sign in to comment