1 //===- llvm/Assembly/PrintModulePass.h - Printing Pass -----------*- C++ -*--=//
3 // This file defines two passes to print out a module. The PrintModulePass pass
4 // simply prints out the entire module when it is executed. The
5 // PrintFunctionPass class is designed to be pipelined with other
6 // FunctionPass's, and prints out the functions of the class as they are
9 //===----------------------------------------------------------------------===//
11 #ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H
12 #define LLVM_ASSEMBLY_PRINTMODULEPASS_H
14 #include "llvm/Pass.h"
15 #include "llvm/Module.h"
17 class PrintModulePass : public Pass {
18 std::ostream *Out; // ostream to print on
19 bool DeleteStream; // Delete the ostream in our dtor?
21 PrintModulePass() : Out(&std::cerr), DeleteStream(false) {}
22 PrintModulePass(std::ostream *o, bool DS = false)
23 : Out(o), DeleteStream(DS) {
27 if (DeleteStream) delete Out;
31 (*Out) << M << std::flush;
35 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
40 class PrintFunctionPass : public FunctionPass {
41 std::string Banner; // String to print before each function
42 std::ostream *Out; // ostream to print on
43 bool DeleteStream; // Delete the ostream in our dtor?
45 PrintFunctionPass() : Banner(""), Out(&std::cerr), DeleteStream(false) {}
46 PrintFunctionPass(const std::string &B, std::ostream *o = &std::cout,
48 : Banner(B), Out(o), DeleteStream(DS) {
51 inline ~PrintFunctionPass() {
52 if (DeleteStream) delete Out;
55 // runOnFunction - This pass just prints a banner followed by the function as
58 bool runOnFunction(Function &F) {
59 (*Out) << Banner << (Value&)F;
63 virtual void getAnalysisUsage(AnalysisUsage &AU) const {