LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PrintModulePass.cpp
Go to the documentation of this file.
1 //===--- IR/PrintModulePass.cpp - Module/Function Printer -----------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // PrintModulePass and PrintFunctionPass implementations.
11 //
12 //===----------------------------------------------------------------------===//
13 
15 #include "llvm/IR/Function.h"
16 #include "llvm/IR/Module.h"
17 #include "llvm/Pass.h"
18 #include "llvm/Support/Debug.h"
20 using namespace llvm;
21 
22 namespace {
23 
24  class PrintModulePass : public ModulePass {
25  std::string Banner;
26  raw_ostream *Out; // raw_ostream to print on
27  bool DeleteStream; // Delete the ostream in our dtor?
28  public:
29  static char ID;
30  PrintModulePass() : ModulePass(ID), Out(&dbgs()),
31  DeleteStream(false) {}
32  PrintModulePass(const std::string &B, raw_ostream *o, bool DS)
33  : ModulePass(ID), Banner(B), Out(o), DeleteStream(DS) {}
34 
35  ~PrintModulePass() {
36  if (DeleteStream) delete Out;
37  }
38 
39  bool runOnModule(Module &M) {
40  (*Out) << Banner << M;
41  return false;
42  }
43 
44  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
45  AU.setPreservesAll();
46  }
47  };
48 
49  class PrintFunctionPass : public FunctionPass {
50  std::string Banner; // String to print before each function
51  raw_ostream *Out; // raw_ostream to print on
52  bool DeleteStream; // Delete the ostream in our dtor?
53  public:
54  static char ID;
55  PrintFunctionPass() : FunctionPass(ID), Banner(""), Out(&dbgs()),
56  DeleteStream(false) {}
57  PrintFunctionPass(const std::string &B, raw_ostream *o, bool DS)
58  : FunctionPass(ID), Banner(B), Out(o), DeleteStream(DS) {}
59 
60  ~PrintFunctionPass() {
61  if (DeleteStream) delete Out;
62  }
63 
64  // runOnFunction - This pass just prints a banner followed by the
65  // function as it's processed.
66  //
67  bool runOnFunction(Function &F) {
68  (*Out) << Banner << static_cast<Value&>(F);
69  return false;
70  }
71 
72  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
73  AU.setPreservesAll();
74  }
75  };
76 
77  class PrintBasicBlockPass : public BasicBlockPass {
78  std::string Banner;
79  raw_ostream *Out; // raw_ostream to print on
80  bool DeleteStream; // Delete the ostream in our dtor?
81  public:
82  static char ID;
83  PrintBasicBlockPass() : BasicBlockPass(ID), Out(&dbgs()),
84  DeleteStream(false) {}
85  PrintBasicBlockPass(const std::string &B, raw_ostream *o, bool DS)
86  : BasicBlockPass(ID), Banner(B), Out(o), DeleteStream(DS) {}
87 
88  ~PrintBasicBlockPass() {
89  if (DeleteStream) delete Out;
90  }
91 
92  bool runOnBasicBlock(BasicBlock &BB) {
93  (*Out) << Banner << BB;
94  return false;
95  }
96 
97  virtual void getAnalysisUsage(AnalysisUsage &AU) const {
98  AU.setPreservesAll();
99  }
100  };
101 }
102 
103 char PrintModulePass::ID = 0;
104 INITIALIZE_PASS(PrintModulePass, "print-module",
105  "Print module to stderr", false, false)
106 char PrintFunctionPass::ID = 0;
107 INITIALIZE_PASS(PrintFunctionPass, "print-function",
108  "Print function to stderr", false, false)
109 char PrintBasicBlockPass::ID = 0;
110 INITIALIZE_PASS(PrintBasicBlockPass, "print-bb",
111  "Print BB to stderr", false, false)
112 
113 /// createPrintModulePass - Create and return a pass that writes the
114 /// module to the specified raw_ostream.
116  bool DeleteStream,
117  const std::string &Banner) {
118  return new PrintModulePass(Banner, OS, DeleteStream);
119 }
120 
121 /// createPrintFunctionPass - Create and return a pass that prints
122 /// functions to the specified raw_ostream as they are processed.
123 FunctionPass *llvm::createPrintFunctionPass(const std::string &Banner,
124  llvm::raw_ostream *OS,
125  bool DeleteStream) {
126  return new PrintFunctionPass(Banner, OS, DeleteStream);
127 }
128 
129 /// createPrintBasicBlockPass - Create and return a pass that writes the
130 /// BB to the specified raw_ostream.
132  bool DeleteStream,
133  const std::string &Banner) {
134  return new PrintBasicBlockPass(Banner, OS, DeleteStream);
135 }
136 
The main container class for the LLVM Intermediate Representation.
Definition: Module.h:112
INITIALIZE_PASS(PrintModulePass,"print-module","Print module to stderr", false, false) char PrintFunctionPass INITIALIZE_PASS(PrintFunctionPass,"print-function","Print function to stderr", false, false) char PrintBasicBlockPass INITIALIZE_PASS(PrintBasicBlockPass,"print-bb","Print BB to stderr", false, false) ModulePass *llvm
F(f)
ModulePass * createPrintModulePass(raw_ostream *OS, bool DeleteStream=false, const std::string &Banner="")
ID
LLVM Calling Convention Representation.
Definition: CallingConv.h:26
#define false
Definition: ConvertUTF.c:64
LLVM Basic Block Representation.
Definition: BasicBlock.h:72
FunctionPass * createPrintFunctionPass(const std::string &Banner, raw_ostream *OS, bool DeleteStream=false)
raw_ostream & dbgs()
dbgs - Return a circular-buffered debug stream.
Definition: Debug.cpp:101
BasicBlockPass * createPrintBasicBlockPass(raw_ostream *OS, bool DeleteStream=false, const std::string &Banner="")
print Print MemDeps of function