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/Value.h"
18 class PrintModulePass : public Pass {
19 std::ostream *Out; // ostream to print on
20 bool DeleteStream; // Delete the ostream in our dtor?
22 PrintModulePass() : Out(&std::cerr), DeleteStream(false) {}
23 PrintModulePass(std::ostream *o, bool DS = false)
24 : Out(o), DeleteStream(DS) {
28 if (DeleteStream) delete Out;
36 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
41 class PrintFunctionPass : public FunctionPass {
42 std::string Banner; // String to print before each function
43 std::ostream *Out; // ostream to print on
44 bool DeleteStream; // Delete the ostream in our dtor?
46 PrintFunctionPass() : Banner(""), Out(&std::cerr), DeleteStream(false) {}
47 PrintFunctionPass(const std::string &B, std::ostream *o = &std::cout,
49 : Banner(B), Out(o), DeleteStream(DS) {
52 inline ~PrintFunctionPass() {
53 if (DeleteStream) delete Out;
56 // runOnFunction - This pass just prints a banner followed by the function as
59 bool runOnFunction(Function &F) {
60 (*Out) << Banner << (Value&)F;
64 virtual void getAnalysisUsage(AnalysisUsage &AU) const {