[InstCombine] Canonicalize variable mask in masked merge
authorRoman Lebedev <lebedev.ri@gmail.com>
Sat, 28 Apr 2018 15:45:07 +0000 (15:45 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Sat, 28 Apr 2018 15:45:07 +0000 (15:45 +0000)
commit136867931a31d092dbad84aedd8a67a21ddd34be
treeabf53d63ecb499c2592a5802c0aca16a56e831f4
parent6b1e66b188a6da71d18761791906b97135599742
[InstCombine] Canonicalize variable mask in masked merge

Summary:
Masked merge has a pattern of: `((x ^ y) & M) ^ y`.
But, there is no difference between `((x ^ y) & M) ^ y` and `((x ^ y) & ~M) ^ x`,
We should canonicalize the pattern to non-inverted mask.

https://rise4fun.com/Alive/Yol

Reviewers: spatel, craig.topper

Reviewed By: spatel

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D45664

llvm-svn: 331112
llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
llvm/test/Transforms/InstCombine/invert-variable-mask-in-masked-merge-scalar.ll
llvm/test/Transforms/InstCombine/invert-variable-mask-in-masked-merge-vector.ll