29class PrintModulePassWrapper :
public ModulePass {
32 bool ShouldPreserveUseListOrder;
36 PrintModulePassWrapper() : ModulePass(ID), OS(
dbgs()) {}
37 PrintModulePassWrapper(raw_ostream &OS,
const std::string &Banner,
38 bool ShouldPreserveUseListOrder)
39 : ModulePass(ID), OS(OS), Banner(Banner),
40 ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
42 bool runOnModule(
Module &M)
override {
45 M.removeDebugIntrinsicDeclarations();
50 M.print(OS,
nullptr, ShouldPreserveUseListOrder);
52 bool BannerPrinted =
false;
53 for (
const auto &
F :
M.functions()) {
55 if (!BannerPrinted && !Banner.empty()) {
67 void getAnalysisUsage(AnalysisUsage &AU)
const override {
71 StringRef getPassName()
const override {
return "Print Module IR"; }
80 PrintFunctionPassWrapper() : FunctionPass(ID), OS(
dbgs()) {}
81 PrintFunctionPassWrapper(raw_ostream &OS,
const std::string &Banner)
82 : FunctionPass(ID), OS(OS), Banner(Banner) {}
88 OS << Banner <<
" (function: " <<
F.getName() <<
")\n"
91 OS << Banner << '\n' << static_cast<Value &>(
F);
97 void getAnalysisUsage(AnalysisUsage &AU)
const override {
101 StringRef getPassName()
const override {
return "Print Function IR"; }
106char PrintModulePassWrapper::ID = 0;
108 "Print module to stderr",
false,
true)
109char PrintFunctionPassWrapper::
ID = 0;
115 bool ShouldPreserveUseListOrder) {
116 return new PrintModulePassWrapper(OS, Banner, ShouldPreserveUseListOrder);
120 const std::string &Banner) {
121 return new PrintFunctionPassWrapper(OS, Banner);
125 const char *PID = (
const char *)
P->getPassID();
127 return (PID == &PrintModulePassWrapper::ID) ||
128 (PID == &PrintFunctionPassWrapper::ID);
static bool runOnFunction(Function &F, bool PostInlining)
This file contains an interface for creating legacy passes to print out IR in various granularities.
Module.h This file contains the declarations for the Module class.
Machine Check Debug Module
#define INITIALIZE_PASS(passName, arg, name, cfg, analysis)
void setPreservesAll()
Set by analyses that do not transform their input at all.
FunctionPass class - This class is used to implement most global optimizations.
ModulePass class - This class is used to implement unstructured interprocedural optimizations and ana...
Pass interface - Implemented by all 'passes'.
This class implements an extremely fast bulk output stream that can only output to a stream.
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
This is an optimization pass for GlobalISel generic memory operations.
bool forcePrintModuleIR()
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
bool isFunctionInPrintList(StringRef FunctionName)
LLVM_ABI bool isIRPrintingPass(Pass *P)
Return true if a pass is for IR printing.
LLVM_ABI ModulePass * createPrintModulePass(raw_ostream &OS, const std::string &Banner="", bool ShouldPreserveUseListOrder=false)
Create and return a pass that writes the module to the specified raw_ostream.
LLVM_ABI FunctionPass * createPrintFunctionPass(raw_ostream &OS, const std::string &Banner="")
Create and return a pass that prints functions to the specified raw_ostream as they are processed.
Implement std::hash so that hash_code can be used in STL containers.