diff --git a/tools/opt/NewPMDriver.cpp b/tools/opt/NewPMDriver.cpp index cdf4e42ca12..9e24f30c188 100644 --- a/tools/opt/NewPMDriver.cpp +++ b/tools/opt/NewPMDriver.cpp @@ -17,7 +17,6 @@ #include "Passes.h" #include "llvm/ADT/StringRef.h" #include "llvm/Analysis/CGSCCPassManager.h" -#include "llvm/Analysis/LazyCallGraph.h" #include "llvm/Bitcode/BitcodeWriterPass.h" #include "llvm/IR/IRPrintingPasses.h" #include "llvm/IR/LLVMContext.h" @@ -38,17 +37,10 @@ bool llvm::runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M, CGSCCAnalysisManager CGAM; ModuleAnalysisManager MAM; -#define MODULE_ANALYSIS(NAME, CREATE_PASS) \ - MAM.registerPass(CREATE_PASS); -#include "PassRegistry.def" - -#define CGSCC_ANALYSIS(NAME, CREATE_PASS) \ - CGAM.registerPass(CREATE_PASS); -#include "PassRegistry.def" - -#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \ - FAM.registerPass(CREATE_PASS); -#include "PassRegistry.def" + // Register all the basic analyses with the managers. + registerModuleAnalyses(MAM); + registerCGSCCAnalyses(CGAM); + registerFunctionAnalyses(FAM); // Cross register the analysis managers through their proxies. MAM.registerPass(FunctionAnalysisManagerModuleProxy(FAM)); diff --git a/tools/opt/Passes.cpp b/tools/opt/Passes.cpp index d20becbe5ea..0502f1ea313 100644 --- a/tools/opt/Passes.cpp +++ b/tools/opt/Passes.cpp @@ -48,6 +48,24 @@ struct NoOpFunctionPass { } // End anonymous namespace. +void llvm::registerModuleAnalyses(ModuleAnalysisManager &MAM) { +#define MODULE_ANALYSIS(NAME, CREATE_PASS) \ + MAM.registerPass(CREATE_PASS); +#include "PassRegistry.def" +} + +void llvm::registerCGSCCAnalyses(CGSCCAnalysisManager &CGAM) { +#define CGSCC_ANALYSIS(NAME, CREATE_PASS) \ + CGAM.registerPass(CREATE_PASS); +#include "PassRegistry.def" +} + +void llvm::registerFunctionAnalyses(FunctionAnalysisManager &FAM) { +#define FUNCTION_ANALYSIS(NAME, CREATE_PASS) \ + FAM.registerPass(CREATE_PASS); +#include "PassRegistry.def" +} + static bool isModulePassName(StringRef Name) { if (Name == "no-op-module") return true; diff --git a/tools/opt/Passes.h b/tools/opt/Passes.h index 3bd67526924..54050854c65 100644 --- a/tools/opt/Passes.h +++ b/tools/opt/Passes.h @@ -19,8 +19,32 @@ #include "llvm/ADT/StringRef.h" namespace llvm { +class CGSCCAnalysisManager; +class FunctionAnalysisManager; +class ModuleAnalysisManager; class ModulePassManager; +/// \brief Registers all available module analysis passes. +/// +/// This is an interface that can be used to populate a \c +/// ModuleAnalysisManager with all registered module analyses. Callers can +/// still manually register any additional analyses. +void registerModuleAnalyses(ModuleAnalysisManager &MAM); + +/// \brief Registers all available CGSCC analysis passes. +/// +/// This is an interface that can be used to populate a \c CGSCCAnalysisManager +/// with all registered CGSCC analyses. Callers can still manually register any +/// additional analyses. +void registerCGSCCAnalyses(CGSCCAnalysisManager &CGAM); + +/// \brief Registers all available function analysis passes. +/// +/// This is an interface that can be used to populate a \c +/// FunctionAnalysisManager with all registered function analyses. Callers can +/// still manually register any additional analyses. +void registerFunctionAnalyses(FunctionAnalysisManager &FAM); + /// \brief Parse a textual pass pipeline description into a \c ModulePassManager. /// /// The format of the textual pass pipeline description looks something like: