X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAssembly%2FPrintModulePass.h;h=0f65235d77de743f073efa1d14f23502be8d70f7;hb=1a957d563fe894c797e0eba00bf069fbe7ecba77;hp=a03b3492e622dc176d2f8c5499ae497dba68c5a6;hpb=b44405a90d9ec3e868f196ed6a3730241d6b4de0;p=oota-llvm.git diff --git a/include/llvm/Assembly/PrintModulePass.h b/include/llvm/Assembly/PrintModulePass.h index a03b3492e62..0f65235d77d 100644 --- a/include/llvm/Assembly/PrintModulePass.h +++ b/include/llvm/Assembly/PrintModulePass.h @@ -1,6 +1,16 @@ -//===- llvm/Assembly/PrintModulePass.h - Printing Pass -----------*- C++ -*--=// +//===- llvm/Assembly/PrintModulePass.h - Printing Pass ----------*- C++ -*-===// // -// This file defines a simple pass to print out methods of a module as they are +// The LLVM Compiler Infrastructure +// +// This file was developed by the LLVM research group and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines two passes to print out a module. The PrintModulePass pass +// simply prints out the entire module when it is executed. The +// PrintFunctionPass class is designed to be pipelined with other +// FunctionPass's, and prints out the functions of the class as they are // processed. // //===----------------------------------------------------------------------===// @@ -9,41 +19,63 @@ #define LLVM_ASSEMBLY_PRINTMODULEPASS_H #include "llvm/Pass.h" -#include "llvm/Assembly/Writer.h" +#include "llvm/Module.h" +#include "llvm/Support/Streams.h" + +namespace llvm { -class PrintModulePass : public Pass { - string Banner; // String to print before each method - ostream *Out; // ostream to print on +class PrintModulePass : public ModulePass { + OStream *Out; // ostream to print on bool DeleteStream; // Delete the ostream in our dtor? - bool PrintPerMethod; // Print one method at a time rather than the whole? public: - inline PrintModulePass(const string &B, ostream *o = &cout, - bool DS = false, - bool printPerMethod = true) - : Banner(B), Out(o), DeleteStream(DS), PrintPerMethod(printPerMethod) { + static char ID; + PrintModulePass() : ModulePass((intptr_t)&ID), Out(&cerr), DeleteStream(false) {} + PrintModulePass(OStream *o, bool DS = false) + : ModulePass((intptr_t)&ID), Out(o), DeleteStream(DS) {} + + ~PrintModulePass() { + if (DeleteStream) delete Out; } - - inline ~PrintModulePass() { + + bool runOnModule(Module &M) { + (*Out) << M << std::flush; + return false; + } + + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + } +}; + +class PrintFunctionPass : public FunctionPass { + std::string Banner; // String to print before each function + OStream *Out; // ostream to print on + bool DeleteStream; // Delete the ostream in our dtor? +public: + static char ID; + PrintFunctionPass() : FunctionPass((intptr_t)&ID), Banner(""), Out(&cerr), + DeleteStream(false) {} + PrintFunctionPass(const std::string &B, OStream *o = &cout, + bool DS = false) + : FunctionPass((intptr_t)&ID), Banner(B), Out(o), DeleteStream(DS) {} + + inline ~PrintFunctionPass() { if (DeleteStream) delete Out; } - - // doPerMethodWork - This pass just prints a banner followed by the method as + + // runOnFunction - This pass just prints a banner followed by the function as // it's processed. // - bool doPerMethodWork(Method *M) { - if (PrintPerMethod) - (*Out) << Banner << M; + bool runOnFunction(Function &F) { + (*Out) << Banner << static_cast(F); return false; } - // doPassFinalization - Virtual method overriden by subclasses to do any post - // processing needed after all passes have run. - // - bool doPassFinalization(Module *M) { - if (! PrintPerMethod) - (*Out) << Banner << M; - return false; + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); } }; +} // End llvm namespace + #endif