Index: include/llvm/Analysis/InlineCost.h =================================================================== --- include/llvm/Analysis/InlineCost.h +++ include/llvm/Analysis/InlineCost.h @@ -44,9 +44,12 @@ /// info is computed on demand and cached unless they are invalidated. class BlockFrequencyAnalysis { private: - DenseMap BFM; + DenseMap> BFM; public: + // Make the constructor and destructor out-of-line to avoid including + // BlockFrerquencyInfo.h + BlockFrequencyAnalysis(); ~BlockFrequencyAnalysis(); /// \brief Returns BlockFrequencyInfo for a function. BlockFrequencyInfo *getBlockFrequencyInfo(Function *); Index: lib/Analysis/InlineCost.cpp =================================================================== --- lib/Analysis/InlineCost.cpp +++ lib/Analysis/InlineCost.cpp @@ -1577,31 +1577,25 @@ return BBCount; } -BlockFrequencyAnalysis::~BlockFrequencyAnalysis() { - for (auto &Entry : BFM) { - delete Entry.second; - } -} +BlockFrequencyAnalysis::BlockFrequencyAnalysis() {} +BlockFrequencyAnalysis::~BlockFrequencyAnalysis() {} /// \brief Get BlockFrequencyInfo for a function. BlockFrequencyInfo *BlockFrequencyAnalysis::getBlockFrequencyInfo(Function *F) { auto Iter = BFM.find(F); if (Iter != BFM.end()) - return Iter->second; + return Iter->second.get(); // We need to create a BlockFrequencyInfo object for F and store it. DominatorTree DT; DT.recalculate(*F); LoopInfo LI(DT); BranchProbabilityInfo BPI(*F, LI); BlockFrequencyInfo *BFI = new BlockFrequencyInfo(*F, BPI, LI); - BFM[F] = BFI; + BFM[F].reset(BFI); return BFI; } /// \brief Invalidate BlockFrequencyInfo for a function. void BlockFrequencyAnalysis::invalidateBlockFrequencyInfo(Function *F) { - if (BFM.count(F)) { - delete BFM[F]; - BFM.erase(F); - } + BFM.erase(F); }