14cc499d6e5ec602309501873449c938af61170b2Stephen Hines//===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===//
24cc499d6e5ec602309501873449c938af61170b2Stephen Hines//
34cc499d6e5ec602309501873449c938af61170b2Stephen Hines//                     The LLVM Compiler Infrastructure
44cc499d6e5ec602309501873449c938af61170b2Stephen Hines//
54cc499d6e5ec602309501873449c938af61170b2Stephen Hines// This file is distributed under the University of Illinois Open Source
64cc499d6e5ec602309501873449c938af61170b2Stephen Hines// License. See LICENSE.TXT for details.
74cc499d6e5ec602309501873449c938af61170b2Stephen Hines//
84cc499d6e5ec602309501873449c938af61170b2Stephen Hines//===----------------------------------------------------------------------===//
94cc499d6e5ec602309501873449c938af61170b2Stephen Hines//
104cc499d6e5ec602309501873449c938af61170b2Stephen Hines// BitcodeWriterPass implementation.
114cc499d6e5ec602309501873449c938af61170b2Stephen Hines//
124cc499d6e5ec602309501873449c938af61170b2Stephen Hines//===----------------------------------------------------------------------===//
134cc499d6e5ec602309501873449c938af61170b2Stephen Hines
144cc499d6e5ec602309501873449c938af61170b2Stephen Hines#include "ReaderWriter_2_9.h"
1523c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines#include "llvm/IR/Function.h"
1623c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines#include "llvm/IR/Instructions.h"
1723c4358f12bd9d0ba7166eceebd683db95a41b3fStephen Hines#include "llvm/IR/Module.h"
184cc499d6e5ec602309501873449c938af61170b2Stephen Hines#include "llvm/Pass.h"
194cc499d6e5ec602309501873449c938af61170b2Stephen Hinesusing namespace llvm;
204cc499d6e5ec602309501873449c938af61170b2Stephen Hines
214cc499d6e5ec602309501873449c938af61170b2Stephen Hinesnamespace {
224cc499d6e5ec602309501873449c938af61170b2Stephen Hines  class WriteBitcodePass : public ModulePass {
234cc499d6e5ec602309501873449c938af61170b2Stephen Hines    raw_ostream &OS; // raw_ostream to print on
24dbfe3fabb0b82d9c73e4a48a0bc3ebb6a9cda593Shih-wei Liao
254cc499d6e5ec602309501873449c938af61170b2Stephen Hines  public:
264cc499d6e5ec602309501873449c938af61170b2Stephen Hines    static char ID; // Pass identification, replacement for typeid
274cc499d6e5ec602309501873449c938af61170b2Stephen Hines    explicit WriteBitcodePass(raw_ostream &o)
284cc499d6e5ec602309501873449c938af61170b2Stephen Hines      : ModulePass(ID), OS(o) {}
294cc499d6e5ec602309501873449c938af61170b2Stephen Hines
304cc499d6e5ec602309501873449c938af61170b2Stephen Hines    const char *getPassName() const { return "Bitcode Writer"; }
314cc499d6e5ec602309501873449c938af61170b2Stephen Hines
324cc499d6e5ec602309501873449c938af61170b2Stephen Hines    bool runOnModule(Module &M) {
33dbfe3fabb0b82d9c73e4a48a0bc3ebb6a9cda593Shih-wei Liao      bool Changed = false;
344cc499d6e5ec602309501873449c938af61170b2Stephen Hines      llvm_2_9::WriteBitcodeToFile(&M, OS);
35dbfe3fabb0b82d9c73e4a48a0bc3ebb6a9cda593Shih-wei Liao      return Changed;
364cc499d6e5ec602309501873449c938af61170b2Stephen Hines    }
374cc499d6e5ec602309501873449c938af61170b2Stephen Hines  };
384cc499d6e5ec602309501873449c938af61170b2Stephen Hines}
394cc499d6e5ec602309501873449c938af61170b2Stephen Hines
404cc499d6e5ec602309501873449c938af61170b2Stephen Hineschar WriteBitcodePass::ID = 0;
414cc499d6e5ec602309501873449c938af61170b2Stephen Hines
424cc499d6e5ec602309501873449c938af61170b2Stephen Hines/// createBitcodeWriterPass - Create and return a pass that writes the module
434cc499d6e5ec602309501873449c938af61170b2Stephen Hines/// to the specified ostream.
444cc499d6e5ec602309501873449c938af61170b2Stephen Hinesllvm::ModulePass *llvm_2_9::createBitcodeWriterPass(llvm::raw_ostream &Str) {
454cc499d6e5ec602309501873449c938af61170b2Stephen Hines  return new WriteBitcodePass(Str);
464cc499d6e5ec602309501873449c938af61170b2Stephen Hines}
47