1*7ef41710SChris Lattner //===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===// 2*7ef41710SChris Lattner // 3*7ef41710SChris Lattner // The LLVM Compiler Infrastructure 4*7ef41710SChris Lattner // 5*7ef41710SChris Lattner // This file was developed by Chris Lattner and is distributed under 6*7ef41710SChris Lattner // the University of Illinois Open Source License. See LICENSE.TXT for details. 7*7ef41710SChris Lattner // 8*7ef41710SChris Lattner //===----------------------------------------------------------------------===// 9*7ef41710SChris Lattner // 10*7ef41710SChris Lattner // BitcodeWriterPass implementation. 11*7ef41710SChris Lattner // 12*7ef41710SChris Lattner //===----------------------------------------------------------------------===// 13*7ef41710SChris Lattner 14*7ef41710SChris Lattner #include "llvm/Bitcode/ReaderWriter.h" 15*7ef41710SChris Lattner #include "llvm/Pass.h" 16*7ef41710SChris Lattner using namespace llvm; 17*7ef41710SChris Lattner 18*7ef41710SChris Lattner namespace { 19*7ef41710SChris Lattner class WriteBitcodePass : public ModulePass { 20*7ef41710SChris Lattner std::ostream *Out; // ostream to print on 21*7ef41710SChris Lattner public: 22*7ef41710SChris Lattner static char ID; // Pass identifcation, replacement for typeid 23*7ef41710SChris Lattner WriteBitcodePass() : ModulePass((intptr_t) &ID), Out(0) { } 24*7ef41710SChris Lattner WriteBitcodePass(std::ostream &o) : ModulePass((intptr_t) &ID), Out(&o) {} 25*7ef41710SChris Lattner 26*7ef41710SChris Lattner bool runOnModule(Module &M) { 27*7ef41710SChris Lattner if (Out) 28*7ef41710SChris Lattner WriteBitcodeToFile(&M, *Out); 29*7ef41710SChris Lattner return false; 30*7ef41710SChris Lattner } 31*7ef41710SChris Lattner }; 32*7ef41710SChris Lattner } 33*7ef41710SChris Lattner 34*7ef41710SChris Lattner char WriteBitcodePass::ID = 0; 35*7ef41710SChris Lattner static RegisterPass<WriteBitcodePass> X("emitbitcode", "Bitcode Writer"); 36*7ef41710SChris Lattner 37*7ef41710SChris Lattner /// CreateBitcodeWriterPass - Create and return a pass that writes the module 38*7ef41710SChris Lattner /// to the specified ostream. 39*7ef41710SChris Lattner ModulePass *llvm::CreateBitcodeWriterPass(std::ostream &Str) { 40*7ef41710SChris Lattner return new WriteBitcodePass(Str); 41*7ef41710SChris Lattner } 42*7ef41710SChris Lattner 43*7ef41710SChris Lattner 44