Roman Lebedev 6b6c553bb8 [InstCombine] Fold unfolded masked merge pattern with variable mask!
Summary:
Finally fixes [[ https://bugs.llvm.org/show_bug.cgi?id=6773 | PR6773 ]].

Now that the backend is all done, we can finally fold it!

The canonical unfolded masked merge pattern is
```(x &  m) | (y & ~m)```
There is a second, equivalent variant:
```(x | ~m) & (y |  m)```
Only one of them (the or-of-and's i think) is canonical.
And if the mask is not a constant, we should fold it to:
```((x ^ y) & M) ^ y```

https://rise4fun.com/Alive/ndQw

Reviewers: spatel, craig.topper

Reviewed By: spatel

Subscribers: nicholas, RKSimon, llvm-commits

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

llvm-svn: 333106
2018-05-23 17:47:52 +00:00
..
2018-02-01 13:05:25 +00:00
2016-07-16 16:24:06 +00:00
2018-05-21 21:09:14 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2017-10-10 05:07:54 +00:00
2016-04-17 04:30:43 +00:00
2017-05-19 22:37:09 +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
2018-02-01 13:05:25 +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.