17ef41710SChris Lattner //===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===// 27ef41710SChris Lattner // 37ef41710SChris Lattner // The LLVM Compiler Infrastructure 47ef41710SChris Lattner // 5f3ebc3f3SChris Lattner // This file is distributed under the University of Illinois Open Source 6f3ebc3f3SChris Lattner // License. See LICENSE.TXT for details. 77ef41710SChris Lattner // 87ef41710SChris Lattner //===----------------------------------------------------------------------===// 97ef41710SChris Lattner // 107ef41710SChris Lattner // BitcodeWriterPass implementation. 117ef41710SChris Lattner // 127ef41710SChris Lattner //===----------------------------------------------------------------------===// 137ef41710SChris Lattner 147ef41710SChris Lattner #include "llvm/Bitcode/ReaderWriter.h" 157ef41710SChris Lattner #include "llvm/Pass.h" 167ef41710SChris Lattner using namespace llvm; 177ef41710SChris Lattner 187ef41710SChris Lattner namespace { 197ef41710SChris Lattner class WriteBitcodePass : public ModulePass { 20*890d0debSDaniel Dunbar // FIXME: Kill off std::ostream 21*890d0debSDaniel Dunbar std::ostream *Out; 22*890d0debSDaniel Dunbar raw_ostream *RawOut; // raw_ostream to print on 237ef41710SChris Lattner public: 24*890d0debSDaniel Dunbar static char ID; // Pass identification, replacement for typeid 25d3208100SDan Gohman explicit WriteBitcodePass(std::ostream &o) 26*890d0debSDaniel Dunbar : ModulePass(&ID), Out(&o), RawOut(0) {} 27*890d0debSDaniel Dunbar explicit WriteBitcodePass(raw_ostream &o) 28*890d0debSDaniel Dunbar : ModulePass(&ID), Out(0), RawOut(&o) {} 2935f398a9SGordon Henriksen 3035f398a9SGordon Henriksen const char *getPassName() const { return "Bitcode Writer"; } 317ef41710SChris Lattner 327ef41710SChris Lattner bool runOnModule(Module &M) { 33*890d0debSDaniel Dunbar if (Out) { 34*890d0debSDaniel Dunbar WriteBitcodeToFile(&M, *Out); 35*890d0debSDaniel Dunbar } else { 36*890d0debSDaniel Dunbar WriteBitcodeToFile(&M, *RawOut); 37*890d0debSDaniel Dunbar } 387ef41710SChris Lattner return false; 397ef41710SChris Lattner } 407ef41710SChris Lattner }; 417ef41710SChris Lattner } 427ef41710SChris Lattner 437ef41710SChris Lattner char WriteBitcodePass::ID = 0; 447ef41710SChris Lattner 457ef41710SChris Lattner /// CreateBitcodeWriterPass - Create and return a pass that writes the module 467ef41710SChris Lattner /// to the specified ostream. 477ef41710SChris Lattner ModulePass *llvm::CreateBitcodeWriterPass(std::ostream &Str) { 487ef41710SChris Lattner return new WriteBitcodePass(Str); 497ef41710SChris Lattner } 507ef41710SChris Lattner 517ef41710SChris Lattner 52*890d0debSDaniel Dunbar /// createBitcodeWriterPass - Create and return a pass that writes the module 53*890d0debSDaniel Dunbar /// to the specified ostream. 54*890d0debSDaniel Dunbar ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str) { 55*890d0debSDaniel Dunbar return new WriteBitcodePass(Str); 56*890d0debSDaniel Dunbar } 57