diff --git a/llvm/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h b/llvm/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h --- a/llvm/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h +++ b/llvm/include/llvm/LTO/legacy/ThinLTOCodeGenerator.h @@ -229,9 +229,6 @@ /// Enable or disable the new pass manager. void setUseNewPM(unsigned Enabled) { UseNewPM = Enabled; } - /// Enable or disable debug output for the new pass manager. - void setDebugPassManager(unsigned Enabled) { DebugPassManager = Enabled; } - /// Disable CodeGen, only run the stages till codegen and stop. The output /// will be bitcode. void disableCodeGen(bool Disable) { DisableCodeGen = Disable; } @@ -351,10 +348,6 @@ /// Flag to indicate whether the new pass manager should be used for IR /// optimizations. bool UseNewPM = LLVM_ENABLE_NEW_PASS_MANAGER; - - /// Flag to indicate whether debug output should be enabled for the new pass - /// manager. - bool DebugPassManager = false; }; } #endif diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp --- a/llvm/lib/LTO/LTO.cpp +++ b/llvm/lib/LTO/LTO.cpp @@ -73,6 +73,12 @@ "enable-lto-internalization", cl::init(true), cl::Hidden, cl::desc("Enable global value internalization in LTO")); +namespace llvm { +cl::opt + DebugPassManager("debug-pass-manager", cl::init(false), cl::Hidden, + cl::desc("Print pass management debugging information")); +} + // Computes a unique hash for the Module considering the current list of // export/import and other global analysis results. // The hash is produced in \p Key. diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -117,6 +117,8 @@ "lto-stats-file", cl::desc("Save statistics to the specified file"), cl::Hidden); + +extern cl::opt DebugPassManager; } LTOCodeGenerator::LTOCodeGenerator(LLVMContext &Context) @@ -130,6 +132,7 @@ Config.PreCodeGenPassesHook = [](legacy::PassManager &PM) { PM.add(createObjCARCContractPass()); }; + Config.DebugPassManager = DebugPassManager; } LTOCodeGenerator::~LTOCodeGenerator() {} diff --git a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp --- a/llvm/lib/LTO/ThinLTOCodeGenerator.cpp +++ b/llvm/lib/LTO/ThinLTOCodeGenerator.cpp @@ -84,6 +84,7 @@ extern cl::opt, false, remarks::HotnessThresholdParser> RemarksHotnessThreshold; extern cl::opt RemarksFormat; +extern cl::opt DebugPassManager; } namespace { @@ -269,7 +270,6 @@ static void optimizeModuleNewPM(Module &TheModule, TargetMachine &TM, unsigned OptLevel, bool Freestanding, - bool DebugPassManager, ModuleSummaryIndex *Index) { Optional PGOOpt; LoopAnalysisManager LAM; @@ -489,7 +489,7 @@ const ThinLTOCodeGenerator::CachingOptions &CacheOptions, bool DisableCodeGen, StringRef SaveTempsDir, bool Freestanding, unsigned OptLevel, unsigned count, - bool UseNewPM, bool DebugPassManager) { + bool UseNewPM) { // "Benchmark"-like optimization: single-source case bool SingleModule = (ModuleMap.size() == 1); @@ -530,8 +530,7 @@ } if (UseNewPM) - optimizeModuleNewPM(TheModule, TM, OptLevel, Freestanding, DebugPassManager, - &Index); + optimizeModuleNewPM(TheModule, TM, OptLevel, Freestanding, &Index); else optimizeModule(TheModule, TM, OptLevel, Freestanding, &Index); @@ -1219,7 +1218,7 @@ ExportList, GUIDPreservedSymbols, ModuleToDefinedGVSummaries[ModuleIdentifier], CacheOptions, DisableCodeGen, SaveTempsDir, Freestanding, OptLevel, count, - UseNewPM, DebugPassManager); + UseNewPM); // Commit to the cache (if enabled) CacheEntry.write(*OutputBuffer); diff --git a/llvm/test/tools/llvm-lto/lto-passes.ll b/llvm/test/tools/llvm-lto/lto-passes.ll new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-lto/lto-passes.ll @@ -0,0 +1,12 @@ +; Test that -debug-pass-manager works in LTOCodeGenerator. The actual list of +; passes that is run during LTO is tested in: +; llvm/test/Other/new-pm-lto-defaults.ll +; +; RUN: llvm-as < %s > %t.bc +; RUN: llvm-lto %t.bc -O0 --debug-pass-manager 2>&1 | FileCheck %s +; CHECK: Running pass: WholeProgramDevirtPass + +define i32 @main() { +entry: + ret i32 42 +} diff --git a/llvm/tools/llvm-lto/llvm-lto.cpp b/llvm/tools/llvm-lto/llvm-lto.cpp --- a/llvm/tools/llvm-lto/llvm-lto.cpp +++ b/llvm/tools/llvm-lto/llvm-lto.cpp @@ -259,11 +259,6 @@ "use-new-pm", cl::desc("Run LTO passes using the new pass manager"), cl::init(LLVM_ENABLE_NEW_PASS_MANAGER), cl::Hidden, cl::cat(LTOCategory)); -static cl::opt - DebugPassManager("debug-pass-manager", cl::init(false), cl::Hidden, - cl::desc("Print pass management debugging information"), - cl::cat(LTOCategory)); - namespace { struct ModuleInfo { @@ -604,7 +599,6 @@ ThinGenerator.setCacheMaxSizeBytes(ThinLTOCacheMaxSizeBytes); ThinGenerator.setFreestanding(EnableFreestanding); ThinGenerator.setUseNewPM(UseNewPM); - ThinGenerator.setDebugPassManager(DebugPassManager); // Add all the exported symbols to the table of symbols to preserve. for (unsigned i = 0; i < ExportedSymbols.size(); ++i) diff --git a/llvm/tools/llvm-lto2/llvm-lto2.cpp b/llvm/tools/llvm-lto2/llvm-lto2.cpp --- a/llvm/tools/llvm-lto2/llvm-lto2.cpp +++ b/llvm/tools/llvm-lto2/llvm-lto2.cpp @@ -147,10 +147,6 @@ cl::desc("Run LTO passes using the new pass manager"), cl::init(LLVM_ENABLE_NEW_PASS_MANAGER), cl::Hidden); -static cl::opt - DebugPassManager("debug-pass-manager", cl::init(false), cl::Hidden, - cl::desc("Print pass management debugging information")); - static cl::opt StatsFile("stats-file", cl::desc("Filename to write statistics to")); @@ -172,6 +168,10 @@ exit(1); } +namespace llvm { +extern cl::opt DebugPassManager; +} + template static T check(Expected E, std::string Msg) { if (E) return std::move(*E);