mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-08 21:37:35 +00:00
[IRPrinting] Improve module pass printer to work better with -filter-print-funcs
Summary: Previously module pass printer pass prints the banner even when the module doesn't include any function provided with `-filter-print-funcs` option. This introduced a lot of noise, especailly with ThinLTO. This diff addresses the issue and makes the banner printed only when the module includes functions in `-filter-print-funcs` list. Reviewers: fedor.sergeev Subscribers: mehdi_amini, hiraditya, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D66560 llvm-svn: 370849
This commit is contained in:
parent
8e49120f02
commit
62e029142d
@ -26,14 +26,22 @@ PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner,
|
|||||||
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
|
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
|
||||||
|
|
||||||
PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &) {
|
PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &) {
|
||||||
if (!Banner.empty())
|
if (llvm::isFunctionInPrintList("*")) {
|
||||||
OS << Banner << "\n";
|
if (!Banner.empty())
|
||||||
if (llvm::isFunctionInPrintList("*"))
|
OS << Banner << "\n";
|
||||||
M.print(OS, nullptr, ShouldPreserveUseListOrder);
|
M.print(OS, nullptr, ShouldPreserveUseListOrder);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
for(const auto &F : M.functions())
|
bool BannerPrinted = false;
|
||||||
if (llvm::isFunctionInPrintList(F.getName()))
|
for(const auto &F : M.functions()) {
|
||||||
|
if (llvm::isFunctionInPrintList(F.getName())) {
|
||||||
|
if (!BannerPrinted && !Banner.empty()) {
|
||||||
|
OS << Banner << "\n";
|
||||||
|
BannerPrinted = true;
|
||||||
|
}
|
||||||
F.print(OS);
|
F.print(OS);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return PreservedAnalyses::all();
|
return PreservedAnalyses::all();
|
||||||
}
|
}
|
||||||
|
18
test/Other/module-pass-printer.ll
Normal file
18
test/Other/module-pass-printer.ll
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
; Check pass name is only printed once.
|
||||||
|
; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all | FileCheck %s
|
||||||
|
; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=foo,bar | FileCheck %s
|
||||||
|
|
||||||
|
; Check pass name is not printed if a module doesn't include any function specified in -filter-print-funcs.
|
||||||
|
; RUN: opt < %s 2>&1 -forceattrs -disable-output -print-after-all -filter-print-funcs=baz | FileCheck %s -allow-empty -check-prefix=EMPTY
|
||||||
|
|
||||||
|
; CHECK: *** IR Dump After Force set function attributes ***
|
||||||
|
; CHECK-NOT: *** IR Dump After Force set function attributes ***
|
||||||
|
; EMPTY-NOT: *** IR Dump After Force set function attributes ***
|
||||||
|
|
||||||
|
define void @foo() {
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define void @bar() {
|
||||||
|
ret void
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user