diff options
author | Tim Shen <timshen91@gmail.com> | 2018-06-21 02:15:32 +0000 |
---|---|---|
committer | Tim Shen <timshen91@gmail.com> | 2018-06-21 02:15:32 +0000 |
commit | 433b9761ceccc16047d1f1e889f111d245729919 (patch) | |
tree | 0e54cdc1ea8c6f918d8f493ae7daf9d1a621b68d /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 5af61e0a2829122bfba90427648d9a0aa7f00c8d (diff) | |
download | bcm5719-llvm-433b9761ceccc16047d1f1e889f111d245729919.tar.gz bcm5719-llvm-433b9761ceccc16047d1f1e889f111d245729919.zip |
Revert "[SCEV] Improve zext(A /u B) and zext(A % B)"
This reverts commit r335197, as some bots are not happy.
llvm-svn: 335198
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 609d04bbd7b..705272cd73d 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -1756,20 +1756,6 @@ ScalarEvolution::getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) { } } - // zext(A % B) --> zext(A) % zext(B) - { - const SCEV *LHS; - const SCEV *RHS; - if (matchURem(Op, LHS, RHS)) - return getURemExpr(getZeroExtendExpr(LHS, Ty, Depth + 1), - getZeroExtendExpr(RHS, Ty, Depth + 1)); - } - - // zext(A / B) --> zext(A) / zext(B). - if (auto *Div = dyn_cast<SCEVUDivExpr>(Op)) - return getUDivExpr(getZeroExtendExpr(Div->getLHS(), Ty, Depth + 1), - getZeroExtendExpr(Div->getRHS(), Ty, Depth + 1)); - if (auto *SA = dyn_cast<SCEVAddExpr>(Op)) { // zext((A + B + ...)<nuw>) --> (zext(A) + zext(B) + ...)<nuw> if (SA->hasNoUnsignedWrap()) { @@ -12167,43 +12153,3 @@ void PredicatedScalarEvolution::print(raw_ostream &OS, unsigned Depth) const { OS.indent(Depth + 2) << "--> " << *II->second.second << "\n"; } } - -// Match the mathematical pattern A - (A / B) * B, where A and B can be -// arbitrary expressions. -// It's not always easy, as A and B can be folded (imagine A is X / 2, and B is -// 4, A / B becomes X / 8). -bool ScalarEvolution::matchURem(const SCEV *Expr, const SCEV *&LHS, - const SCEV *&RHS) { - const auto *Add = dyn_cast<SCEVAddExpr>(Expr); - if (Add == nullptr || Add->getNumOperands() != 2) - return false; - - const SCEV *A = Add->getOperand(1); - const auto *Mul = dyn_cast<SCEVMulExpr>(Add->getOperand(0)); - - if (Mul == nullptr) - return false; - - const auto MatchURemWithDivisor = [&](const SCEV *B) { - // (SomeExpr + (-(SomeExpr / B) * B)). - if (Expr == getURemExpr(A, B)) { - LHS = A; - RHS = B; - return true; - } - return false; - }; - - // (SomeExpr + (-1 * (SomeExpr / B) * B)). - if (Mul->getNumOperands() == 3 && isa<SCEVConstant>(Mul->getOperand(0))) - return MatchURemWithDivisor(Mul->getOperand(1)) || - MatchURemWithDivisor(Mul->getOperand(2)); - - // (SomeExpr + ((-SomeExpr / B) * B)) or (SomeExpr + ((SomeExpr / B) * -B)). - if (Mul->getNumOperands() == 2) - return MatchURemWithDivisor(Mul->getOperand(1)) || - MatchURemWithDivisor(Mul->getOperand(0)) || - MatchURemWithDivisor(getNegativeSCEV(Mul->getOperand(1))) || - MatchURemWithDivisor(getNegativeSCEV(Mul->getOperand(0))); - return false; -}; |