aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/LTO/LTOBackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/LTO/LTOBackend.cpp')
-rw-r--r--llvm/lib/LTO/LTOBackend.cpp52
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();
}