summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-05-14 23:21:50 +0000
committerDavide Italiano <davide@freebsd.org>2016-05-14 23:21:50 +0000
commitb6ccd6b39488f0c5a6cc4826658258af05e87c99 (patch)
treefcc7a516e256be6ff7fc425029684282b7b8c94a
parent9435f5416765faf8b40552e064a7b1803fb95c1c (diff)
downloadbcm5719-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.h9
-rw-r--r--llvm/lib/Passes/PassBuilder.cpp14
-rw-r--r--llvm/tools/opt/NewPMDriver.cpp11
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)
OpenPOWER on IntegriCloud