diff options
| -rw-r--r-- | llvm/lib/Analysis/CGSCCPassManager.cpp | 1 | ||||
| -rw-r--r-- | llvm/unittests/Analysis/CGSCCPassManagerTest.cpp | 32 |
2 files changed, 32 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/CGSCCPassManager.cpp b/llvm/lib/Analysis/CGSCCPassManager.cpp index 9cceed4ba87..efffc8e4eba 100644 --- a/llvm/lib/Analysis/CGSCCPassManager.cpp +++ b/llvm/lib/Analysis/CGSCCPassManager.cpp @@ -50,7 +50,6 @@ char FunctionAnalysisManagerCGSCCProxy::PassID; FunctionAnalysisManagerCGSCCProxy::Result FunctionAnalysisManagerCGSCCProxy::run(LazyCallGraph::SCC &C) { - assert(FAM->empty() && "Function analyses ran prior to the CGSCC proxy!"); return Result(*FAM); } diff --git a/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp b/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp index 49611d6dd3d..8d219e29844 100644 --- a/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp +++ b/llvm/unittests/Analysis/CGSCCPassManagerTest.cpp @@ -102,6 +102,30 @@ private: char TestFunctionAnalysis::PassID; +class TestImmutableFunctionAnalysis { +public: + struct Result { + bool invalidate(Function &, const PreservedAnalyses &) { return false; } + }; + + static void *ID() { return (void *)&PassID; } + static StringRef name() { return "TestImmutableFunctionAnalysis"; } + + TestImmutableFunctionAnalysis(int &Runs) : Runs(Runs) {} + + Result run(Function &F, FunctionAnalysisManager *AM) { + ++Runs; + return Result(); + } + +private: + static char PassID; + + int &Runs; +}; + +char TestImmutableFunctionAnalysis::PassID; + struct TestModulePass { TestModulePass(int &RunCount) : RunCount(RunCount) {} @@ -155,6 +179,9 @@ struct TestSCCPass { TestFunctionAnalysis::Result &FAR = FAM.getResult<TestFunctionAnalysis>(N.getFunction()); AnalyzedInstrCount += FAR.InstructionCount; + + // Just ensure we get the immutable results. + (void)FAM.getResult<TestImmutableFunctionAnalysis>(N.getFunction()); } } @@ -234,6 +261,10 @@ TEST_F(CGSCCPassManagerTest, Basic) { FunctionAnalysisManager FAM(/*DebugLogging*/ true); int FunctionAnalysisRuns = 0; FAM.registerPass([&] { return TestFunctionAnalysis(FunctionAnalysisRuns); }); + int ImmutableFunctionAnalysisRuns = 0; + FAM.registerPass([&] { + return TestImmutableFunctionAnalysis(ImmutableFunctionAnalysisRuns); + }); CGSCCAnalysisManager CGAM(/*DebugLogging*/ true); int SCCAnalysisRuns = 0; @@ -277,6 +308,7 @@ TEST_F(CGSCCPassManagerTest, Basic) { EXPECT_EQ(1, ModuleAnalysisRuns); EXPECT_EQ(4, SCCAnalysisRuns); EXPECT_EQ(6, FunctionAnalysisRuns); + EXPECT_EQ(6, ImmutableFunctionAnalysisRuns); EXPECT_EQ(4, SCCPassRunCount1); EXPECT_EQ(14, AnalyzedInstrCount1); |

