BitcodeWriterPass.cpp revision 193323
1193323Sed//===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// BitcodeWriterPass implementation.
11193323Sed//
12193323Sed//===----------------------------------------------------------------------===//
13193323Sed
14193323Sed#include "llvm/Bitcode/ReaderWriter.h"
15193323Sed#include "llvm/Pass.h"
16193323Sedusing namespace llvm;
17193323Sed
18193323Sednamespace {
19193323Sed  class WriteBitcodePass : public ModulePass {
20193323Sed    // FIXME: Kill off std::ostream
21193323Sed    std::ostream *Out;
22193323Sed    raw_ostream *RawOut; // raw_ostream to print on
23193323Sed  public:
24193323Sed    static char ID; // Pass identification, replacement for typeid
25193323Sed    explicit WriteBitcodePass(std::ostream &o)
26193323Sed      : ModulePass(&ID), Out(&o), RawOut(0) {}
27193323Sed    explicit WriteBitcodePass(raw_ostream &o)
28193323Sed      : ModulePass(&ID), Out(0), RawOut(&o) {}
29193323Sed
30193323Sed    const char *getPassName() const { return "Bitcode Writer"; }
31193323Sed
32193323Sed    bool runOnModule(Module &M) {
33193323Sed      if (Out) {
34193323Sed        WriteBitcodeToFile(&M, *Out);
35193323Sed      } else {
36193323Sed        WriteBitcodeToFile(&M, *RawOut);
37193323Sed      }
38193323Sed      return false;
39193323Sed    }
40193323Sed  };
41193323Sed}
42193323Sed
43193323Sedchar WriteBitcodePass::ID = 0;
44193323Sed
45193323Sed/// CreateBitcodeWriterPass - Create and return a pass that writes the module
46193323Sed/// to the specified ostream.
47193323SedModulePass *llvm::CreateBitcodeWriterPass(std::ostream &Str) {
48193323Sed  return new WriteBitcodePass(Str);
49193323Sed}
50193323Sed
51193323Sed
52193323Sed/// createBitcodeWriterPass - Create and return a pass that writes the module
53193323Sed/// to the specified ostream.
54193323SedModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str) {
55193323Sed  return new WriteBitcodePass(Str);
56193323Sed}
57