[llvm] a52530d - Revert "[NPM] Do not run function simplification pipeline unnecessarily"

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Fri May 21 16:38:58 PDT 2021


Author: Arthur Eubanks
Date: 2021-05-21T16:38:02-07:00
New Revision: a52530dd6a6d2aa3b63637ad40e4fce8e89c34c2

URL: https://github.com/llvm/llvm-project/commit/a52530dd6a6d2aa3b63637ad40e4fce8e89c34c2
DIFF: https://github.com/llvm/llvm-project/commit/a52530dd6a6d2aa3b63637ad40e4fce8e89c34c2.diff

LOG: Revert "[NPM] Do not run function simplification pipeline unnecessarily"

This reverts commit 97ab068034161fb35e5c9a7b293bf1e569cf077b.

Depends on D100917, which is to be reverted.

Added: 
    

Modified: 
    llvm/include/llvm/Analysis/CGSCCPassManager.h
    llvm/lib/Analysis/CGSCCPassManager.cpp
    llvm/lib/Passes/PassBuilder.cpp
    llvm/lib/Passes/PassRegistry.def
    llvm/unittests/Analysis/CGSCCPassManagerTest.cpp

Removed: 
    llvm/test/Other/new-pass-manager-cgscc-fct-proxy.ll


################################################################################
diff  --git a/llvm/include/llvm/Analysis/CGSCCPassManager.h b/llvm/include/llvm/Analysis/CGSCCPassManager.h
index 4a9f7f118950..985424a74054 100644
--- a/llvm/include/llvm/Analysis/CGSCCPassManager.h
+++ b/llvm/include/llvm/Analysis/CGSCCPassManager.h
@@ -487,18 +487,6 @@ class CGSCCToFunctionPassAdaptor
   std::unique_ptr<PassConceptT> Pass;
 };
 
-/// A 'signaling' analysis to indicate whether a function has been changed. It
-/// is meant to control the runs of the function pass(es) managed by the
-/// FunctionAnalysisManagerCGSCCProxy.
-class FunctionStatusAnalysis
-    : public AnalysisInfoMixin<FunctionStatusAnalysis> {
-public:
-  static AnalysisKey Key;
-  struct Result {};
-
-  Result run(Function &F, FunctionAnalysisManager &FAM) { return Result(); }
-};
-
 /// A function to deduce a function pass type and wrap it in the
 /// templated adaptor.
 template <typename FunctionPassT>

diff  --git a/llvm/lib/Analysis/CGSCCPassManager.cpp b/llvm/lib/Analysis/CGSCCPassManager.cpp
index 38d5c205e5e9..c01704162e96 100644
--- a/llvm/lib/Analysis/CGSCCPassManager.cpp
+++ b/llvm/lib/Analysis/CGSCCPassManager.cpp
@@ -44,8 +44,6 @@ static cl::opt<bool> AbortOnMaxDevirtIterationsReached(
     cl::desc("Abort when the max iterations for devirtualization CGSCC repeat "
              "pass is reached"));
 
-AnalysisKey FunctionStatusAnalysis::Key;
-
 // Explicit instantiations for the core proxy templates.
 template class AllAnalysesOn<LazyCallGraph::SCC>;
 template class AnalysisManager<LazyCallGraph::SCC, LazyCallGraph &>;
@@ -543,13 +541,6 @@ PreservedAnalyses CGSCCToFunctionPassAdaptor::run(LazyCallGraph::SCC &C,
       continue;
 
     Function &F = N->getFunction();
-    // The expectation here is that FunctionStatusAnalysis was required at the
-    // end of the function passes pipeline managed by this adaptor. Then, if any
-    // CGSCC passes were re-run because CGSCCs changed (or devirtualization),
-    // and none changed F, then FunctionStatusAnalysis would still be cached
-    // here and we don't need to rerun the passes managed by this adaptor.
-    if (FAM.getCachedResult<FunctionStatusAnalysis>(F))
-      continue;
 
     PassInstrumentation PI = FAM.getResult<PassInstrumentationAnalysis>(F);
     if (!PI.runBeforePass<Function>(*Pass, F))

diff  --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp
index 4f18dac2d1e0..3a44dcf82ad6 100644
--- a/llvm/lib/Passes/PassBuilder.cpp
+++ b/llvm/lib/Passes/PassBuilder.cpp
@@ -277,11 +277,6 @@ static cl::opt<bool> EnableO3NonTrivialUnswitching(
     "enable-npm-O3-nontrivial-unswitch", cl::init(true), cl::Hidden,
     cl::ZeroOrMore, cl::desc("Enable non-trivial loop unswitching for -O3"));
 
-static cl::opt<bool> DoNotRerunFunctionPasses(
-    "cgscc-npm-no-fp-rerun", cl::init(false),
-    cl::desc("Do not rerun function passes wrapped by the scc pass adapter, if "
-             "they were run already and the function hasn't changed."));
-
 PipelineTuningOptions::PipelineTuningOptions() {
   LoopInterleaving = true;
   LoopVectorization = true;
@@ -1027,10 +1022,8 @@ PassBuilder::buildInlinerPipeline(OptimizationLevel Level,
 
   // Lastly, add the core function simplification pipeline nested inside the
   // CGSCC walk.
-  auto FSP = buildFunctionSimplificationPipeline(Level, Phase);
-  if (DoNotRerunFunctionPasses)
-    FSP.addPass(RequireAnalysisPass<FunctionStatusAnalysis, Function>());
-  MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor(std::move(FSP)));
+  MainCGPipeline.addPass(createCGSCCToFunctionPassAdaptor(
+      buildFunctionSimplificationPipeline(Level, Phase)));
 
   return MIWP;
 }
@@ -1189,9 +1182,6 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level,
     MPM.addPass(SyntheticCountsPropagation());
 
   MPM.addPass(buildInlinerPipeline(Level, Phase));
-  if (DoNotRerunFunctionPasses)
-    MPM.addPass(createModuleToFunctionPassAdaptor(
-        InvalidateAnalysisPass<FunctionStatusAnalysis>()));
 
   if (EnableMemProfiler && Phase != ThinOrFullLTOPhase::ThinLTOPreLink) {
     MPM.addPass(createModuleToFunctionPassAdaptor(MemProfilerPass()));

diff  --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def
index 66bbe6eea4ad..99e190b99fc4 100644
--- a/llvm/lib/Passes/PassRegistry.def
+++ b/llvm/lib/Passes/PassRegistry.def
@@ -173,7 +173,6 @@ FUNCTION_ANALYSIS("targetir",
 FUNCTION_ANALYSIS("verify", VerifierAnalysis())
 FUNCTION_ANALYSIS("pass-instrumentation", PassInstrumentationAnalysis(PIC))
 FUNCTION_ANALYSIS("divergence", DivergenceAnalysis())
-FUNCTION_ANALYSIS("func-status", FunctionStatusAnalysis())
 
 #ifndef FUNCTION_ALIAS_ANALYSIS
 #define FUNCTION_ALIAS_ANALYSIS(NAME, CREATE_PASS)                             \

diff  --git a/llvm/test/Other/new-pass-manager-cgscc-fct-proxy.ll b/llvm/test/Other/new-pass-manager-cgscc-fct-proxy.ll
deleted file mode 100644
index 90f23faefdfe..000000000000
--- a/llvm/test/Other/new-pass-manager-cgscc-fct-proxy.ll
+++ /dev/null
@@ -1,41 +0,0 @@
-; RUN: opt %s -disable-verify -disable-output -passes='default<O2>' -debug-pass-manager=verbose -cgscc-npm-no-fp-rerun=1 \
-; RUN:  2>&1 | FileCheck %s -check-prefixes=CHECK,NOREPS
-; RUN: opt %s -disable-verify -disable-output -passes='default<O2>' -debug-pass-manager=verbose -cgscc-npm-no-fp-rerun=0 \
-; RUN:  2>&1 | FileCheck %s -check-prefixes=CHECK,REPS
-
-; Pre-attribute the functions to avoid the PostOrderFunctionAttrsPass cause
-; changes (and keep the test simple)
-attributes #0 = { nofree noreturn nosync nounwind readnone }
-
-define void @f1(void()* %p) {
-  call void %p()
-  ret void
-}
-
-define void @f2() #0 {
-  call void @f1(void()* @f2)
-  call void @f3()
-  ret void
-}
-
-define void @f3() #0 {
-  call void @f2()
-  ret void
-}
-
-; CHECK:          Running pass: PassManager{{.*}}CGSCC
-; CHECK-NEXT:     Running pass: InlinerPass on (f1)
-; NOREPS:         Running analysis: FunctionStatusAnalysis on f1
-
-; CHECK:          Running pass: PassManager{{.*}}CGSCC
-; CHECK-NEXT:     Running pass: InlinerPass on (f2, f3)
-; NOREPS:         Running analysis: FunctionStatusAnalysis on f2
-
-; CHECK:          Running pass: PassManager{{.*}}CGSCC
-; CHECK-NEXT:     Running pass: InlinerPass on (f2)
-; REPS:           Running pass: SROA on f2
-; NOREPS-NOT:     Running pass: SROA on f2
-
-; CHECK:          Running pass: PassManager{{.*}}CGSCC
-; CHECK-NEXT:     Running pass: InlinerPass on (f3)
-; CHECK:          Running pass: SROA on f3

diff  --git a/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp b/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
index 5b0eb90f75a4..e0b0aeda5bb2 100644
--- a/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
+++ b/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
@@ -251,7 +251,6 @@ class CGSCCPassManagerTest : public ::testing::Test {
             "  call void @h1()\n"
             "  ret void\n"
             "}\n")) {
-    FAM.registerPass([&] { return FunctionStatusAnalysis(); });
     FAM.registerPass([&] { return TargetLibraryAnalysis(); });
     MAM.registerPass([&] { return LazyCallGraphAnalysis(); });
     MAM.registerPass([&] { return FunctionAnalysisManagerModuleProxy(FAM); });


        


More information about the llvm-commits mailing list