TempScop: Remove SCEVAffFunc from LoopBoundInfo

This is not needed anymore -> Reduce impact of SCEVAffFunc.

llvm-svn: 143575
This commit is contained in:
Tobias Grosser 2011-11-02 21:37:51 +00:00
parent 65fa78e975
commit 1179afafca
3 changed files with 12 additions and 7 deletions

View File

@ -167,7 +167,7 @@ typedef SmallVector<Comparison, 4> BBCond;
/// A canonical induction variable is:
/// an integer recurrence that starts at 0 and increments by one each time
/// through the loop.
typedef std::map<const Loop*, SCEVAffFunc> LoopBoundMapType;
typedef std::map<const Loop*, const SCEV*> LoopBoundMapType;
/// Mapping BBs to its condition constrains
typedef std::map<const BasicBlock*, BBCond> BBCondMapType;
@ -234,7 +234,7 @@ public:
///
/// @return The bounds of the loop L in { Lower bound, Upper bound } form.
///
const SCEVAffFunc &getLoopBound(const Loop *L) const {
const SCEV *getLoopBound(const Loop *L) const {
LoopBoundMapType::const_iterator at = LoopBounds.find(L);
assert(at != LoopBounds.end() && "Only valid loop is allow!");
return at->second;

View File

@ -639,7 +639,7 @@ __isl_give isl_set *ScopStmt::addLoopBoundsToDomain(__isl_take isl_set *Domain,
// IV <= LatchExecutions.
const Loop *L = getLoopForDimension(i);
const SCEV *LatchExecutions = tempScop.getLoopBound(L).OriginalSCEV;
const SCEV *LatchExecutions = tempScop.getLoopBound(L);
isl_pw_aff *UpperBound = SCEVAffinator::getPwAff(this, LatchExecutions);
isl_set *UpperBoundSet = isl_pw_aff_le_set(IV, UpperBound);
Domain = isl_set_intersect(Domain, UpperBoundSet);

View File

@ -156,7 +156,7 @@ void TempScop::printDetail(llvm::raw_ostream &OS, ScalarEvolution *SE,
if (at != LoopBounds.end()) {
OS.indent(ind) << "Bounds of Loop: " << at->first->getHeader()->getName()
<< ":\t{ ";
OS << *(at->second.OriginalSCEV);
OS << *(at->second);
OS << " }\n";
ind += 2;
}
@ -279,9 +279,14 @@ void TempScopInfo::buildLoopBounds(TempScop &Scop) {
if (LoopBounds.find(L) != LoopBounds.end())
continue;
const SCEV *LoopCount = SE->getBackedgeTakenCount(L);
LoopBounds[L] = SCEVAffFunc(SCEVAffFunc::Eq, LoopCount);
buildAffineFunction(LoopCount, LoopBounds[L], Scop.getMaxRegion(),
const SCEV *BackedgeTakenCount = SE->getBackedgeTakenCount(L);
LoopBounds[L] = BackedgeTakenCount;
// FIXME: Do not build TempSCEVAffFunc. It is not needed anywhere else
// and only build to register the parameters in this SCoP. We should
// move this functionality to the ScopDetection.
SCEVAffFunc Temp(SCEVAffFunc::Eq, BackedgeTakenCount);
buildAffineFunction(BackedgeTakenCount, Temp, Scop.getMaxRegion(),
Scop.getParamSet());
Loop *OL = R.outermostLoopInRegion(L);