diff options
author | Davide Italiano <davide@freebsd.org> | 2016-05-14 23:21:50 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-05-14 23:21:50 +0000 |
commit | b6ccd6b39488f0c5a6cc4826658258af05e87c99 (patch) | |
tree | fcc7a516e256be6ff7fc425029684282b7b8c94a | |
parent | 9435f5416765faf8b40552e064a7b1803fb95c1c (diff) | |
download | bcm5719-llvm-b6ccd6b39488f0c5a6cc4826658258af05e87c99.tar.gz bcm5719-llvm-b6ccd6b39488f0c5a6cc4826658258af05e87c99.zip |
[PM] Refactor cross-registration of AM into an helper.
Requested by: Chandler Carruth.
llvm-svn: 269582
-rw-r--r-- | llvm/include/llvm/Passes/PassBuilder.h | 9 | ||||
-rw-r--r-- | llvm/lib/Passes/PassBuilder.cpp | 14 | ||||
-rw-r--r-- | llvm/tools/opt/NewPMDriver.cpp | 11 |
3 files changed, 24 insertions, 10 deletions
diff --git a/llvm/include/llvm/Passes/PassBuilder.h b/llvm/include/llvm/Passes/PassBuilder.h index 754b19ff9f8..1723fb7b5f6 100644 --- a/llvm/include/llvm/Passes/PassBuilder.h +++ b/llvm/include/llvm/Passes/PassBuilder.h @@ -123,6 +123,15 @@ public: explicit PassBuilder(TargetMachine *TM = nullptr) : TM(TM) {} + /// \brief Cross register the analysis managers through their proxies. + /// + /// This is an interface that can be used to cross register each + // AnalysisManager with all the others analysis managers. + void crossRegisterProxies(LoopAnalysisManager &LAM, + FunctionAnalysisManager &FAM, + CGSCCAnalysisManager &CGAM, + ModuleAnalysisManager &MAM); + /// \brief Registers all available module analysis passes. /// /// This is an interface that can be used to populate a \c diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index c6f136cae3c..ac9987dcbfe 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -677,3 +677,17 @@ bool PassBuilder::parseAAPipeline(AAManager &AA, StringRef PipelineText) { return true; } + +void PassBuilder::crossRegisterProxies(LoopAnalysisManager &LAM, + FunctionAnalysisManager &FAM, + CGSCCAnalysisManager &CGAM, + ModuleAnalysisManager &MAM) { + MAM.registerPass([&] { return FunctionAnalysisManagerModuleProxy(FAM); }); + MAM.registerPass([&] { return CGSCCAnalysisManagerModuleProxy(CGAM); }); + CGAM.registerPass([&] { return FunctionAnalysisManagerCGSCCProxy(FAM); }); + CGAM.registerPass([&] { return ModuleAnalysisManagerCGSCCProxy(MAM); }); + FAM.registerPass([&] { return CGSCCAnalysisManagerFunctionProxy(CGAM); }); + FAM.registerPass([&] { return ModuleAnalysisManagerFunctionProxy(MAM); }); + FAM.registerPass([&] { return LoopAnalysisManagerFunctionProxy(LAM); }); + LAM.registerPass([&] { return FunctionAnalysisManagerLoopProxy(FAM); }); +}
\ No newline at end of file diff --git a/llvm/tools/opt/NewPMDriver.cpp b/llvm/tools/opt/NewPMDriver.cpp index 130474408bd..f7b2f18d09d 100644 --- a/llvm/tools/opt/NewPMDriver.cpp +++ b/llvm/tools/opt/NewPMDriver.cpp @@ -76,16 +76,7 @@ bool llvm::runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M, PB.registerCGSCCAnalyses(CGAM); PB.registerFunctionAnalyses(FAM); PB.registerLoopAnalyses(LAM); - - // Cross register the analysis managers through their proxies. - MAM.registerPass([&] { return FunctionAnalysisManagerModuleProxy(FAM); }); - MAM.registerPass([&] { return CGSCCAnalysisManagerModuleProxy(CGAM); }); - CGAM.registerPass([&] { return FunctionAnalysisManagerCGSCCProxy(FAM); }); - CGAM.registerPass([&] { return ModuleAnalysisManagerCGSCCProxy(MAM); }); - FAM.registerPass([&] { return CGSCCAnalysisManagerFunctionProxy(CGAM); }); - FAM.registerPass([&] { return ModuleAnalysisManagerFunctionProxy(MAM); }); - FAM.registerPass([&] { return LoopAnalysisManagerFunctionProxy(LAM); }); - LAM.registerPass([&] { return FunctionAnalysisManagerLoopProxy(FAM); }); + PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); ModulePassManager MPM(DebugPM); if (VK > VK_NoVerifier) |