summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavide Italiano <davide@freebsd.org>2016-06-02 22:58:11 +0000
committerDavide Italiano <davide@freebsd.org>2016-06-02 22:58:11 +0000
commitdf24d5b8c8533950a4a7028d44193bff0aa3d69e (patch)
tree8af0d41c4dfc5650eff8a35de1be2b5ecfee446e
parent07bb3c84a2d1eff7f3577cce023dca517aa7c3ed (diff)
downloadbcm5719-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.h1
-rw-r--r--lld/ELF/Driver.cpp1
-rw-r--r--lld/ELF/LTO.cpp7
-rw-r--r--lld/ELF/Options.td2
-rw-r--r--lld/test/ELF/lto/ltopasses-custom.ll3
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
OpenPOWER on IntegriCloud