From aaf97a123b5efee99d9bd3bb7651168ae01cd4c3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 18 Oct 2001 20:31:42 +0000 Subject: [PATCH] initial checkin llvm-svn: 902 --- include/llvm/Assembly/PrintModulePass.h | 49 +++++++++++++++++++++++ include/llvm/Bytecode/WriteBytecodePass.h | 32 +++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 include/llvm/Assembly/PrintModulePass.h create mode 100644 include/llvm/Bytecode/WriteBytecodePass.h diff --git a/include/llvm/Assembly/PrintModulePass.h b/include/llvm/Assembly/PrintModulePass.h new file mode 100644 index 00000000000..a03b3492e62 --- /dev/null +++ b/include/llvm/Assembly/PrintModulePass.h @@ -0,0 +1,49 @@ +//===- llvm/Assembly/PrintModulePass.h - Printing Pass -----------*- C++ -*--=// +// +// This file defines a simple pass to print out methods of a module as they are +// processed. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ASSEMBLY_PRINTMODULEPASS_H +#define LLVM_ASSEMBLY_PRINTMODULEPASS_H + +#include "llvm/Pass.h" +#include "llvm/Assembly/Writer.h" + +class PrintModulePass : public Pass { + string Banner; // String to print before each method + 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) { + } + + inline ~PrintModulePass() { + if (DeleteStream) delete Out; + } + + // doPerMethodWork - This pass just prints a banner followed by the method as + // it's processed. + // + bool doPerMethodWork(Method *M) { + if (PrintPerMethod) + (*Out) << Banner << M; + 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; + } +}; + +#endif diff --git a/include/llvm/Bytecode/WriteBytecodePass.h b/include/llvm/Bytecode/WriteBytecodePass.h new file mode 100644 index 00000000000..6a0edbcd99f --- /dev/null +++ b/include/llvm/Bytecode/WriteBytecodePass.h @@ -0,0 +1,32 @@ +//===- llvm/Bytecode/WriteBytecodePass.h - Bytecode Writer Pass --*- C++ -*--=// +// +// This file defines a simple pass to write the working module to a file after +// pass processing is completed. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_BYTECODE_WRITEBYTECODEPASS_H +#define LLVM_BYTECODE_WRITEBYTECODEPASS_H + +#include "llvm/Pass.h" +#include "llvm/Bytecode/Writer.h" + +class WriteBytecodePass : public Pass { + ostream *Out; // ostream to print on + bool DeleteStream; +public: + inline WriteBytecodePass(ostream *o = &cout, bool DS = false) + : Out(o), DeleteStream(DS) { + } + + inline ~WriteBytecodePass() { + if (DeleteStream) delete Out; + } + + bool doPassFinalization(Module *M) { + WriteBytecodeToFile(M, *Out); + return false; + } +}; + +#endif