[polly] r308152 - ScopInfo: Remove not-in-DomainMap statements in separate function

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 16 16:55:38 PDT 2017


Author: grosser
Date: Sun Jul 16 16:55:38 2017
New Revision: 308152

URL: http://llvm.org/viewvc/llvm-project?rev=308152&view=rev
Log:
ScopInfo: Remove not-in-DomainMap statements in separate function

This separates ScopBuilder internal and ScopBuilder external functionality.

Modified:
    polly/trunk/include/polly/ScopInfo.h
    polly/trunk/lib/Analysis/ScopBuilder.cpp
    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=308152&r1=308151&r2=308152&view=diff
==============================================================================
--- polly/trunk/include/polly/ScopInfo.h (original)
+++ polly/trunk/include/polly/ScopInfo.h Sun Jul 16 16:55:38 2017
@@ -2148,6 +2148,19 @@ private:
   /// all memory accesses have been modeled and canonicalized.
   void assumeNoOutOfBounds();
 
+  /// Remove statements from the list of scop statements.
+  ///
+  /// @param ShouldDelete A function that returns true if the statement passed
+  ///                     to it should be deleted.
+  void removeStmts(std::function<bool(ScopStmt &)> ShouldDelete);
+
+  /// Removes @p Stmt from the StmtMap.
+  void removeFromStmtMap(ScopStmt &Stmt);
+
+  /// Removes all statements where the entry block of the statement does not
+  /// have a corresponding domain in the domain map.
+  void removeStmtNotInDomainMap();
+
   /// Mark arrays that have memory accesses with FortranArrayDescriptor.
   void markFortranArrays();
 

Modified: polly/trunk/lib/Analysis/ScopBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopBuilder.cpp?rev=308152&r1=308151&r2=308152&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopBuilder.cpp (original)
+++ polly/trunk/lib/Analysis/ScopBuilder.cpp Sun Jul 16 16:55:38 2017
@@ -982,6 +982,7 @@ void ScopBuilder::buildScop(Region &R, A
 
   // Remove empty statements.
   // Exit early in case there are no executable statements left in this scop.
+  scop->removeStmtNotInDomainMap();
   scop->simplifySCoP(false);
   if (scop->isEmpty())
     return;

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=308152&r1=308151&r2=308152&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Sun Jul 16 16:55:38 2017
@@ -3728,13 +3728,37 @@ void Scop::assumeNoOutOfBounds() {
       Access->assumeNoOutOfBound();
 }
 
-void Scop::simplifySCoP(bool AfterHoisting) {
+void Scop::removeFromStmtMap(ScopStmt &Stmt) {
+  if (Stmt.isRegionStmt())
+    for (BasicBlock *BB : Stmt.getRegion()->blocks())
+      StmtMap.erase(BB);
+  else
+    StmtMap.erase(Stmt.getBasicBlock());
+}
+
+void Scop::removeStmts(std::function<bool(ScopStmt &)> ShouldDelete) {
   for (auto StmtIt = Stmts.begin(), StmtEnd = Stmts.end(); StmtIt != StmtEnd;) {
-    ScopStmt &Stmt = *StmtIt;
+    if (!ShouldDelete(*StmtIt)) {
+      StmtIt++;
+      continue;
+    }
 
+    removeFromStmtMap(*StmtIt);
+    StmtIt = Stmts.erase(StmtIt);
+  }
+}
+
+void Scop::removeStmtNotInDomainMap() {
+  auto ShouldDelete = [this](ScopStmt &Stmt) -> bool {
+    return !this->DomainMap[Stmt.getEntryBlock()];
+  };
+  removeStmts(ShouldDelete);
+}
+
+void Scop::simplifySCoP(bool AfterHoisting) {
+
+  auto ShouldDelete = [AfterHoisting](ScopStmt &Stmt) -> bool {
     bool RemoveStmt = Stmt.isEmpty();
-    if (!RemoveStmt)
-      RemoveStmt = !DomainMap[Stmt.getEntryBlock()];
 
     // Remove read only statements only after invariant load hoisting.
     if (!RemoveStmt && AfterHoisting) {
@@ -3749,21 +3773,10 @@ void Scop::simplifySCoP(bool AfterHoisti
 
       RemoveStmt = OnlyRead;
     }
+    return RemoveStmt;
+  };
 
-    if (!RemoveStmt) {
-      StmtIt++;
-      continue;
-    }
-
-    // Remove the statement because it is unnecessary.
-    if (Stmt.isRegionStmt())
-      for (BasicBlock *BB : Stmt.getRegion()->blocks())
-        StmtMap.erase(BB);
-    else
-      StmtMap.erase(Stmt.getBasicBlock());
-
-    StmtIt = Stmts.erase(StmtIt);
-  }
+  removeStmts(ShouldDelete);
 }
 
 InvariantEquivClassTy *Scop::lookupInvariantEquivClass(Value *Val) {




More information about the llvm-commits mailing list