1 //===--- IRPrintingPasses.cpp - Module and Function printing passes -------===//
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/IR/IRPrintingPasses.h"
15 #include "llvm/IR/Function.h"
16 #include "llvm/IR/Module.h"
17 #include "llvm/Pass.h"
18 #include "llvm/Support/Debug.h"
19 #include "llvm/Support/raw_ostream.h"
24 class PrintModulePass : public ModulePass {
30 PrintModulePass() : ModulePass(ID), Out(dbgs()) {}
31 PrintModulePass(raw_ostream &Out, const std::string &Banner)
32 : ModulePass(ID), Out(Out), Banner(Banner) {}
34 bool runOnModule(Module &M) {
39 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
44 class PrintFunctionPass : public FunctionPass {
50 PrintFunctionPass() : FunctionPass(ID), Out(dbgs()) {}
51 PrintFunctionPass(raw_ostream &Out, const std::string &Banner)
52 : FunctionPass(ID), Out(Out), Banner(Banner) {}
54 // This pass just prints a banner followed by the function as it's processed.
55 bool runOnFunction(Function &F) {
56 Out << Banner << static_cast<Value &>(F);
60 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
65 class PrintBasicBlockPass : public BasicBlockPass {
71 PrintBasicBlockPass() : BasicBlockPass(ID), Out(dbgs()) {}
72 PrintBasicBlockPass(raw_ostream &Out, const std::string &Banner)
73 : BasicBlockPass(ID), Out(Out), Banner(Banner) {}
75 bool runOnBasicBlock(BasicBlock &BB) {
80 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
87 char PrintModulePass::ID = 0;
88 INITIALIZE_PASS(PrintModulePass, "print-module", "Print module to stderr",
90 char PrintFunctionPass::ID = 0;
91 INITIALIZE_PASS(PrintFunctionPass, "print-function", "Print function to stderr",
93 char PrintBasicBlockPass::ID = 0;
94 INITIALIZE_PASS(PrintBasicBlockPass, "print-bb", "Print BB to stderr", false,
97 ModulePass *llvm::createPrintModulePass(llvm::raw_ostream &OS,
98 const std::string &Banner) {
99 return new PrintModulePass(OS, Banner);
102 FunctionPass *llvm::createPrintFunctionPass(llvm::raw_ostream &OS,
103 const std::string &Banner) {
104 return new PrintFunctionPass(OS, Banner);
107 BasicBlockPass *llvm::createPrintBasicBlockPass(llvm::raw_ostream &OS,
108 const std::string &Banner) {
109 return new PrintBasicBlockPass(OS, Banner);