* Rename MethodPass class to FunctionPass
[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
36 class PrintFunctionPass : public FunctionPass {
37   std::string Banner;     // String to print before each function
38   std::ostream *Out;      // ostream to print on
39   bool DeleteStream;      // Delete the ostream in our dtor?
40 public:
41   inline PrintFunctionPass(const std::string &B, std::ostream *o = &std::cout,
42                            bool DS = false)
43     : Banner(B), Out(o), DeleteStream(DS) {
44   }
45   
46   inline ~PrintFunctionPass() {
47     if (DeleteStream) delete Out;
48   }
49   
50   // runOnFunction - This pass just prints a banner followed by the function as
51   // it's processed.
52   //
53   bool runOnFunction(Function *F) {
54     (*Out) << Banner << (Value*)F;
55     return false;
56   }
57 };
58
59 #endif