OSDN Git Service

[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)
commit20230f9b42887e7a3a13c81731656a9bfd90c93a
tree2bccbd3929329fc0750cfd9eb210622622b190e6
parent4147eac22feb021903447982eb0e3707ed4b5679
[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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@331112 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
test/Transforms/InstCombine/invert-variable-mask-in-masked-merge-scalar.ll
test/Transforms/InstCombine/invert-variable-mask-in-masked-merge-vector.ll