From: Taewook Oh Date: Wed, 4 Sep 2019 08:08:58 +0000 (+0000) Subject: [IRPrinting] Improve module pass printer to work better with -filter-print-funcs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da176cb964c58453dd364599866d987b31c502ac;p=llvm [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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370849 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/IRPrintingPasses.cpp b/lib/IR/IRPrintingPasses.cpp index 35b06135a82..953cf941016 100644 --- a/lib/IR/IRPrintingPasses.cpp +++ b/lib/IR/IRPrintingPasses.cpp @@ -26,14 +26,22 @@ PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner, ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {} PreservedAnalyses PrintModulePass::run(Module &M, ModuleAnalysisManager &) { - if (!Banner.empty()) - OS << Banner << "\n"; - if (llvm::isFunctionInPrintList("*")) + if (llvm::isFunctionInPrintList("*")) { + if (!Banner.empty()) + OS << Banner << "\n"; M.print(OS, nullptr, ShouldPreserveUseListOrder); + } else { - for(const auto &F : M.functions()) - if (llvm::isFunctionInPrintList(F.getName())) + bool BannerPrinted = false; + for(const auto &F : M.functions()) { + if (llvm::isFunctionInPrintList(F.getName())) { + if (!BannerPrinted && !Banner.empty()) { + OS << Banner << "\n"; + BannerPrinted = true; + } F.print(OS); + } + } } return PreservedAnalyses::all(); } diff --git a/test/Other/module-pass-printer.ll b/test/Other/module-pass-printer.ll new file mode 100644 index 00000000000..9c16cf10a2e --- /dev/null +++ b/test/Other/module-pass-printer.ll @@ -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 +}