Sanjay Patel 40a87a909b [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
2017-05-10 21:33:55 +00:00
..
2016-09-13 12:10:14 +00:00
2017-04-14 17:47:07 +00:00
2016-07-16 16:24:06 +00:00
2017-01-22 20:28:56 +00:00
2017-04-17 03:41:47 +00:00
2016-06-05 17:29:45 +00:00
2017-01-10 23:08:54 +00:00
2014-11-04 05:17:58 +00:00
2014-10-21 23:00:20 +00:00
2016-04-17 04:30:43 +00:00
2016-05-02 15:25:49 +00:00
2015-01-06 23:00:33 +00:00
2016-04-05 17:24:54 +00:00
2015-06-05 18:04:42 +00:00
2015-08-11 21:33:55 +00:00
2015-08-28 19:09:31 +00:00
2017-04-19 12:06:40 +00:00
2016-01-07 19:27:16 +00:00
2016-06-05 17:54:56 +00:00
2017-05-03 23:32:51 +00:00
2017-04-14 17:47:07 +00:00
2017-04-14 17:47:07 +00:00
2016-04-05 17:24:54 +00:00

This directory contains test cases for the instcombine transformation.  The
dated tests are actual bug tests, whereas the named tests are used to test
for features that the this pass should be capable of performing.