[llvm] r319841 - Revert r319794: [PGO] detect infinite loop and form MST properly: memory leak problem

Xinliang David Li via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 5 13:54:01 PST 2017


Author: davidxl
Date: Tue Dec  5 13:54:01 2017
New Revision: 319841

URL: http://llvm.org/viewvc/llvm-project?rev=319841&view=rev
Log:
Revert r319794: [PGO] detect  infinite loop and form MST properly: memory leak problem

Removed:
    llvm/trunk/test/Transforms/PGOProfile/infinite_loop_gen.ll
Modified:
    llvm/trunk/lib/Transforms/Instrumentation/CFGMST.h
    llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp

Modified: llvm/trunk/lib/Transforms/Instrumentation/CFGMST.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/CFGMST.h?rev=319841&r1=319840&r2=319841&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/CFGMST.h (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/CFGMST.h Tue Dec  5 13:54:01 2017
@@ -20,7 +20,6 @@
 #include "llvm/Analysis/BlockFrequencyInfo.h"
 #include "llvm/Analysis/BranchProbabilityInfo.h"
 #include "llvm/Analysis/CFG.h"
-#include "llvm/Analysis/LoopInfo.h"
 #include "llvm/Support/BranchProbability.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/raw_ostream.h"
@@ -137,21 +136,6 @@ public:
                      << " w = " << BBWeight << "\n");
       }
     }
-    // check if there is any infinite loop. If yes, add a fake edge from
-    // the header block to the fake node:
-    for (auto *L : *LI) {
-      SmallVector<BasicBlock *, 2> ExitingBlocks;
-      L->getExitingBlocks(ExitingBlocks);
-      if (!ExitingBlocks.empty())
-        continue;
-      auto *HB = L->getHeader();
-      if (!HB)
-        continue;
-      addEdge(HB, nullptr, UINT64_MAX);
-      DEBUG(dbgs() << "  Edge: from infinite loop header " 
-                   << HB->getName() << " to exit"
-                   << " w = " << UINT64_MAX << "\n");
-    }
   }
 
   // Sort CFG edges based on its weight.
@@ -228,13 +212,11 @@ public:
 
   BranchProbabilityInfo *BPI;
   BlockFrequencyInfo *BFI;
-  LoopInfo *LI;
 
 public:
   CFGMST(Function &Func, BranchProbabilityInfo *BPI_ = nullptr,
-         BlockFrequencyInfo *BFI_ = nullptr,
-         LoopInfo *LI_ = nullptr)
-      : F(Func), BPI(BPI_), BFI(BFI_), LI(LI_) {
+         BlockFrequencyInfo *BFI_ = nullptr)
+      : F(Func), BPI(BPI_), BFI(BFI_) {
     buildEdges();
     sortEdgesByWeight();
     computeMinimumSpanningTree();

Modified: llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp?rev=319841&r1=319840&r2=319841&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp (original)
+++ llvm/trunk/lib/Transforms/Instrumentation/PGOInstrumentation.cpp Tue Dec  5 13:54:01 2017
@@ -390,7 +390,6 @@ private:
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
     AU.addRequired<BlockFrequencyInfoWrapperPass>();
-    AU.addRequired<LoopInfoWrapperPass>();
   }
 };
 
@@ -416,7 +415,6 @@ private:
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
     AU.addRequired<BlockFrequencyInfoWrapperPass>();
-    AU.addRequired<LoopInfoWrapperPass>();
   }
 };
 
@@ -428,7 +426,6 @@ INITIALIZE_PASS_BEGIN(PGOInstrumentation
                       "PGO instrumentation.", false, false)
 INITIALIZE_PASS_DEPENDENCY(BlockFrequencyInfoWrapperPass)
 INITIALIZE_PASS_DEPENDENCY(BranchProbabilityInfoWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
 INITIALIZE_PASS_END(PGOInstrumentationGenLegacyPass, "pgo-instr-gen",
                     "PGO instrumentation.", false, false)
 
@@ -442,7 +439,6 @@ INITIALIZE_PASS_BEGIN(PGOInstrumentation
                       "Read PGO instrumentation profile.", false, false)
 INITIALIZE_PASS_DEPENDENCY(BlockFrequencyInfoWrapperPass)
 INITIALIZE_PASS_DEPENDENCY(BranchProbabilityInfoWrapperPass)
-INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
 INITIALIZE_PASS_END(PGOInstrumentationUseLegacyPass, "pgo-instr-use",
                     "Read PGO instrumentation profile.", false, false)
 
@@ -534,9 +530,9 @@ public:
       Function &Func,
       std::unordered_multimap<Comdat *, GlobalValue *> &ComdatMembers,
       bool CreateGlobalVar = false, BranchProbabilityInfo *BPI = nullptr,
-      BlockFrequencyInfo *BFI = nullptr, LoopInfo *LI = nullptr)
+      BlockFrequencyInfo *BFI = nullptr)
       : F(Func), ComdatMembers(ComdatMembers), ValueSites(IPVK_Last + 1),
-        SIVisitor(Func), MIVisitor(Func), MST(F, BPI, BFI, LI) {
+        SIVisitor(Func), MIVisitor(Func), MST(F, BPI, BFI) {
     // This should be done before CFG hash computation.
     SIVisitor.countSelects(Func);
     MIVisitor.countMemIntrinsics(Func);
@@ -719,10 +715,9 @@ BasicBlock *FuncPGOInstrumentation<Edge,
 // Critical edges will be split.
 static void instrumentOneFunc(
     Function &F, Module *M, BranchProbabilityInfo *BPI, BlockFrequencyInfo *BFI,
-    LoopInfo *LI,
     std::unordered_multimap<Comdat *, GlobalValue *> &ComdatMembers) {
   FuncPGOInstrumentation<PGOEdge, BBInfo> FuncInfo(F, ComdatMembers, true, BPI,
-                                                   BFI, LI);
+                                                   BFI);
   unsigned NumCounters = FuncInfo.getNumCounters();
 
   uint32_t I = 0;
@@ -849,10 +844,9 @@ public:
   PGOUseFunc(Function &Func, Module *Modu,
              std::unordered_multimap<Comdat *, GlobalValue *> &ComdatMembers,
              BranchProbabilityInfo *BPI = nullptr,
-             BlockFrequencyInfo *BFIin = nullptr,
-             LoopInfo *LI = nullptr)
+             BlockFrequencyInfo *BFIin = nullptr)
       : F(Func), M(Modu), BFI(BFIin),
-        FuncInfo(Func, ComdatMembers, false, BPI, BFIin, LI),
+        FuncInfo(Func, ComdatMembers, false, BPI, BFIin),
         FreqAttr(FFA_Normal) {}
 
   // Read counts for the instrumented BB from profile.
@@ -1385,8 +1379,7 @@ static void collectComdatMembers(
 
 static bool InstrumentAllFunctions(
     Module &M, function_ref<BranchProbabilityInfo *(Function &)> LookupBPI,
-    function_ref<BlockFrequencyInfo *(Function &)> LookupBFI,
-    function_ref<LoopInfo *(Function &)> LookupLI) {
+    function_ref<BlockFrequencyInfo *(Function &)> LookupBFI) {
   createIRLevelProfileFlagVariable(M);
   std::unordered_multimap<Comdat *, GlobalValue *> ComdatMembers;
   collectComdatMembers(M, ComdatMembers);
@@ -1396,8 +1389,7 @@ static bool InstrumentAllFunctions(
       continue;
     auto *BPI = LookupBPI(F);
     auto *BFI = LookupBFI(F);
-    auto *LI = LookupLI(F);
-    instrumentOneFunc(F, &M, BPI, BFI, LI, ComdatMembers);
+    instrumentOneFunc(F, &M, BPI, BFI, ComdatMembers);
   }
   return true;
 }
@@ -1412,10 +1404,7 @@ bool PGOInstrumentationGenLegacyPass::ru
   auto LookupBFI = [this](Function &F) {
     return &this->getAnalysis<BlockFrequencyInfoWrapperPass>(F).getBFI();
   };
-  auto LookupLI = [this](Function &F) {
-    return &this->getAnalysis<LoopInfoWrapperPass>(F).getLoopInfo();
-  };
-  return InstrumentAllFunctions(M, LookupBPI, LookupBFI, LookupLI);
+  return InstrumentAllFunctions(M, LookupBPI, LookupBFI);
 }
 
 PreservedAnalyses PGOInstrumentationGen::run(Module &M,
@@ -1429,11 +1418,7 @@ PreservedAnalyses PGOInstrumentationGen:
     return &FAM.getResult<BlockFrequencyAnalysis>(F);
   };
 
-  auto LookupLI = [&FAM](Function &F) {
-    return &FAM.getResult<LoopAnalysis>(F);
-  };
-
-  if (!InstrumentAllFunctions(M, LookupBPI, LookupBFI, LookupLI))
+  if (!InstrumentAllFunctions(M, LookupBPI, LookupBFI))
     return PreservedAnalyses::all();
 
   return PreservedAnalyses::none();
@@ -1442,8 +1427,7 @@ PreservedAnalyses PGOInstrumentationGen:
 static bool annotateAllFunctions(
     Module &M, StringRef ProfileFileName,
     function_ref<BranchProbabilityInfo *(Function &)> LookupBPI,
-    function_ref<BlockFrequencyInfo *(Function &)> LookupBFI,
-    function_ref<LoopInfo *(Function &)> LookupLI) {
+    function_ref<BlockFrequencyInfo *(Function &)> LookupBFI) {
   DEBUG(dbgs() << "Read in profile counters: ");
   auto &Ctx = M.getContext();
   // Read the counter array from file.
@@ -1479,8 +1463,7 @@ static bool annotateAllFunctions(
       continue;
     auto *BPI = LookupBPI(F);
     auto *BFI = LookupBFI(F);
-    auto *LI = LookupLI(F);
-    PGOUseFunc Func(F, &M, ComdatMembers, BPI, BFI, LI);
+    PGOUseFunc Func(F, &M, ComdatMembers, BPI, BFI);
     if (!Func.readCounters(PGOReader.get()))
       continue;
     Func.populateCounters();
@@ -1556,11 +1539,7 @@ PreservedAnalyses PGOInstrumentationUse:
     return &FAM.getResult<BlockFrequencyAnalysis>(F);
   };
 
-  auto LookupLI = [&FAM](Function &F) {
-    return &FAM.getResult<LoopAnalysis>(F);
-  };
-
-  if (!annotateAllFunctions(M, ProfileFileName, LookupBPI, LookupBFI, LookupLI))
+  if (!annotateAllFunctions(M, ProfileFileName, LookupBPI, LookupBFI))
     return PreservedAnalyses::all();
 
   return PreservedAnalyses::none();
@@ -1576,11 +1555,8 @@ bool PGOInstrumentationUseLegacyPass::ru
   auto LookupBFI = [this](Function &F) {
     return &this->getAnalysis<BlockFrequencyInfoWrapperPass>(F).getBFI();
   };
-  auto LookupLI = [this](Function &F) {
-    return &this->getAnalysis<LoopInfoWrapperPass>(F).getLoopInfo();
-  };
 
-  return annotateAllFunctions(M, ProfileFileName, LookupBPI, LookupBFI, LookupLI);
+  return annotateAllFunctions(M, ProfileFileName, LookupBPI, LookupBFI);
 }
 
 static std::string getSimpleNodeName(const BasicBlock *Node) {

Removed: llvm/trunk/test/Transforms/PGOProfile/infinite_loop_gen.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/PGOProfile/infinite_loop_gen.ll?rev=319840&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/PGOProfile/infinite_loop_gen.ll (original)
+++ llvm/trunk/test/Transforms/PGOProfile/infinite_loop_gen.ll (removed)
@@ -1,18 +0,0 @@
-; RUN: opt < %s -pgo-instr-gen -S -o -   | FileCheck %s
-
-define void @foo() {
-entry:
-  br label %while.body
-; CHECK: llvm.instrprof.increment
-
-  while.body:                                       ; preds = %entry, %while.body
-; CHECK: llvm.instrprof.increment
-    call void (...) @bar() #2
-    br label %while.body
-}
-
-declare void @bar(...)
-
-
-attributes #0 = { nounwind }
-




More information about the llvm-commits mailing list