[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