diff options
author | Craig Topper <craig.topper@gmail.com> | 2017-04-03 20:41:47 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2017-04-03 20:41:47 +0000 |
commit | 1604f0773ba1d7e07083e8d31eec6ec88ccec2c8 (patch) | |
tree | 8f54aa8eeeb545f54dcc2dc06eebc4051f5e98a9 /llvm/lib/Transforms | |
parent | 0389f62879fc9162fae12e57b93ae3565c915356 (diff) | |
download | bcm5719-llvm-1604f0773ba1d7e07083e8d31eec6ec88ccec2c8.tar.gz bcm5719-llvm-1604f0773ba1d7e07083e8d31eec6ec88ccec2c8.zip |
[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
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp | 11 |
1 files changed, 0 insertions, 11 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp index 79826975729..5f16284631e 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp @@ -2122,17 +2122,6 @@ Instruction *InstCombiner::visitOr(BinaryOperator &I) { if (ConstantInt *RHS = dyn_cast<ConstantInt>(Op1)) { ConstantInt *C1 = nullptr; Value *X = nullptr; - // (X & C1) | C2 --> (X | C2) & (C1|C2) - // iff (C1 & C2) != 0. - if (match(Op0, m_And(m_Value(X), m_ConstantInt(C1))) && - (RHS->getValue() & C1->getValue()) != 0 && - Op0->hasOneUse()) { - Value *Or = Builder->CreateOr(X, RHS); - Or->takeName(Op0); - return BinaryOperator::CreateAnd(Or, - Builder->getInt(RHS->getValue() | C1->getValue())); - } - // (X ^ C1) | C2 --> (X | C2) ^ (C1&~C2) if (match(Op0, m_Xor(m_Value(X), m_ConstantInt(C1))) && Op0->hasOneUse()) { |