Index: include/llvm/LTO/Config.h =================================================================== --- include/llvm/LTO/Config.h +++ include/llvm/LTO/Config.h @@ -79,6 +79,9 @@ /// Whether to emit optimization remarks with hotness informations. bool RemarksWithHotness = false; + /// Whether to emit the pass manager debuggging informations. + bool DebugPassManager = false; + bool ShouldDiscardValueNames = true; DiagnosticHandlerFunction DiagHandler; Index: lib/LTO/LTOBackend.cpp =================================================================== --- lib/LTO/LTOBackend.cpp +++ lib/LTO/LTOBackend.cpp @@ -141,12 +141,13 @@ AAManager AA; // Parse a custom AA pipeline if asked to. - assert(PB.parseAAPipeline(AA, "default")); + if (!PB.parseAAPipeline(AA, "default")) + report_fatal_error("Error parsing default AA pipeline"); - LoopAnalysisManager LAM; - FunctionAnalysisManager FAM; - CGSCCAnalysisManager CGAM; - ModuleAnalysisManager MAM; + LoopAnalysisManager LAM(Conf.DebugPassManager); + FunctionAnalysisManager FAM(Conf.DebugPassManager); + CGSCCAnalysisManager CGAM(Conf.DebugPassManager); + ModuleAnalysisManager MAM(Conf.DebugPassManager); // Register the AA manager first so that our version is the one used. FAM.registerPass([&] { return std::move(AA); }); @@ -158,7 +159,7 @@ PB.registerLoopAnalyses(LAM); PB.crossRegisterProxies(LAM, FAM, CGAM, MAM); - ModulePassManager MPM; + ModulePassManager MPM(Conf.DebugPassManager); // FIXME (davide): verify the input. PassBuilder::OptimizationLevel OL; @@ -181,9 +182,9 @@ } if (IsThinLTO) - MPM = PB.buildThinLTODefaultPipeline(OL, false /* DebugLogging */); + MPM = PB.buildThinLTODefaultPipeline(OL, Conf.DebugPassManager); else - MPM = PB.buildLTODefaultPipeline(OL, false /* DebugLogging */); + MPM = PB.buildLTODefaultPipeline(OL, Conf.DebugPassManager); MPM.run(Mod, MAM); // FIXME (davide): verify the output. Index: test/tools/llvm-lto2/X86/pipeline.ll =================================================================== --- test/tools/llvm-lto2/X86/pipeline.ll +++ test/tools/llvm-lto2/X86/pipeline.ll @@ -1,5 +1,10 @@ ; RUN: llvm-as < %s > %t1.bc +; Try the default pipeline and check is BasicAA is invoked. +; RUN: llvm-lto2 run %t1.bc -o %t.o -r %t1.bc,patatino,px -debug-pass-manager \ +; RUN: -use-new-pm 2>&1 | FileCheck %s --check-prefix=DEFAULT +; DEFAULT: Running analysis: BasicAA on patatino + ; Try a custom pipeline ; RUN: llvm-lto2 run %t1.bc -o %t.o -save-temps \ ; RUN: -r %t1.bc,patatino,px -opt-pipeline loweratomic \ Index: tools/llvm-lto2/llvm-lto2.cpp =================================================================== --- tools/llvm-lto2/llvm-lto2.cpp +++ tools/llvm-lto2/llvm-lto2.cpp @@ -109,6 +109,10 @@ cl::desc("Run LTO passes using the new pass manager"), cl::init(false), cl::Hidden); +static cl::opt + DebugPassManager("debug-pass-manager", cl::init(false), cl::Hidden, + cl::desc("Print pass management debugging information")); + static void check(Error E, std::string Msg) { if (!E) return; @@ -195,6 +199,8 @@ Conf.RelocModel = *RM; Conf.CodeModel = CMModel; + Conf.DebugPassManager = DebugPassManager; + if (SaveTemps) check(Conf.addSaveTemps(OutputFilename + "."), "Config::addSaveTemps failed");