diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-11-15 18:33:16 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-11-15 18:33:16 +0000 |
commit | eb61bf54eeb06608b94df5ebe7d2adecd688f730 (patch) | |
tree | b443c708a7db61ed2de5343598c2f91fd12c1f2d /lib/Analysis | |
parent | 657519fc1b78c2acad5a4f4d2bb8843137a5d3a2 (diff) | |
download | external_llvm-eb61bf54eeb06608b94df5ebe7d2adecd688f730.zip external_llvm-eb61bf54eeb06608b94df5ebe7d2adecd688f730.tar.gz external_llvm-eb61bf54eeb06608b94df5ebe7d2adecd688f730.tar.bz2 |
Reverted r44163 per request
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44177 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis')
-rw-r--r-- | lib/Analysis/ScalarEvolution.cpp | 56 |
1 files changed, 4 insertions, 52 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp index 70321fa..6e50617 100644 --- a/lib/Analysis/ScalarEvolution.cpp +++ b/lib/Analysis/ScalarEvolution.cpp @@ -344,24 +344,6 @@ const Type *SCEVSDivExpr::getType() const { return LHS->getType(); } -// SCEVUDivs - Only allow the creation of one SCEVUDivExpr for any particular -// input. Don't use a SCEVHandle here, or else the object will never be -// deleted! -static ManagedStatic<std::map<std::pair<SCEV*, SCEV*>, - SCEVUDivExpr*> > SCEVUDivs; - -SCEVUDivExpr::~SCEVUDivExpr() { - SCEVUDivs->erase(std::make_pair(LHS, RHS)); -} - -void SCEVUDivExpr::print(std::ostream &OS) const { - OS << "(" << *LHS << " /u " << *RHS << ")"; -} - -const Type *SCEVUDivExpr::getType() const { - return LHS->getType(); -} - // SCEVAddRecExprs - Only allow the creation of one SCEVAddRecExpr for any // particular input. Don't use a SCEVHandle here, or else the object will never // be deleted! @@ -591,7 +573,7 @@ SCEVHandle SCEVAddRecExpr::evaluateAtIteration(SCEVHandle It, for (unsigned i = 1, e = getNumOperands(); i != e; ++i) { SCEVHandle BC = PartialFact(It, i, SE); Divisor *= i; - SCEVHandle Val = SE.getUDivExpr(SE.getMulExpr(BC, getOperand(i)), + SCEVHandle Val = SE.getSDivExpr(SE.getMulExpr(BC, getOperand(i)), SE.getIntegerSCEV(Divisor,Ty)); Result = SE.getAddExpr(Result, Val); } @@ -1055,8 +1037,7 @@ SCEVHandle ScalarEvolution::getMulExpr(std::vector<SCEVHandle> &Ops) { return Result; } -SCEVHandle ScalarEvolution::getSDivExpr(const SCEVHandle &LHS, - const SCEVHandle &RHS) { +SCEVHandle ScalarEvolution::getSDivExpr(const SCEVHandle &LHS, const SCEVHandle &RHS) { if (SCEVConstant *RHSC = dyn_cast<SCEVConstant>(RHS)) { if (RHSC->getValue()->equalsInt(1)) return LHS; // X sdiv 1 --> x @@ -1077,26 +1058,6 @@ SCEVHandle ScalarEvolution::getSDivExpr(const SCEVHandle &LHS, return Result; } -SCEVHandle ScalarEvolution::getUDivExpr(const SCEVHandle &LHS, - const SCEVHandle &RHS) { - if (SCEVConstant *RHSC = dyn_cast<SCEVConstant>(RHS)) { - if (RHSC->getValue()->equalsInt(1)) - return LHS; // X udiv 1 --> x - - if (SCEVConstant *LHSC = dyn_cast<SCEVConstant>(LHS)) { - Constant *LHSCV = LHSC->getValue(); - Constant *RHSCV = RHSC->getValue(); - return getUnknown(ConstantExpr::getUDiv(LHSCV, RHSCV)); - } - } - - // FIXME: implement folding of (X*4)/4 when we know X*4 doesn't overflow. - - SCEVUDivExpr *&Result = (*SCEVUDivs)[std::make_pair(LHS, RHS)]; - if (Result == 0) Result = new SCEVUDivExpr(LHS, RHS); - return Result; -} - /// SCEVAddRecExpr::get - Get a add recurrence expression for the /// specified loop. Simplify the expression as much as possible. @@ -1523,6 +1484,8 @@ SCEVHandle ScalarEvolutionsImpl::createSCEV(Value *V) { case Instruction::SDiv: return SE.getSDivExpr(getSCEV(I->getOperand(0)), getSCEV(I->getOperand(1))); + break; + case Instruction::Sub: return SE.getMinusSCEV(getSCEV(I->getOperand(0)), getSCEV(I->getOperand(1))); @@ -2182,16 +2145,6 @@ SCEVHandle ScalarEvolutionsImpl::getSCEVAtScope(SCEV *V, const Loop *L) { return SE.getSDivExpr(LHS, RHS); } - if (SCEVUDivExpr *Div = dyn_cast<SCEVUDivExpr>(V)) { - SCEVHandle LHS = getSCEVAtScope(Div->getLHS(), L); - if (LHS == UnknownValue) return LHS; - SCEVHandle RHS = getSCEVAtScope(Div->getRHS(), L); - if (RHS == UnknownValue) return RHS; - if (LHS == Div->getLHS() && RHS == Div->getRHS()) - return Div; // must be loop invariant - return SE.getUDivExpr(LHS, RHS); - } - // If this is a loop recurrence for a loop that does not contain L, then we // are dealing with the final value computed by the loop. if (SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(V)) { @@ -2735,4 +2688,3 @@ void ScalarEvolution::print(std::ostream &OS, const Module* ) const { for (LoopInfo::iterator I = LI.begin(), E = LI.end(); I != E; ++I) PrintLoopInfo(OS, this, *I); } - |