diff options
author | Jin Xin Ng <njx@google.com> | 2022-06-01 10:46:55 -0700 |
---|---|---|
committer | Jin Xin Ng <njx@google.com> | 2022-07-06 10:06:18 -0700 |
commit | 65001f5777db90d6acd126e3c74773038c3a28e3 (patch) | |
tree | 8ea8c81f0b16d26b162241d46afb5ab0b403fd1e /llvm/lib/LTO/LTOBackend.cpp | |
parent | 83837a61981c760d01d0ffbfbadb3293eb74985b (diff) | |
download | llvm-65001f5777db90d6acd126e3c74773038c3a28e3.zip llvm-65001f5777db90d6acd126e3c74773038c3a28e3.tar.gz llvm-65001f5777db90d6acd126e3c74773038c3a28e3.tar.bz2 |
[LTO][ELF] Add selective --save-temps= option
Allows specific “temps” to be saved, instead of the current all-or-nothing nature of --save-temps. Multiple of these “temps” can be saved by specifying the argument multiple times.
Differential Revision: https://reviews.llvm.org/D127778
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 5d50e92..e248e58 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(); } |