aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
diff options
context:
space:
mode:
authorMircea Trofin <mtrofin@google.com>2021-03-12 08:21:14 -0800
committerMircea Trofin <mtrofin@google.com>2021-03-18 09:44:34 -0700
commit92ccc6cb17a4fd1b9506bac51f2eb1a96f4cd345 (patch)
tree6928f0cadeaabbb344d3dd64df37e4cb66b4f211 /llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
parent6dad34454d4147b401dce668379b88acb748b789 (diff)
downloadllvm-92ccc6cb17a4fd1b9506bac51f2eb1a96f4cd345.zip
llvm-92ccc6cb17a4fd1b9506bac51f2eb1a96f4cd345.tar.gz
llvm-92ccc6cb17a4fd1b9506bac51f2eb1a96f4cd345.tar.bz2
Reapply "[NPM][CGSCC] FunctionAnalysisManagerCGSCCProxy: do not clear immutable function passes"
This reverts commit 11b70b9e3a7458b5b78c30020b56e8ca563a4801. The bot failure was due to ArgumentPromotion deleting functions without deleting their analyses. This was separately fixed in 4b1c807.
Diffstat (limited to 'llvm/unittests/Analysis/CGSCCPassManagerTest.cpp')
-rw-r--r--llvm/unittests/Analysis/CGSCCPassManagerTest.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp b/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
index 59ff97d..ceaeaaf 100644
--- a/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
+++ b/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
@@ -1942,5 +1942,30 @@ TEST_F(CGSCCPassManagerTest, TestInsertionOfNewNonTrivialCallEdge) {
ASSERT_TRUE(Ran);
}
+TEST_F(CGSCCPassManagerTest, TestFunctionPassesAreQueriedForInvalidation) {
+ std::unique_ptr<Module> M = parseIR("define void @f() { ret void }");
+ CGSCCPassManager CGPM;
+ bool SCCCalled = false;
+ FunctionPassManager FPM;
+ int ImmRuns = 0;
+ FAM.registerPass([&] { return TestImmutableFunctionAnalysis(ImmRuns); });
+ FPM.addPass(RequireAnalysisPass<TestImmutableFunctionAnalysis, Function>());
+ CGPM.addPass(
+ LambdaSCCPass([&](LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
+ LazyCallGraph &CG, CGSCCUpdateResult &UR) {
+ SCCCalled = true;
+ return PreservedAnalyses::none();
+ }));
+ CGPM.addPass(createCGSCCToFunctionPassAdaptor(
+ RequireAnalysisPass<TestImmutableFunctionAnalysis, Function>()));
+ ModulePassManager MPM;
+
+ MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM)));
+ MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM)));
+ MPM.run(*M, MAM);
+ ASSERT_EQ(ImmRuns, 1);
+ ASSERT_TRUE(SCCCalled);
+}
+
#endif
} // namespace