Index: include/polly/ScopInfo.h =================================================================== --- include/polly/ScopInfo.h +++ include/polly/ScopInfo.h @@ -91,8 +91,7 @@ /// through the loop. typedef std::map LoopBoundMapType; -typedef std::deque AccFuncSetType; -typedef std::map AccFuncMapType; +typedef std::vector> AccFuncVector; /// @brief A class to store information about arrays in the SCoP. /// @@ -1348,10 +1347,10 @@ /// 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 @@ 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 @@ 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: lib/Analysis/ScopBuilder.cpp =================================================================== --- lib/Analysis/ScopBuilder.cpp +++ lib/Analysis/ScopBuilder.cpp @@ -481,7 +481,6 @@ if (!Stmt) return nullptr; - AccFuncSetType &AccList = scop->getOrCreateAccessFunctions(BB); Value *BaseAddr = BaseAddress; std::string BaseName = getIslCompatibleName("MemRef_", BaseAddr, ""); @@ -509,10 +508,13 @@ 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: lib/Analysis/ScopInfo.cpp =================================================================== --- lib/Analysis/ScopInfo.cpp +++ lib/Analysis/ScopInfo.cpp @@ -3144,7 +3144,7 @@ ScopArrayInfoSet.clear(); ScopArrayInfoMap.clear(); ScopArrayNameMap.clear(); - AccFuncMap.clear(); + AccessFunctions.clear(); } void Scop::updateAccessDimensionality() {