diff options
author | Mircea Trofin <mtrofin@google.com> | 2021-03-12 08:21:14 -0800 |
---|---|---|
committer | Mircea Trofin <mtrofin@google.com> | 2021-03-18 09:44:34 -0700 |
commit | 92ccc6cb17a4fd1b9506bac51f2eb1a96f4cd345 (patch) | |
tree | 6928f0cadeaabbb344d3dd64df37e4cb66b4f211 /llvm/unittests/Analysis/CGSCCPassManagerTest.cpp | |
parent | 6dad34454d4147b401dce668379b88acb748b789 (diff) | |
download | llvm-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.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 |