[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