diff options
author | Sanjay Patel <spatel@rotateright.com> | 2017-05-10 21:33:55 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2017-05-10 21:33:55 +0000 |
commit | 40a87a909b5c75099ff57ccf5da065f2cf6eea72 (patch) | |
tree | 5628ce691fd4c89c94d46a1439dcc89dcbac861d /llvm/lib/Support/Parallel.cpp | |
parent | 52f8d19ceda6a166497e71c5faaa6a4c07f0bbef (diff) | |
download | llvm-40a87a909b5c75099ff57ccf5da065f2cf6eea72.zip llvm-40a87a909b5c75099ff57ccf5da065f2cf6eea72.tar.gz llvm-40a87a909b5c75099ff57ccf5da065f2cf6eea72.tar.bz2 |
[InstCombine] remove fold that swaps xor/or with constants; NFCI
// (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2)
This canonicalization was added at:
https://reviews.llvm.org/rL7264
By moving xors out/down, we can more easily combine constants. I'm adding
tests that do not change with this patch, so we can verify that those kinds
of transforms are still happening.
This is no-functional-change-intended because there's a later fold:
// (X^C)|Y -> (X|Y)^C iff Y&C == 0
...and demanded-bits appears to guarantee that any fold that would have
hit the fold we're removing here would be caught by that 2nd fold.
Similar reasoning was used in:
https://reviews.llvm.org/rL299384
The larger motivation for removing this code is that it could interfere with
the fix for PR32706:
https://bugs.llvm.org/show_bug.cgi?id=32706
Ie, we're not checking if the 'xor' is actually a 'not', so we could reverse
a 'not' optimization and cause an infinite loop by altering an 'xor X, -1'.
Differential Revision: https://reviews.llvm.org/D33050
llvm-svn: 302733
Diffstat (limited to 'llvm/lib/Support/Parallel.cpp')
0 files changed, 0 insertions, 0 deletions