2d63e6d74f12b3c4517ede59abb6ccbefa3d7e65
[oota-llvm.git] / include / llvm / Assembly / PrintModulePass.h
1 //===- llvm/Assembly/PrintModulePass.h - Printing Pass -----------*- C++ -*--=//
2 //
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
7 // processed.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H
12 #define LLVM_ASSEMBLY_PRINTMODULEPASS_H
13
14 #include "llvm/Pass.h"
15 #include "llvm/Value.h"
16 #include <iostream>
17
18 class PrintModulePass : public Pass {
19   std::ostream *Out;      // ostream to print on
20   bool DeleteStream;      // Delete the ostream in our dtor?
21 public:
22   inline PrintModulePass(std::ostream *o = &std::cout, bool DS = false)
23     : Out(o), DeleteStream(DS) {
24   }
25   
26   inline ~PrintModulePass() {
27     if (DeleteStream) delete Out;
28   }
29   
30   bool run(Module *M) {
31     (*Out) << M;
32     return false;
33   }
34
35   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
36     AU.setPreservesAll();
37   }
38 };
39
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?
44 public:
45   inline PrintFunctionPass(const std::string &B, std::ostream *o = &std::cout,
46                            bool DS = false)
47     : Banner(B), Out(o), DeleteStream(DS) {
48   }
49   
50   inline ~PrintFunctionPass() {
51     if (DeleteStream) delete Out;
52   }
53   
54   // runOnFunction - This pass just prints a banner followed by the function as
55   // it's processed.
56   //
57   bool runOnFunction(Function *F) {
58     (*Out) << Banner << (Value*)F;
59     return false;
60   }
61   
62   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
63     AU.setPreservesAll();
64   }
65 };
66
67 #endif