X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FIR%2FIRPrintingPasses.cpp;h=c8a17479d8a051aa3f0f46bac0063cb30da05d54;hb=2970677f21ef006e6c8477e0c3f58fdd28b2ac03;hp=cf82923217309e56b374ee46944abef999673e67;hpb=41d9e92ec019b3d13d1d7e469f4868a0006ed9f7;p=oota-llvm.git diff --git a/lib/IR/IRPrintingPasses.cpp b/lib/IR/IRPrintingPasses.cpp index cf829232173..c8a17479d8a 100644 --- a/lib/IR/IRPrintingPasses.cpp +++ b/lib/IR/IRPrintingPasses.cpp @@ -11,126 +11,117 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/PrintModulePass.h" +#include "llvm/IR/IRPrintingPasses.h" #include "llvm/IR/Function.h" #include "llvm/IR/Module.h" +#include "llvm/IR/PassManager.h" #include "llvm/Pass.h" #include "llvm/Support/Debug.h" #include "llvm/Support/raw_ostream.h" using namespace llvm; +PrintModulePass::PrintModulePass() : OS(dbgs()) {} +PrintModulePass::PrintModulePass(raw_ostream &OS, const std::string &Banner) + : OS(OS), Banner(Banner) {} + +PreservedAnalyses PrintModulePass::run(Module *M) { + OS << Banner << *M; + return PreservedAnalyses::all(); +} + +PrintFunctionPass::PrintFunctionPass() : OS(dbgs()) {} +PrintFunctionPass::PrintFunctionPass(raw_ostream &OS, const std::string &Banner) + : OS(OS), Banner(Banner) {} + +PreservedAnalyses PrintFunctionPass::run(Function *F) { + OS << Banner << static_cast(*F); + return PreservedAnalyses::all(); +} + namespace { - class PrintModulePass : public ModulePass { - std::string Banner; - raw_ostream *Out; // raw_ostream to print on - bool DeleteStream; // Delete the ostream in our dtor? - public: - static char ID; - PrintModulePass() : ModulePass(ID), Out(&dbgs()), - DeleteStream(false) {} - PrintModulePass(const std::string &B, raw_ostream *o, bool DS) - : ModulePass(ID), Banner(B), Out(o), DeleteStream(DS) {} - - ~PrintModulePass() { - if (DeleteStream) delete Out; - } - - bool runOnModule(Module &M) { - (*Out) << Banner << M; - return false; - } - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.setPreservesAll(); - } - }; - - class PrintFunctionPass : public FunctionPass { - std::string Banner; // String to print before each function - raw_ostream *Out; // raw_ostream to print on - bool DeleteStream; // Delete the ostream in our dtor? - public: - static char ID; - PrintFunctionPass() : FunctionPass(ID), Banner(""), Out(&dbgs()), - DeleteStream(false) {} - PrintFunctionPass(const std::string &B, raw_ostream *o, bool DS) - : FunctionPass(ID), Banner(B), Out(o), DeleteStream(DS) {} - - ~PrintFunctionPass() { - if (DeleteStream) delete Out; - } - - // runOnFunction - This pass just prints a banner followed by the - // function as it's processed. - // - bool runOnFunction(Function &F) { - (*Out) << Banner << static_cast(F); - return false; - } - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.setPreservesAll(); - } - }; - - class PrintBasicBlockPass : public BasicBlockPass { - std::string Banner; - raw_ostream *Out; // raw_ostream to print on - bool DeleteStream; // Delete the ostream in our dtor? - public: - static char ID; - PrintBasicBlockPass() : BasicBlockPass(ID), Out(&dbgs()), - DeleteStream(false) {} - PrintBasicBlockPass(const std::string &B, raw_ostream *o, bool DS) - : BasicBlockPass(ID), Banner(B), Out(o), DeleteStream(DS) {} - - ~PrintBasicBlockPass() { - if (DeleteStream) delete Out; - } - - bool runOnBasicBlock(BasicBlock &BB) { - (*Out) << Banner << BB; - return false; - } - - virtual void getAnalysisUsage(AnalysisUsage &AU) const { - AU.setPreservesAll(); - } - }; +class PrintModulePassWrapper : public ModulePass { + PrintModulePass P; + +public: + static char ID; + PrintModulePassWrapper() : ModulePass(ID) {} + PrintModulePassWrapper(raw_ostream &OS, const std::string &Banner) + : ModulePass(ID), P(OS, Banner) {} + + bool runOnModule(Module &M) override { + P.run(&M); + return false; + } + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesAll(); + } +}; + +class PrintFunctionPassWrapper : public FunctionPass { + PrintFunctionPass P; + +public: + static char ID; + PrintFunctionPassWrapper() : FunctionPass(ID) {} + PrintFunctionPassWrapper(raw_ostream &OS, const std::string &Banner) + : FunctionPass(ID), P(OS, Banner) {} + + // This pass just prints a banner followed by the function as it's processed. + bool runOnFunction(Function &F) override { + P.run(&F); + return false; + } + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesAll(); + } +}; + +class PrintBasicBlockPass : public BasicBlockPass { + raw_ostream &Out; + std::string Banner; + +public: + static char ID; + PrintBasicBlockPass() : BasicBlockPass(ID), Out(dbgs()) {} + PrintBasicBlockPass(raw_ostream &Out, const std::string &Banner) + : BasicBlockPass(ID), Out(Out), Banner(Banner) {} + + bool runOnBasicBlock(BasicBlock &BB) override { + Out << Banner << BB; + return false; + } + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.setPreservesAll(); + } +}; + } -char PrintModulePass::ID = 0; -INITIALIZE_PASS(PrintModulePass, "print-module", +char PrintModulePassWrapper::ID = 0; +INITIALIZE_PASS(PrintModulePassWrapper, "print-module", "Print module to stderr", false, false) -char PrintFunctionPass::ID = 0; -INITIALIZE_PASS(PrintFunctionPass, "print-function", +char PrintFunctionPassWrapper::ID = 0; +INITIALIZE_PASS(PrintFunctionPassWrapper, "print-function", "Print function to stderr", false, false) char PrintBasicBlockPass::ID = 0; -INITIALIZE_PASS(PrintBasicBlockPass, "print-bb", - "Print BB to stderr", false, false) +INITIALIZE_PASS(PrintBasicBlockPass, "print-bb", "Print BB to stderr", false, + false) -/// createPrintModulePass - Create and return a pass that writes the -/// module to the specified raw_ostream. -ModulePass *llvm::createPrintModulePass(llvm::raw_ostream *OS, - bool DeleteStream, +ModulePass *llvm::createPrintModulePass(llvm::raw_ostream &OS, const std::string &Banner) { - return new PrintModulePass(Banner, OS, DeleteStream); + return new PrintModulePassWrapper(OS, Banner); } -/// createPrintFunctionPass - Create and return a pass that prints -/// functions to the specified raw_ostream as they are processed. -FunctionPass *llvm::createPrintFunctionPass(const std::string &Banner, - llvm::raw_ostream *OS, - bool DeleteStream) { - return new PrintFunctionPass(Banner, OS, DeleteStream); +FunctionPass *llvm::createPrintFunctionPass(llvm::raw_ostream &OS, + const std::string &Banner) { + return new PrintFunctionPassWrapper(OS, Banner); } -/// createPrintBasicBlockPass - Create and return a pass that writes the -/// BB to the specified raw_ostream. -BasicBlockPass *llvm::createPrintBasicBlockPass(llvm::raw_ostream *OS, - bool DeleteStream, - const std::string &Banner) { - return new PrintBasicBlockPass(Banner, OS, DeleteStream); +BasicBlockPass *llvm::createPrintBasicBlockPass(llvm::raw_ostream &OS, + const std::string &Banner) { + return new PrintBasicBlockPass(OS, Banner); } -