Simplify AccFuncMap to vector<> AccessFunctions
authorRoman Gareev <gareevroman@gmail.com>
Sun, 21 Aug 2016 11:09:19 +0000 (11:09 +0000)
committerRoman Gareev <gareevroman@gmail.com>
Sun, 21 Aug 2016 11:09:19 +0000 (11:09 +0000)
getAccessFunctions() is dead code and the 'BB' argument
of getOrCreateAccessFunctions() is not used. This patch deletes
getAccessFunctions and transforms AccFuncMap into
a std::vector<std::unique_ptr<MemoryAccess>> AccessFunctions.

Reviewed-by: Tobias Grosser <tobias@grosser.es>
Differential Revision: https://reviews.llvm.org/D23759

llvm-svn: 279394

polly/include/polly/ScopInfo.h
polly/lib/Analysis/ScopBuilder.cpp
polly/lib/Analysis/ScopInfo.cpp

index e84f6eb..fa115a8 100644 (file)
@@ -91,8 +91,7 @@ enum AssumptionSign { AS_ASSUMPTION, AS_RESTRICTION };
 /// through the loop.
 typedef std::map<const Loop *, const SCEV *> LoopBoundMapType;
 
-typedef std::deque<MemoryAccess> AccFuncSetType;
-typedef std::map<const BasicBlock *, AccFuncSetType> AccFuncMapType;
+typedef std::vector<std::unique_ptr<MemoryAccess>> AccFuncVector;
 
 /// @brief A class to store information about arrays in the SCoP.
 ///
@@ -1348,10 +1347,10 @@ private:
   /// The underlying Region.
   Region &R;
 
-  // Access function of statements (currently BasicBlocks) .
+  // Access functions of the SCoP.
   //
   // This owns all the MemoryAccess objects of the Scop created in this pass.
-  AccFuncMapType AccFuncMap;
+  AccFuncVector AccessFunctions;
 
   /// Flag to indicate that the scheduler actually optimized the SCoP.
   bool IsOptimized;
@@ -1532,9 +1531,10 @@ private:
   Scop(Region &R, ScalarEvolution &SE, LoopInfo &LI,
        ScopDetection::DetectionContext &DC);
 
-  /// @brief Get or create the access function set in a BasicBlock
-  AccFuncSetType &getOrCreateAccessFunctions(const BasicBlock *BB) {
-    return AccFuncMap[BB];
+  /// @brief Add the access function to all MemoryAccess objects of the Scop
+  ///        created in this pass.
+  void addAccessFunction(MemoryAccess *Access) {
+    AccessFunctions.emplace_back(Access);
   }
   //@}
 
@@ -1844,17 +1844,6 @@ private:
 public:
   ~Scop();
 
-  /// @brief Get all access functions in a BasicBlock
-  ///
-  /// @param  BB The BasicBlock that containing the access functions.
-  ///
-  /// @return All access functions in BB
-  ///
-  AccFuncSetType *getAccessFunctions(const BasicBlock *BB) {
-    AccFuncMapType::iterator at = AccFuncMap.find(BB);
-    return at != AccFuncMap.end() ? &(at->second) : 0;
-  }
-
   ScalarEvolution *getSE() const;
 
   /// @brief Get the count of parameters used in this Scop.
index a14033e..13695d0 100644 (file)
@@ -481,7 +481,6 @@ MemoryAccess *ScopBuilder::addMemoryAccess(
   if (!Stmt)
     return nullptr;
 
-  AccFuncSetType &AccList = scop->getOrCreateAccessFunctions(BB);
   Value *BaseAddr = BaseAddress;
   std::string BaseName = getIslCompatibleName("MemRef_", BaseAddr, "");
 
@@ -509,10 +508,13 @@ MemoryAccess *ScopBuilder::addMemoryAccess(
   if (!isKnownMustAccess && AccType == MemoryAccess::MUST_WRITE)
     AccType = MemoryAccess::MAY_WRITE;
 
-  AccList.emplace_back(Stmt, Inst, AccType, BaseAddress, ElementType, Affine,
+  auto *Access =
+      new MemoryAccess(Stmt, Inst, AccType, BaseAddress, ElementType, Affine,
                        Subscripts, Sizes, AccessValue, Kind, BaseName);
-  Stmt->addAccess(&AccList.back());
-  return &AccList.back();
+
+  scop->addAccessFunction(Access);
+  Stmt->addAccess(Access);
+  return Access;
 }
 
 void ScopBuilder::addArrayAccess(
index 49accbf..1d06694 100644 (file)
@@ -3144,7 +3144,7 @@ Scop::~Scop() {
   ScopArrayInfoSet.clear();
   ScopArrayInfoMap.clear();
   ScopArrayNameMap.clear();
-  AccFuncMap.clear();
+  AccessFunctions.clear();
 }
 
 void Scop::updateAccessDimensionality() {