OSDN Git Service

[PM] Wire up the analysis managers in the opt driver. This isn't really
authorChandler Carruth <chandlerc@gmail.com>
Thu, 6 Feb 2014 04:25:13 +0000 (04:25 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Thu, 6 Feb 2014 04:25:13 +0000 (04:25 +0000)
necessary until we add analyses to the driver, but I have such an
analysis ready and wanted to split this out. This is actually exercised
by the existing tests of the new pass manager as the analysis managers
are cross-checked and validated by the function and module managers.

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

tools/opt/NewPMDriver.cpp

index f21a68f..313db54 100644 (file)
@@ -32,8 +32,18 @@ using namespace opt_tool;
 bool llvm::runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M,
                            tool_output_file *Out, StringRef PassPipeline,
                            OutputKind OK, VerifierKind VK) {
-  ModulePassManager MPM;
+  FunctionAnalysisManager FAM;
+  ModuleAnalysisManager MAM;
+
+  // FIXME: Lift this registration of analysis passes into a .def file adjacent
+  // to the one used to associate names with passes.
+  MAM.registerPass(LazyCallGraphAnalysis());
 
+  // Cross register the analysis managers through their proxies.
+  MAM.registerPass(FunctionAnalysisManagerModuleProxy(FAM));
+  FAM.registerPass(ModuleAnalysisManagerFunctionProxy(MAM));
+
+  ModulePassManager MPM;
   if (VK > VK_NoVerifier)
     MPM.addPass(VerifierPass());
 
@@ -61,7 +71,7 @@ bool llvm::runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M,
   cl::PrintOptionValues();
 
   // Now that we have all of the passes ready, run them.
-  MPM.run(&M);
+  MPM.run(&M, &MAM);
 
   // Declare success.
   if (OK != OK_NoOutput)