diff options
author | Mircea Trofin <mtrofin@google.com> | 2021-03-11 10:43:16 -0800 |
---|---|---|
committer | Mircea Trofin <mtrofin@google.com> | 2021-03-11 18:15:28 -0800 |
commit | 5eaeb0fa67e57391f5584a3f67fdb131e93afda6 (patch) | |
tree | cd99b1bc52a67df599b85c551775881be15d93f0 /llvm/unittests/Analysis/CGSCCPassManagerTest.cpp | |
parent | bd2bdad19e5a3bf910da7c2d1936a7e18b47c084 (diff) | |
download | llvm-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.cpp | 25 |
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 |