Remove trailing whitespace
[oota-llvm.git] / include / llvm / Assembly / PrintModulePass.h
1 //===- llvm/Assembly/PrintModulePass.h - Printing Pass ----------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines two passes to print out a module.  The PrintModulePass pass
11 // simply prints out the entire module when it is executed.  The
12 // PrintFunctionPass class is designed to be pipelined with other
13 // FunctionPass's, and prints out the functions of the class as they are
14 // processed.
15 //
16 //===----------------------------------------------------------------------===//
17
18 #ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H
19 #define LLVM_ASSEMBLY_PRINTMODULEPASS_H
20
21 #include "llvm/Pass.h"
22 #include "llvm/Module.h"
23 #include <iostream>
24
25 namespace llvm {
26
27 class PrintModulePass : public ModulePass {
28   std::ostream *Out;      // ostream to print on
29   bool DeleteStream;      // Delete the ostream in our dtor?
30 public:
31   PrintModulePass() : Out(&std::cerr), DeleteStream(false) {}
32   PrintModulePass(std::ostream *o, bool DS = false)
33     : Out(o), DeleteStream(DS) {
34   }
35
36   ~PrintModulePass() {
37     if (DeleteStream) delete Out;
38   }
39
40   bool runOnModule(Module &M) {
41     (*Out) << M << std::flush;
42     return false;
43   }
44
45   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
46     AU.setPreservesAll();
47   }
48 };
49
50 class PrintFunctionPass : public FunctionPass {
51   std::string Banner;     // String to print before each function
52   std::ostream *Out;      // ostream to print on
53   bool DeleteStream;      // Delete the ostream in our dtor?
54 public:
55   PrintFunctionPass() : Banner(""), Out(&std::cerr), DeleteStream(false) {}
56   PrintFunctionPass(const std::string &B, std::ostream *o = &std::cout,
57                     bool DS = false)
58     : Banner(B), Out(o), DeleteStream(DS) {
59   }
60
61   inline ~PrintFunctionPass() {
62     if (DeleteStream) delete Out;
63   }
64
65   // runOnFunction - This pass just prints a banner followed by the function as
66   // it's processed.
67   //
68   bool runOnFunction(Function &F) {
69     (*Out) << Banner << (Value&)F;
70     return false;
71   }
72
73   virtual void getAnalysisUsage(AnalysisUsage &AU) const {
74     AU.setPreservesAll();
75   }
76 };
77
78 } // End llvm namespace
79
80 #endif