diff options
author | Davide Italiano <davide@freebsd.org> | 2016-06-02 22:58:11 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-06-02 22:58:11 +0000 |
commit | df24d5b8c8533950a4a7028d44193bff0aa3d69e (patch) | |
tree | 8af0d41c4dfc5650eff8a35de1be2b5ecfee446e | |
parent | 07bb3c84a2d1eff7f3577cce023dca517aa7c3ed (diff) | |
download | bcm5719-llvm-df24d5b8c8533950a4a7028d44193bff0aa3d69e.tar.gz bcm5719-llvm-df24d5b8c8533950a4a7028d44193bff0aa3d69e.zip |
[LTO] Add --lto-aa-pipeline.
Differential Revision: http://reviews.llvm.org/D20888
llvm-svn: 271605
-rw-r--r-- | lld/ELF/Config.h | 1 | ||||
-rw-r--r-- | lld/ELF/Driver.cpp | 1 | ||||
-rw-r--r-- | lld/ELF/LTO.cpp | 7 | ||||
-rw-r--r-- | lld/ELF/Options.td | 2 | ||||
-rw-r--r-- | lld/test/ELF/lto/ltopasses-custom.ll | 3 |
5 files changed, 13 insertions, 1 deletions
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index 26f204008a8..2dbbdbe40d6 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -44,6 +44,7 @@ struct Configuration { llvm::StringRef Emulation; llvm::StringRef Fini; llvm::StringRef Init; + llvm::StringRef LtoAAPipeline; llvm::StringRef LtoNewPmPasses; llvm::StringRef OutputFile; llvm::StringRef SoName; diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 31eed5d7a86..ab64d5aab4e 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -338,6 +338,7 @@ void LinkerDriver::readConfigs(opt::InputArgList &Args) { Config->Entry = getString(Args, OPT_entry); Config->Fini = getString(Args, OPT_fini, "_fini"); Config->Init = getString(Args, OPT_init, "_init"); + Config->LtoAAPipeline = getString(Args, OPT_lto_aa_pipeline); Config->LtoNewPmPasses = getString(Args, OPT_lto_newpm_passes); Config->OutputFile = getString(Args, OPT_o); Config->SoName = getString(Args, OPT_soname); diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index dc087bb443e..1d419c6405f 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -66,6 +66,13 @@ static void runNewCustomLtoPasses(Module &M, TargetMachine &TM) { PassBuilder PB(&TM); AAManager AA; + + // Parse a custom AA pipeline if asked to. + if (!PB.parseAAPipeline(AA, Config->LtoAAPipeline)) { + error("Unable to parse AA pipeline description: " + Config->LtoAAPipeline); + return; + } + LoopAnalysisManager LAM; FunctionAnalysisManager FAM; CGSCCAnalysisManager CGAM; diff --git a/lld/ELF/Options.td b/lld/ELF/Options.td index 86b22c84aa9..ad2b2d00efe 100644 --- a/lld/ELF/Options.td +++ b/lld/ELF/Options.td @@ -260,6 +260,8 @@ def alias_version_script_version_script : Joined<["--"], "version-script=">, Ali // LTO-related options. def lto_jobs : Joined<["--"], "lto-jobs=">, HelpText<"Number of threads to run codegen">; +def lto_aa_pipeline : Joined<["--"], "lto-aa-pipeline=">, + HelpText<"AA pipeline to run during LTO. Used in conjunction with -lto-newpm-passes">; def lto_newpm_passes : Joined<["--"], "lto-newpm-passes=">, HelpText<"Passes to run during LTO">; def disable_verify : Flag<["-"], "disable-verify">; diff --git a/lld/test/ELF/lto/ltopasses-custom.ll b/lld/test/ELF/lto/ltopasses-custom.ll index 54cf1a4e48a..3e982e079fb 100644 --- a/lld/test/ELF/lto/ltopasses-custom.ll +++ b/lld/test/ELF/lto/ltopasses-custom.ll @@ -1,6 +1,7 @@ ; REQUIRES: x86 ; RUN: llvm-as %s -o %t.o -; RUN: ld.lld -m elf_x86_64 %t.o -o %t.so -save-temps --lto-newpm-passes=ipsccp -shared +; RUN: ld.lld -m elf_x86_64 %t.o -o %t.so -save-temps --lto-aa-pipeline=basic-aa \ +; RUN: --lto-newpm-passes=ipsccp -shared ; RUN: ld.lld -m elf_x86_64 %t.o -o %t2.so -save-temps --lto-newpm-passes=loweratomic -shared ; RUN: llvm-dis %t.so.lto.opt.bc -o - | FileCheck %s ; RUN: llvm-dis %t2.so.lto.opt.bc -o - | FileCheck %s --check-prefix=ATOMIC |