/// @brief This is the storage for the -time-passes option.
extern bool TimePassesIsEnabled;
-/// isFunctionInPrintList - returns true if a function should be printed via
-// debugging options like -print-after-all/-print-before-all.
-// @brief Tells if the function IR should be printed by PrinterPass.
-extern bool isFunctionInPrintList(StringRef FunctionName);
} // End llvm namespace
// Include support files that contain important APIs commonly used by Passes,
bool runOnSCC(CallGraphSCC &SCC) override {
Out << Banner;
for (CallGraphNode *CGN : SCC) {
- if (CGN->getFunction()) {
- if (isFunctionInPrintList(CGN->getFunction()->getName()))
- CGN->getFunction()->print(Out);
- } else
+ if (CGN->getFunction())
+ CGN->getFunction()->print(Out);
+ else
Out << "\nPrinting <null> Function\n";
}
return false;
}
bool runOnLoop(Loop *L, LPPassManager &) override {
- auto BBI = find_if(L->blocks().begin(), L->blocks().end(),
- [](BasicBlock *BB) { return BB; });
- if (BBI != L->blocks().end() &&
- isFunctionInPrintList((*BBI)->getParent()->getName()))
- P.run(*L);
+ P.run(*L);
return false;
}
};
const std::string Banner;
MachineFunctionPrinterPass() : MachineFunctionPass(ID), OS(dbgs()) { }
- MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
+ MachineFunctionPrinterPass(raw_ostream &os, const std::string &banner)
: MachineFunctionPass(ID), OS(os), Banner(banner) {}
const char *getPassName() const override { return "MachineFunction Printer"; }
}
bool runOnMachineFunction(MachineFunction &MF) override {
- if (!llvm::isFunctionInPrintList(MF.getName()))
- return false;
OS << "# " << Banner << ":\n";
MF.print(OS, getAnalysisIfAvailable<SlotIndexes>());
return false;
ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
PreservedAnalyses PrintModulePass::run(Module &M) {
- OS << Banner << "\n";
- if (llvm::isFunctionInPrintList("*"))
- M.print(OS, nullptr, ShouldPreserveUseListOrder);
- else {
- for(const auto &F : M.functions())
- if (llvm::isFunctionInPrintList(F.getName()))
- F.print(OS);
- }
+ OS << Banner;
+ M.print(OS, nullptr, ShouldPreserveUseListOrder);
return PreservedAnalyses::all();
}
: OS(OS), Banner(Banner) {}
PreservedAnalyses PrintFunctionPass::run(Function &F) {
- if (isFunctionInPrintList(F.getName()))
- OS << Banner << static_cast<Value &>(F);
+ OS << Banner << static_cast<Value &>(F);
return PreservedAnalyses::all();
}
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <map>
-#include <unordered_set>
using namespace llvm;
using namespace llvm::legacy;
llvm::cl::desc("Print IR after each pass"),
cl::init(false));
-static cl::list<std::string>
- PrintFuncsList("filter-print-funcs", cl::value_desc("function names"),
- cl::desc("Only print IR for functions whose name "
- "match this for all print-[before|after][-all] "
- "options"),
- cl::CommaSeparated);
-
/// This is a helper to determine whether to print IR before or
/// after a pass.
return PrintAfterAll || ShouldPrintBeforeOrAfterPass(PI, PrintAfter);
}
-bool llvm::isFunctionInPrintList(StringRef FunctionName) {
- static std::unordered_set<std::string> PrintFuncNames(PrintFuncsList.begin(),
- PrintFuncsList.end());
- return PrintFuncNames.empty() || PrintFuncNames.count(FunctionName);
-}
/// isPassDebuggingExecutionsOrMore - Return true if -debug-pass=Executions
/// or higher is specified.
bool PMDataManager::isPassDebuggingExecutionsOrMore() const {
; RUN: llc -O2 -print-after-all < %s 2>/dev/null
-; RUN: llc -O2 -print-after-all < %s 2>&1 | FileCheck %s --check-prefix=ALL
-; RUN: llc -O2 -print-after-all -filter-print-funcs=foo < %s 2>&1 | FileCheck %s --check-prefix=FOO
; REQUIRES: default_triple
-define void @tester(){
- ret void
-}
-define void @foo(){
+define void @tester(){
ret void
}
-;ALL: define void @tester()
-;ALL: define void @foo()
-;ALL: ModuleID =
-
-;FOO: IR Dump After
-;FOO-NEXT: define void @foo()
-;FOO-NOT: define void @tester