mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[LTO] Add ability to parse AA pipelines.
This is supposed to be a drop in replacement for what lld provides via --lto-newpm-aa-pipeline. llvm-svn: 281774
This commit is contained in:
parent
f46cca3a86
commit
b91039268d
@ -83,6 +83,11 @@ struct Config {
|
|||||||
/// manager as the old one doesn't have this ability.
|
/// manager as the old one doesn't have this ability.
|
||||||
std::string OptPipeline;
|
std::string OptPipeline;
|
||||||
|
|
||||||
|
// If this field is set, it has the same effect of specifying an AA pipeline
|
||||||
|
// identified by the string. Only works with the new pass manager, in
|
||||||
|
// conjunction OptPipeline.
|
||||||
|
std::string AAPipeline;
|
||||||
|
|
||||||
/// Setting this field will replace target triples in input files with this
|
/// Setting this field will replace target triples in input files with this
|
||||||
/// triple.
|
/// triple.
|
||||||
std::string OverrideTriple;
|
std::string OverrideTriple;
|
||||||
@ -170,6 +175,7 @@ struct Config {
|
|||||||
CGOptLevel(std::move(X.CGOptLevel)), OptLevel(std::move(X.OptLevel)),
|
CGOptLevel(std::move(X.CGOptLevel)), OptLevel(std::move(X.OptLevel)),
|
||||||
DisableVerify(std::move(X.DisableVerify)),
|
DisableVerify(std::move(X.DisableVerify)),
|
||||||
OptPipeline(std::move(X.OptPipeline)),
|
OptPipeline(std::move(X.OptPipeline)),
|
||||||
|
AAPipeline(std::move(X.AAPipeline)),
|
||||||
OverrideTriple(std::move(X.OverrideTriple)),
|
OverrideTriple(std::move(X.OverrideTriple)),
|
||||||
DefaultTriple(std::move(X.DefaultTriple)),
|
DefaultTriple(std::move(X.DefaultTriple)),
|
||||||
ShouldDiscardValueNames(std::move(X.ShouldDiscardValueNames)),
|
ShouldDiscardValueNames(std::move(X.ShouldDiscardValueNames)),
|
||||||
@ -194,6 +200,7 @@ struct Config {
|
|||||||
OptLevel = std::move(X.OptLevel);
|
OptLevel = std::move(X.OptLevel);
|
||||||
DisableVerify = std::move(X.DisableVerify);
|
DisableVerify = std::move(X.DisableVerify);
|
||||||
OptPipeline = std::move(X.OptPipeline);
|
OptPipeline = std::move(X.OptPipeline);
|
||||||
|
AAPipeline = std::move(X.AAPipeline);
|
||||||
OverrideTriple = std::move(X.OverrideTriple);
|
OverrideTriple = std::move(X.OverrideTriple);
|
||||||
DefaultTriple = std::move(X.DefaultTriple);
|
DefaultTriple = std::move(X.DefaultTriple);
|
||||||
ShouldDiscardValueNames = std::move(X.ShouldDiscardValueNames);
|
ShouldDiscardValueNames = std::move(X.ShouldDiscardValueNames);
|
||||||
|
@ -124,9 +124,17 @@ createTargetMachine(Config &Conf, StringRef TheTriple,
|
|||||||
|
|
||||||
static void runNewPMCustomPasses(Module &Mod, TargetMachine *TM,
|
static void runNewPMCustomPasses(Module &Mod, TargetMachine *TM,
|
||||||
std::string PipelineDesc,
|
std::string PipelineDesc,
|
||||||
|
std::string AAPipelineDesc,
|
||||||
bool DisableVerify) {
|
bool DisableVerify) {
|
||||||
PassBuilder PB(TM);
|
PassBuilder PB(TM);
|
||||||
AAManager AA;
|
AAManager AA;
|
||||||
|
|
||||||
|
// Parse a custom AA pipeline if asked to.
|
||||||
|
if (!AAPipelineDesc.empty())
|
||||||
|
if (!PB.parseAAPipeline(AA, AAPipelineDesc))
|
||||||
|
report_fatal_error("unable to parse AA pipeline description: " +
|
||||||
|
AAPipelineDesc);
|
||||||
|
|
||||||
LoopAnalysisManager LAM;
|
LoopAnalysisManager LAM;
|
||||||
FunctionAnalysisManager FAM;
|
FunctionAnalysisManager FAM;
|
||||||
CGSCCAnalysisManager CGAM;
|
CGSCCAnalysisManager CGAM;
|
||||||
@ -185,7 +193,8 @@ bool opt(Config &Conf, TargetMachine *TM, unsigned Task, Module &Mod,
|
|||||||
if (Conf.OptPipeline.empty())
|
if (Conf.OptPipeline.empty())
|
||||||
runOldPMPasses(Conf, Mod, TM, IsThinLto);
|
runOldPMPasses(Conf, Mod, TM, IsThinLto);
|
||||||
else
|
else
|
||||||
runNewPMCustomPasses(Mod, TM, Conf.OptPipeline, Conf.DisableVerify);
|
runNewPMCustomPasses(Mod, TM, Conf.OptPipeline, Conf.AAPipeline,
|
||||||
|
Conf.DisableVerify);
|
||||||
return !Conf.PostOptModuleHook || Conf.PostOptModuleHook(Task, Mod);
|
return !Conf.PostOptModuleHook || Conf.PostOptModuleHook(Task, Mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
; Try a custom pipeline
|
; Try a custom pipeline
|
||||||
; RUN: llvm-lto2 %t1.bc -o %t.o -save-temps \
|
; RUN: llvm-lto2 %t1.bc -o %t.o -save-temps \
|
||||||
; RUN: -r %t1.bc,patatino,px -opt-pipeline loweratomic
|
; RUN: -r %t1.bc,patatino,px -opt-pipeline loweratomic \
|
||||||
|
; RUN: -aa-pipeline basic-aa
|
||||||
; RUN: llvm-dis < %t.o.0.4.opt.bc | FileCheck %s --check-prefix=CUSTOM
|
; RUN: llvm-dis < %t.o.0.4.opt.bc | FileCheck %s --check-prefix=CUSTOM
|
||||||
|
|
||||||
target triple = "x86_64-unknown-linux-gnu"
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
@ -16,9 +17,16 @@ define void @patatino() {
|
|||||||
; CUSTOM-NEXT: ret void
|
; CUSTOM-NEXT: ret void
|
||||||
; CUSTOM-NEXT: }
|
; CUSTOM-NEXT: }
|
||||||
|
|
||||||
; Check that invalid pipeline are caught as errors.
|
; Check that invalid pipelines are caught as errors.
|
||||||
; RUN: not llvm-lto2 %t1.bc -o %t.o -save-temps \
|
; RUN: not llvm-lto2 %t1.bc -o %t.o \
|
||||||
; RUN: -r %t1.bc,patatino,px -opt-pipeline foogoo 2>&1 | \
|
; RUN: -r %t1.bc,patatino,px -opt-pipeline foogoo 2>&1 | \
|
||||||
; RUN: FileCheck %s --check-prefix=ERR
|
; RUN: FileCheck %s --check-prefix=ERR
|
||||||
|
|
||||||
; ERR: LLVM ERROR: unable to parse pass pipeline description: foogoo
|
; ERR: LLVM ERROR: unable to parse pass pipeline description: foogoo
|
||||||
|
|
||||||
|
; RUN: not llvm-lto2 %t1.bc -o %t.o \
|
||||||
|
; RUN: -r %t1.bc,patatino,px -aa-pipeline patatino \
|
||||||
|
; RUN: -opt-pipeline loweratomic 2>&1 | \
|
||||||
|
; RUN: FileCheck %s --check-prefix=AAERR
|
||||||
|
|
||||||
|
; AAERR: LLVM ERROR: unable to parse AA pipeline description: patatino
|
||||||
|
@ -39,6 +39,10 @@ static cl::opt<std::string> OptPipeline("opt-pipeline",
|
|||||||
cl::desc("Optimizer Pipeline"),
|
cl::desc("Optimizer Pipeline"),
|
||||||
cl::value_desc("pipeline"));
|
cl::value_desc("pipeline"));
|
||||||
|
|
||||||
|
static cl::opt<std::string> AAPipeline("aa-pipeline",
|
||||||
|
cl::desc("Alias Analysis Pipeline"),
|
||||||
|
cl::value_desc("aapipeline"));
|
||||||
|
|
||||||
static cl::opt<bool> SaveTemps("save-temps", cl::desc("Save temporary files"));
|
static cl::opt<bool> SaveTemps("save-temps", cl::desc("Save temporary files"));
|
||||||
|
|
||||||
static cl::opt<bool>
|
static cl::opt<bool>
|
||||||
@ -154,6 +158,7 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
// Run a custom pipeline, if asked for.
|
// Run a custom pipeline, if asked for.
|
||||||
Conf.OptPipeline = OptPipeline;
|
Conf.OptPipeline = OptPipeline;
|
||||||
|
Conf.AAPipeline = AAPipeline;
|
||||||
|
|
||||||
ThinBackend Backend;
|
ThinBackend Backend;
|
||||||
if (ThinLTODistributedIndexes)
|
if (ThinLTODistributedIndexes)
|
||||||
|
Loading…
Reference in New Issue
Block a user