1
//===--- VMCore/PrintModulePass.cpp - Module/Function Printer -------------===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// PrintModulePass and PrintFunctionPass implementations.
12
//===----------------------------------------------------------------------===//
14
#include "llvm/Assembly/PrintModulePass.h"
16
#include "llvm/Function.h"
17
#include "llvm/Module.h"
18
#include "llvm/Pass.h"
19
#include "llvm/Support/Debug.h"
20
#include "llvm/Support/raw_ostream.h"
25
class PrintModulePass : public ModulePass {
26
raw_ostream *Out; // raw_ostream to print on
27
bool DeleteStream; // Delete the ostream in our dtor?
30
PrintModulePass() : ModulePass(&ID), Out(&dbgs()),
31
DeleteStream(false) {}
32
PrintModulePass(raw_ostream *o, bool DS)
33
: ModulePass(&ID), Out(o), DeleteStream(DS) {}
36
if (DeleteStream) delete Out;
39
bool runOnModule(Module &M) {
44
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
49
class PrintFunctionPass : public FunctionPass {
50
std::string Banner; // String to print before each function
51
raw_ostream *Out; // raw_ostream to print on
52
bool DeleteStream; // Delete the ostream in our dtor?
55
PrintFunctionPass() : FunctionPass(&ID), Banner(""), Out(&dbgs()),
56
DeleteStream(false) {}
57
PrintFunctionPass(const std::string &B, raw_ostream *o, bool DS)
58
: FunctionPass(&ID), Banner(B), Out(o), DeleteStream(DS) {}
60
inline ~PrintFunctionPass() {
61
if (DeleteStream) delete Out;
64
// runOnFunction - This pass just prints a banner followed by the
65
// function as it's processed.
67
bool runOnFunction(Function &F) {
68
(*Out) << Banner << static_cast<Value&>(F);
72
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
78
char PrintModulePass::ID = 0;
79
static RegisterPass<PrintModulePass>
80
X("print-module", "Print module to stderr");
81
char PrintFunctionPass::ID = 0;
82
static RegisterPass<PrintFunctionPass>
83
Y("print-function","Print function to stderr");
85
/// createPrintModulePass - Create and return a pass that writes the
86
/// module to the specified raw_ostream.
87
ModulePass *llvm::createPrintModulePass(llvm::raw_ostream *OS,
89
return new PrintModulePass(OS, DeleteStream);
92
/// createPrintFunctionPass - Create and return a pass that prints
93
/// functions to the specified raw_ostream as they are processed.
94
FunctionPass *llvm::createPrintFunctionPass(const std::string &Banner,
95
llvm::raw_ostream *OS,
97
return new PrintFunctionPass(Banner, OS, DeleteStream);