diff options
author | Rumeet Dhindsa <rdhindsa@google.com> | 2018-05-08 22:37:57 +0000 |
---|---|---|
committer | Rumeet Dhindsa <rdhindsa@google.com> | 2018-05-08 22:37:57 +0000 |
commit | b5b7d6e19c086528613fcf455d2df70d45eb7d38 (patch) | |
tree | d0de8282fbd7d82e2159dbac6d4e2b85f3d4638f | |
parent | d24dcdd1f74b981eea590ebfb9dfd455cea8a8f6 (diff) | |
download | bcm5719-llvm-b5b7d6e19c086528613fcf455d2df70d45eb7d38.tar.gz bcm5719-llvm-b5b7d6e19c086528613fcf455d2df70d45eb7d38.zip |
Add support for LTO plugin option obj-path
Differential Revision: https://reviews.llvm.org/D46598
llvm-svn: 331817
-rw-r--r-- | lld/ELF/Config.h | 1 | ||||
-rw-r--r-- | lld/ELF/Driver.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/LTO.cpp | 4 | ||||
-rw-r--r-- | lld/test/ELF/lto/thinlto.ll | 11 |
4 files changed, 11 insertions, 7 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index 228b5949f28..c860741e9bd 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -86,6 +86,7 @@ struct Configuration { llvm::StringRef Init; llvm::StringRef LTOAAPipeline; llvm::StringRef LTONewPmPasses; + llvm::StringRef LTOObjPath; llvm::StringRef LTOSampleProfile; llvm::StringRef MapFile; llvm::StringRef OutputFile; diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 1ac4e235a0f..c15fcf04cc5 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -796,6 +796,8 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { Config->LTODebugPassManager = true; } else if (S.startswith("sample-profile=")) { Config->LTOSampleProfile = S.substr(15); + } else if (S.startswith("obj-path=")) { + Config->LTOObjPath = S.substr(9); } else if (S == "thinlto-index-only") { Config->ThinLTOIndexOnly = true; } else if (S.startswith("thinlto-index-only=")) { diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 22e1e330a49..3e07463113e 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -279,8 +279,8 @@ std::vector<InputFile *> BitcodeCompiler::compile() { openFile(Path + ".imports"); } - if (Config->SaveTemps) - saveBuffer(Buff[0], Config->OutputFile + ".lto.o"); + if (!Config->LTOObjPath.empty()) + saveBuffer(Buff[0], Config->LTOObjPath); // ThinLTO with index only option is required to generate only the index // files. After that, we exit from linker and ThinLTO backend runs in a diff --git a/lld/test/ELF/lto/thinlto.ll b/lld/test/ELF/lto/thinlto.ll index 0cec41d1dbc..227d771d90b 100644 --- a/lld/test/ELF/lto/thinlto.ll +++ b/lld/test/ELF/lto/thinlto.ll @@ -49,11 +49,6 @@ ; RUN: not ls %t2.o.thinlto.bc ; RUN: not ls %t4.o.thinlto.bc -; Ensure lld generates one regular LTO file via splitting for ThinLTO builds -; RUN: rm -f %t.lto.o -; RUN: ld.lld -save-temps --plugin-opt=thinlto-index-only -shared %t.o %t2.o -o %t -; RUN: llvm-readobj -h %t.lto.o | FileCheck %s --check-prefix=FORMAT - ; First force single-threaded mode ; RUN: rm -f %t.lto.o %t1.lto.o ; RUN: ld.lld -save-temps --thinlto-jobs=1 -shared %t.o %t2.o -o %t @@ -71,6 +66,12 @@ ; stable on the final output file itself. ; RUN: ld.lld -shared %t.o %t2.o -o %t2 +; Test to ensure that thinlto-index-only with obj-path creates the file. +; RUN: rm -f %t5.o +; RUN: ld.lld --plugin-opt=thinlto-index-only --plugin-opt=obj-path=%t5.o -shared %t.o %t2.o -o %t4 +; RUN: llvm-readobj -h %t5.o | FileCheck %s --check-prefix=FORMAT +; RUN: llvm-nm %t5.o | count 0 + ; NM: T f ; NM1: T f ; NM1-NOT: U g |