From bed7f9eab2a18bcc8ba00917b8db8929b138eaff Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Thu, 24 Jan 2019 11:22:08 +0000 Subject: [PATCH] Revert "[HotColdSplitting] Get DT and PDT from the pass manager." This reverts commit a6982414edf315c39ae93f3c3322476217119e99 (llvm-svn: 352036), because it causes a memory leak in the pass manager. Failing bot http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10351/steps/check-llvm%20asan/logs/stdio llvm-svn: 352041 --- llvm/lib/Transforms/IPO/HotColdSplitting.cpp | 41 +++++--------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/llvm/lib/Transforms/IPO/HotColdSplitting.cpp b/llvm/lib/Transforms/IPO/HotColdSplitting.cpp index 0ff902d735c0..710a9e725690 100644 --- a/llvm/lib/Transforms/IPO/HotColdSplitting.cpp +++ b/llvm/lib/Transforms/IPO/HotColdSplitting.cpp @@ -168,11 +168,8 @@ public: HotColdSplitting(ProfileSummaryInfo *ProfSI, function_ref GBFI, function_ref GTTI, - function_ref GetDT, - function_ref GetPDT, std::function *GORE) - : PSI(ProfSI), GetBFI(GBFI), GetTTI(GTTI), GetDT(GetDT), GetPDT(GetPDT), - GetORE(GORE) {} + : PSI(ProfSI), GetBFI(GBFI), GetTTI(GTTI), GetORE(GORE) {} bool run(Module &M); private: @@ -185,8 +182,6 @@ private: ProfileSummaryInfo *PSI; function_ref GetBFI; function_ref GetTTI; - function_ref GetDT; - function_ref GetPDT; std::function *GetORE; }; @@ -200,8 +195,6 @@ public: void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired(); AU.addRequired(); - AU.addRequired(); - AU.addRequired(); AU.addRequired(); AU.addRequired(); } @@ -469,11 +462,12 @@ bool HotColdSplitting::outlineColdRegions(Function &F, bool HasProfileSummary) { ReversePostOrderTraversal RPOT(&F); // Calculate domtrees lazily. This reduces compile-time significantly. - DominatorTree *DT = nullptr; - PostDominatorTree *PDT = nullptr; + std::unique_ptr DT; + std::unique_ptr PDT; // Calculate BFI lazily (it's only used to query ProfileSummaryInfo). This - // reduces compile-time significantly. + // reduces compile-time significantly. TODO: When we *do* use BFI, we should + // be able to salvage its domtrees instead of recomputing them. BlockFrequencyInfo *BFI = nullptr; if (HasProfileSummary) BFI = GetBFI(F); @@ -498,9 +492,9 @@ bool HotColdSplitting::outlineColdRegions(Function &F, bool HasProfileSummary) { }); if (!DT) - DT = GetDT(F); + DT = make_unique(F); if (!PDT) - PDT = GetPDT(F); + PDT = make_unique(F); auto Region = OutliningRegion::create(*BB, *DT, *PDT); if (Region.empty()) @@ -601,13 +595,6 @@ bool HotColdSplittingLegacyPass::runOnModule(Module &M) { auto GBFI = [this](Function &F) { return &this->getAnalysis(F).getBFI(); }; - auto GetDT = [this](Function &F) { - return &this->getAnalysis(F).getDomTree(); - }; - auto GetPDT = [this](Function &F) { - return &this->getAnalysis(F).getPostDomTree(); - }; - std::unique_ptr ORE; std::function GetORE = [&ORE](Function &F) -> OptimizationRemarkEmitter & { @@ -615,7 +602,7 @@ bool HotColdSplittingLegacyPass::runOnModule(Module &M) { return *ORE.get(); }; - return HotColdSplitting(PSI, GBFI, GTTI, GetDT, GetPDT, &GetORE).run(M); + return HotColdSplitting(PSI, GBFI, GTTI, &GetORE).run(M); } PreservedAnalyses @@ -636,14 +623,6 @@ HotColdSplittingPass::run(Module &M, ModuleAnalysisManager &AM) { return FAM.getResult(F); }; - auto GetDT = [&FAM](Function &F) { - return &FAM.getResult(F); - }; - - auto GetPDT = [&FAM](Function &F) { - return &FAM.getResult(F); - }; - std::unique_ptr ORE; std::function GetORE = [&ORE](Function &F) -> OptimizationRemarkEmitter & { @@ -653,7 +632,7 @@ HotColdSplittingPass::run(Module &M, ModuleAnalysisManager &AM) { ProfileSummaryInfo *PSI = &AM.getResult(M); - if (HotColdSplitting(PSI, GBFI, GTTI, GetDT, GetPDT, &GetORE).run(M)) + if (HotColdSplitting(PSI, GBFI, GTTI, &GetORE).run(M)) return PreservedAnalyses::none(); return PreservedAnalyses::all(); } @@ -663,8 +642,6 @@ INITIALIZE_PASS_BEGIN(HotColdSplittingLegacyPass, "hotcoldsplit", "Hot Cold Splitting", false, false) INITIALIZE_PASS_DEPENDENCY(ProfileSummaryInfoWrapperPass) INITIALIZE_PASS_DEPENDENCY(BlockFrequencyInfoWrapperPass) -INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) -INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass) INITIALIZE_PASS_END(HotColdSplittingLegacyPass, "hotcoldsplit", "Hot Cold Splitting", false, false)