diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-07-14 22:39:23 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-07-14 22:39:23 +0000 |
commit | 33b6f82e72f12cf74341842a689f110a98707b71 (patch) | |
tree | c3b70af4781d8bafe33d146afc3ca26093e10aaf /llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | |
parent | a97ad16538415f59542f5f9cff087b8cba995365 (diff) | |
download | llvm-33b6f82e72f12cf74341842a689f110a98707b71.zip llvm-33b6f82e72f12cf74341842a689f110a98707b71.tar.gz llvm-33b6f82e72f12cf74341842a689f110a98707b71.tar.bz2 |
[InstCombine] Generalize sub of selects optimization to all BinaryOperators
This exposes further optimization opportunities if the selects are
correlated.
llvm-svn: 242235
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp | 26 |
1 files changed, 0 insertions, 26 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp index 2d2c109..a8d0172 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp @@ -1611,32 +1611,6 @@ Instruction *InstCombiner::visitSub(BinaryOperator &I) { return BinaryOperator::CreateAnd(A, B); } - // (sub (select (a, c, b)), (select (a, d, b))) -> (select (a, (sub c, d), 0)) - // (sub (select (a, b, c)), (select (a, b, d))) -> (select (a, 0, (sub c, d))) - if (auto *SI0 = dyn_cast<SelectInst>(Op0)) { - if (auto *SI1 = dyn_cast<SelectInst>(Op1)) { - if (SI0->getCondition() == SI1->getCondition()) { - if (Value *V = SimplifySubInst( - SI0->getFalseValue(), SI1->getFalseValue(), I.hasNoSignedWrap(), - I.hasNoUnsignedWrap(), DL, TLI, DT, AC)) - return SelectInst::Create( - SI0->getCondition(), - Builder->CreateSub(SI0->getTrueValue(), SI1->getTrueValue(), "", - /*HasNUW=*/I.hasNoUnsignedWrap(), - /*HasNSW=*/I.hasNoSignedWrap()), - V); - if (Value *V = SimplifySubInst(SI0->getTrueValue(), SI1->getTrueValue(), - I.hasNoSignedWrap(), - I.hasNoUnsignedWrap(), DL, TLI, DT, AC)) - return SelectInst::Create( - SI0->getCondition(), V, - Builder->CreateSub(SI0->getFalseValue(), SI1->getFalseValue(), "", - /*HasNUW=*/I.hasNoUnsignedWrap(), - /*HasNSW=*/I.hasNoSignedWrap())); - } - } - } - if (Op0->hasOneUse()) { Value *Y = nullptr; // ((X | Y) - X) --> (~X & Y) |