[PM] Move the analysis registry into the Passes.cpp file and provide
authorChandler Carruth <chandlerc@gmail.com>
Tue, 6 Jan 2015 02:21:37 +0000 (02:21 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 6 Jan 2015 02:21:37 +0000 (02:21 +0000)
a normal interface for it in Passes.h.

This gives us essentially a single interface for running pass managers
which are provided from the bottom of the LLVM stack through interfaces
at the top of the LLVM stack that populate them with all of the
different analyses available throughout. It also means there is a single
blob of code that needs to include all of the pass headers and needs to
deal with the registry of passes and parsing names.

No functionality changed intended, should just be cleanup.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225237 91177308-0d34-0410-b5e6-96231b3b80d8

tools/opt/NewPMDriver.cpp
tools/opt/Passes.cpp
tools/opt/Passes.h

index cdf4e42ca129761f68244d418fe60182e45e4943..9e24f30c1886020e95431b1ed8dcd859ab9fc7ee 100644 (file)
@@ -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));
index d20becbe5eab601887a4caf2ae1c1180bc96604e..0502f1ea31381f1541e4b21875971c2c679997af 100644 (file)
@@ -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;
 
index 3bd675269245d4e54b8ce54e894c86b66c8655c5..54050854c6598d23f35cb36384388c5dbafc330a 100644 (file)
 #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: