aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
diff options
context:
space:
mode:
authorMircea Trofin <mtrofin@google.com>2021-03-11 10:43:16 -0800
committerMircea Trofin <mtrofin@google.com>2021-03-11 18:15:28 -0800
commit5eaeb0fa67e57391f5584a3f67fdb131e93afda6 (patch)
treecd99b1bc52a67df599b85c551775881be15d93f0 /llvm/unittests/Analysis/CGSCCPassManagerTest.cpp
parentbd2bdad19e5a3bf910da7c2d1936a7e18b47c084 (diff)
downloadllvm-5eaeb0fa67e57391f5584a3f67fdb131e93afda6.zip
llvm-5eaeb0fa67e57391f5584a3f67fdb131e93afda6.tar.gz
llvm-5eaeb0fa67e57391f5584a3f67fdb131e93afda6.tar.bz2
[NPM][CGSCC] FunctionAnalysisManagerCGSCCProxy: do not clear immutable function passes
Check with the analysis result by calling invalidate instead of clear on the analysis manager. Differential Revision: https://reviews.llvm.org/D98440
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