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