[InstCombine] Remove canonicalization for (X & C1) | C2 --> (X | C2) & (C1|C2) when...
authorCraig Topper <craig.topper@gmail.com>
Mon, 3 Apr 2017 20:41:47 +0000 (20:41 +0000)
committerCraig Topper <craig.topper@gmail.com>
Mon, 3 Apr 2017 20:41:47 +0000 (20:41 +0000)
commit1604f0773ba1d7e07083e8d31eec6ec88ccec2c8
tree8f54aa8eeeb545f54dcc2dc06eebc4051f5e98a9
parent0389f62879fc9162fae12e57b93ae3565c915356
[InstCombine] Remove canonicalization for (X & C1) | C2 --> (X | C2) & (C1|C2) when C1 & C2 have common bits.

It turns out that SimplifyDemandedInstructionBits will get called earlier and remove bits from C1 first. Effectively doing (X & (C1&C2)) | C2. So by the time it got to this check there could be no common bits.

I think the DAGCombiner has the same check but its check can be executed because it handles demanded bits later. I'll look at it next.

llvm-svn: 299384
llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp