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