1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 10:42:39 +01:00

Fix the bug that parseAAPipeline is not invoked in runNewPMPasses in release compiler.

Summary: The logic is guarded by "assert".

Reviewers: davidxl, davide, chandlerc

Reviewed By: davide, chandlerc

Subscribers: sanjoy, llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D36195

llvm-svn: 309787
This commit is contained in:
Dehao Chen 2017-08-02 03:03:19 +00:00
parent 1142dd4c6d
commit 520d826c62
4 changed files with 23 additions and 8 deletions

View File

@ -79,6 +79,9 @@ struct Config {
/// Whether to emit optimization remarks with hotness informations.
bool RemarksWithHotness = false;
/// Whether to emit the pass manager debuggging informations.
bool DebugPassManager = false;
bool ShouldDiscardValueNames = true;
DiagnosticHandlerFunction DiagHandler;

View File

@ -141,12 +141,13 @@ static void runNewPMPasses(Config &Conf, Module &Mod, TargetMachine *TM,
AAManager AA;
// Parse a custom AA pipeline if asked to.
assert(PB.parseAAPipeline(AA, "default"));
if (!PB.parseAAPipeline(AA, "default"))
report_fatal_error("Error parsing default AA pipeline");
LoopAnalysisManager LAM;
FunctionAnalysisManager FAM;
CGSCCAnalysisManager CGAM;
ModuleAnalysisManager MAM;
LoopAnalysisManager LAM(Conf.DebugPassManager);
FunctionAnalysisManager FAM(Conf.DebugPassManager);
CGSCCAnalysisManager CGAM(Conf.DebugPassManager);
ModuleAnalysisManager MAM(Conf.DebugPassManager);
// Register the AA manager first so that our version is the one used.
FAM.registerPass([&] { return std::move(AA); });
@ -158,7 +159,7 @@ static void runNewPMPasses(Config &Conf, Module &Mod, TargetMachine *TM,
PB.registerLoopAnalyses(LAM);
PB.crossRegisterProxies(LAM, FAM, CGAM, MAM);
ModulePassManager MPM;
ModulePassManager MPM(Conf.DebugPassManager);
// FIXME (davide): verify the input.
PassBuilder::OptimizationLevel OL;
@ -181,9 +182,9 @@ static void runNewPMPasses(Config &Conf, Module &Mod, TargetMachine *TM,
}
if (IsThinLTO)
MPM = PB.buildThinLTODefaultPipeline(OL, false /* DebugLogging */);
MPM = PB.buildThinLTODefaultPipeline(OL, Conf.DebugPassManager);
else
MPM = PB.buildLTODefaultPipeline(OL, false /* DebugLogging */);
MPM = PB.buildLTODefaultPipeline(OL, Conf.DebugPassManager);
MPM.run(Mod, MAM);
// FIXME (davide): verify the output.

View File

@ -1,5 +1,10 @@
; RUN: llvm-as < %s > %t1.bc
; Try the default pipeline and check is BasicAA is invoked.
; RUN: llvm-lto2 run %t1.bc -o %t.o -r %t1.bc,patatino,px -debug-pass-manager \
; RUN: -use-new-pm 2>&1 | FileCheck %s --check-prefix=DEFAULT
; DEFAULT: Running analysis: BasicAA on patatino
; Try a custom pipeline
; RUN: llvm-lto2 run %t1.bc -o %t.o -save-temps \
; RUN: -r %t1.bc,patatino,px -opt-pipeline loweratomic \

View File

@ -109,6 +109,10 @@ static cl::opt<bool>
cl::desc("Run LTO passes using the new pass manager"),
cl::init(false), cl::Hidden);
static cl::opt<bool>
DebugPassManager("debug-pass-manager", cl::init(false), cl::Hidden,
cl::desc("Print pass management debugging information"));
static void check(Error E, std::string Msg) {
if (!E)
return;
@ -195,6 +199,8 @@ static int run(int argc, char **argv) {
Conf.RelocModel = *RM;
Conf.CodeModel = CMModel;
Conf.DebugPassManager = DebugPassManager;
if (SaveTemps)
check(Conf.addSaveTemps(OutputFilename + "."),
"Config::addSaveTemps failed");