aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-lto2/llvm-lto2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-lto2/llvm-lto2.cpp')
-rw-r--r--llvm/tools/llvm-lto2/llvm-lto2.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/llvm/tools/llvm-lto2/llvm-lto2.cpp b/llvm/tools/llvm-lto2/llvm-lto2.cpp
index f79db36d2d2d..87fe90a5225f 100644
--- a/llvm/tools/llvm-lto2/llvm-lto2.cpp
+++ b/llvm/tools/llvm-lto2/llvm-lto2.cpp
@@ -67,6 +67,19 @@ static cl::opt<std::string> AAPipeline("aa-pipeline",
static cl::opt<bool> SaveTemps("save-temps", cl::desc("Save temporary files"));
+static cl::list<std::string> SelectSaveTemps(
+ "select-save-temps",
+ cl::value_desc("One, or multiple of: "
+ "resolution,preopt,promote,internalize,import,opt,precodegen"
+ ",combinedindex"),
+ cl::desc("Save selected temporary files. Cannot be specified together with "
+ "-save-temps"),
+ cl::CommaSeparated);
+
+constexpr const char *SaveTempsValues[] = {
+ "resolution", "preopt", "promote", "internalize",
+ "import", "opt", "precodegen", "combinedindex"};
+
static cl::opt<bool>
ThinLTODistributedIndexes("thinlto-distributed-indexes",
cl::desc("Write out individual index and "
@@ -258,9 +271,22 @@ static int run(int argc, char **argv) {
Conf.DebugPassManager = DebugPassManager;
- if (SaveTemps)
- check(Conf.addSaveTemps(OutputFilename + "."),
+ if (SaveTemps && !SelectSaveTemps.empty()) {
+ llvm::errs() << "-save-temps cannot be specified with -select-save-temps\n";
+ return 1;
+ }
+ if (SaveTemps || !SelectSaveTemps.empty()) {
+ DenseSet<StringRef> SaveTempsArgs;
+ for (auto &S : SelectSaveTemps)
+ if (is_contained(SaveTempsValues, S))
+ SaveTempsArgs.insert(S);
+ else {
+ llvm::errs() << ("invalid -select-save-temps argument: " + S) << '\n';
+ return 1;
+ }
+ check(Conf.addSaveTemps(OutputFilename + ".", false, SaveTempsArgs),
"Config::addSaveTemps failed");
+ }
// Optimization remarks.
Conf.RemarksFilename = RemarksFilename;