[llc] Respect --print-pipeline-passes when using -passes (#80940)

This commit is contained in:
Arthur Eubanks 2024-02-07 10:16:47 -07:00 committed by GitHub
parent 5a83bccb35
commit eaab6abd79
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 26 deletions

View File

@ -0,0 +1,11 @@
# RUN: llc -mtriple=x86_64-pc-linux-gnu -x mir -passes=no-op-machine-function --print-pipeline-passes -filetype=null < %s | FileCheck %s --match-full-lines
# CHECK: IR pipeline: PrintMIRPreparePass
# CHECK: MIR pipeline: no-op-machine-function,print,FreeMachineFunctionPass
---
name: f
body: |
bb.0:
RET 0
...

View File

@ -190,9 +190,6 @@ int llvm::compileModuleWithNewPM(
auto &MMI = MFAM.getResult<MachineModuleAnalysis>(*M).getMMI();
if (MIR->parseMachineFunctions(*M, MMI))
return 1;
RunPasses(BOS.get(), Out.get(), M.get(), Context, Buffer, &MPM, &MAM, MFPM,
MFAM);
} else {
ExitOnErr(LLVMTM.buildCodeGenPipeline(MPM, MFPM, MFAM, *OS,
DwoOut ? &DwoOut->os() : nullptr,
@ -200,36 +197,35 @@ int llvm::compileModuleWithNewPM(
auto StartStopInfo = TargetPassConfig::getStartStopInfo(PIC);
assert(StartStopInfo && "Expect StartStopInfo!");
// Add IR or MIR printing pass according the pass type.
if (auto StopPassName = StartStopInfo->StopPass; !StopPassName.empty()) {
MFPM.addPass(PrintMIRPass(*OS));
MFPM.addPass(FreeMachineFunctionPass());
}
if (PrintPipelinePasses) {
std::string IRPipeline;
raw_string_ostream IRSOS(IRPipeline);
MPM.printPipeline(IRSOS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
});
outs() << "IR pipeline: " << IRPipeline << '\n';
std::string MIRPipeline;
raw_string_ostream MIRSOS(MIRPipeline);
MFPM.printPipeline(MIRSOS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
});
outs() << "MIR pipeline: " << MIRPipeline << '\n';
return 0;
}
RunPasses(BOS.get(), Out.get(), M.get(), Context, Buffer, &MPM, &MAM, MFPM,
MFAM);
}
if (PrintPipelinePasses) {
std::string IRPipeline;
raw_string_ostream IRSOS(IRPipeline);
MPM.printPipeline(IRSOS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
});
outs() << "IR pipeline: " << IRPipeline << '\n';
std::string MIRPipeline;
raw_string_ostream MIRSOS(MIRPipeline);
MFPM.printPipeline(MIRSOS, [&PIC](StringRef ClassName) {
auto PassName = PIC.getPassNameForClassName(ClassName);
return PassName.empty() ? ClassName : PassName;
});
outs() << "MIR pipeline: " << MIRPipeline << '\n';
return 0;
}
RunPasses(BOS.get(), Out.get(), M.get(), Context, Buffer, &MPM, &MAM, MFPM,
MFAM);
// Declare success.
Out->keep();
if (DwoOut)