[polly] r256931 - Extract constant parts of the schedule generation [NFC]
Johannes Doerfert via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 6 04:59:23 PST 2016
Author: jdoerfert
Date: Wed Jan 6 06:59:23 2016
New Revision: 256931
URL: http://llvm.org/viewvc/llvm-project?rev=256931&view=rev
Log:
Extract constant parts of the schedule generation [NFC]
Modified:
polly/trunk/include/polly/ScopInfo.h
polly/trunk/lib/Analysis/ScopInfo.cpp
Modified: polly/trunk/include/polly/ScopInfo.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/include/polly/ScopInfo.h?rev=256931&r1=256930&r2=256931&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopInfo.h (original)
+++ polly/trunk/include/polly/ScopInfo.h Wed Jan 6 06:59:23 2016
@@ -1404,7 +1404,11 @@ private:
/// the dimensionality of the underlying ScopArrayInfo object.
void updateAccessDimensionality();
- /// @brief Build Schedule and ScopStmts.
+ /// @brief Build Schedule for the SCoP region.
+ ///
+ void buildSchedule();
+
+ /// @brief Build Schedule for the region @p R.
///
/// @param R The current region traversed.
/// @param LoopSchedules Map from loops to their schedule and progress.
Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=256931&r1=256930&r2=256931&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Wed Jan 6 06:59:23 2016
@@ -2676,11 +2676,7 @@ void Scop::init(AliasAnalysis &AA, Assum
for (ScopStmt &Stmt : Stmts)
Stmt.init();
- DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> LoopSchedules;
- Loop *L = getLoopSurroundingRegion(R, LI);
- LoopSchedules[L];
- buildSchedule(&R, LoopSchedules);
- Schedule = LoopSchedules[L].first;
+ buildSchedule();
if (isl_set_is_empty(AssumedContext))
return;
@@ -3431,21 +3427,28 @@ void Scop::addScopStmt(BasicBlock *BB, R
}
}
-void Scop::buildSchedule(
- Region *R,
- DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> &LoopSchedules) {
+void Scop::buildSchedule() {
- if (SD.isNonAffineSubRegion(R, &getRegion())) {
- Loop *L = getLoopSurroundingRegion(*R, LI);
- auto &LSchedulePair = LoopSchedules[L];
- ScopStmt *Stmt = getStmtForBasicBlock(R->getEntry());
+ // Special case for SCoPs that consist only of one non-affine region.
+ if (SD.isNonAffineSubRegion(&getRegion(), &getRegion())) {
+ ScopStmt *Stmt = getStmtForBasicBlock(getRegion().getEntry());
isl_set *Domain = Stmt->getDomain();
- auto *UDomain = isl_union_set_from_set(Domain);
- auto *StmtSchedule = isl_schedule_from_domain(UDomain);
- LSchedulePair.first = StmtSchedule;
+ Schedule = isl_schedule_from_domain(isl_union_set_from_set(Domain));
return;
}
+ // For general SCoPs invoke the recursive schedule generation.
+ DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> LoopSchedules;
+ Loop *L = getLoopSurroundingRegion(getRegion(), LI);
+ LoopSchedules[L];
+ buildSchedule(&getRegion(), LoopSchedules);
+ Schedule = LoopSchedules[L].first;
+}
+
+void Scop::buildSchedule(
+ Region *R,
+ DenseMap<Loop *, std::pair<isl_schedule *, unsigned>> &LoopSchedules) {
+
ReversePostOrderTraversal<Region *> RTraversal(R);
for (auto *RN : RTraversal) {
More information about the llvm-commits
mailing list