diff options
Diffstat (limited to 'llvm/lib/LTO/LTOBackend.cpp')
-rw-r--r-- | llvm/lib/LTO/LTOBackend.cpp | 52 |
1 files changed, 36 insertions, 16 deletions
diff --git a/llvm/lib/LTO/LTOBackend.cpp b/llvm/lib/LTO/LTOBackend.cpp index 5d50e92ae377..e248e58e4e4e 100644 --- a/llvm/lib/LTO/LTOBackend.cpp +++ b/llvm/lib/LTO/LTOBackend.cpp @@ -81,17 +81,19 @@ extern cl::opt<bool> NoPGOWarnMismatch; exit(1); } -Error Config::addSaveTemps(std::string OutputFileName, - bool UseInputModulePath) { +Error Config::addSaveTemps(std::string OutputFileName, bool UseInputModulePath, + const DenseSet<StringRef> &SaveTempsArgs) { ShouldDiscardValueNames = false; std::error_code EC; - ResolutionFile = - std::make_unique<raw_fd_ostream>(OutputFileName + "resolution.txt", EC, - sys::fs::OpenFlags::OF_TextWithCRLF); - if (EC) { - ResolutionFile.reset(); - return errorCodeToError(EC); + if (SaveTempsArgs.empty() || SaveTempsArgs.contains("resolution")) { + ResolutionFile = + std::make_unique<raw_fd_ostream>(OutputFileName + "resolution.txt", EC, + sys::fs::OpenFlags::OF_TextWithCRLF); + if (EC) { + ResolutionFile.reset(); + return errorCodeToError(EC); + } } auto setHook = [&](std::string PathSuffix, ModuleHookFn &Hook) { @@ -125,14 +127,7 @@ Error Config::addSaveTemps(std::string OutputFileName, }; }; - setHook("0.preopt", PreOptModuleHook); - setHook("1.promote", PostPromoteModuleHook); - setHook("2.internalize", PostInternalizeModuleHook); - setHook("3.import", PostImportModuleHook); - setHook("4.opt", PostOptModuleHook); - setHook("5.precodegen", PreCodeGenModuleHook); - - CombinedIndexHook = + auto SaveCombinedIndex = [=](const ModuleSummaryIndex &Index, const DenseSet<GlobalValue::GUID> &GUIDPreservedSymbols) { std::string Path = OutputFileName + "index.bc"; @@ -152,6 +147,31 @@ Error Config::addSaveTemps(std::string OutputFileName, return true; }; + if (SaveTempsArgs.empty()) { + setHook("0.preopt", PreOptModuleHook); + setHook("1.promote", PostPromoteModuleHook); + setHook("2.internalize", PostInternalizeModuleHook); + setHook("3.import", PostImportModuleHook); + setHook("4.opt", PostOptModuleHook); + setHook("5.precodegen", PreCodeGenModuleHook); + CombinedIndexHook = SaveCombinedIndex; + } else { + if (SaveTempsArgs.contains("preopt")) + setHook("0.preopt", PreOptModuleHook); + if (SaveTempsArgs.contains("promote")) + setHook("1.promote", PostPromoteModuleHook); + if (SaveTempsArgs.contains("internalize")) + setHook("2.internalize", PostInternalizeModuleHook); + if (SaveTempsArgs.contains("import")) + setHook("3.import", PostImportModuleHook); + if (SaveTempsArgs.contains("opt")) + setHook("4.opt", PostOptModuleHook); + if (SaveTempsArgs.contains("precodegen")) + setHook("5.precodegen", PreCodeGenModuleHook); + if (SaveTempsArgs.contains("combinedindex")) + CombinedIndexHook = SaveCombinedIndex; + } + return Error::success(); } |