1e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===//
2e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//
3e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//                     The LLVM Compiler Infrastructure
4e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details.
7e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//
8e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//===----------------------------------------------------------------------===//
9e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//
10e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// BitcodeWriterPass implementation.
11e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//
12e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//===----------------------------------------------------------------------===//
13e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
14e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner#include "llvm/Bitcode/ReaderWriter.h"
15e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner#include "llvm/Pass.h"
16e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnerusing namespace llvm;
17e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
18e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnernamespace {
19e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner  class WriteBitcodePass : public ModulePass {
20b515d75856f58a8b3b71d782eb00916d686329adChris Lattner    raw_ostream &OS; // raw_ostream to print on
21e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner  public:
22d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar    static char ID; // Pass identification, replacement for typeid
23d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar    explicit WriteBitcodePass(raw_ostream &o)
2490c579de5a383cee278acc3f7e7b9d0a656e6a35Owen Anderson      : ModulePass(ID), OS(o) {}
25170a15e98dc6900df1ae40d03c5f0622d792fb45Joe Abbey
26bd76d661942c27ee0fe67a7d103ff91192e7d92dGordon Henriksen    const char *getPassName() const { return "Bitcode Writer"; }
27170a15e98dc6900df1ae40d03c5f0622d792fb45Joe Abbey
28e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner    bool runOnModule(Module &M) {
29b515d75856f58a8b3b71d782eb00916d686329adChris Lattner      WriteBitcodeToFile(&M, OS);
30e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner      return false;
31e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner    }
32e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner  };
33e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner}
34e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
35e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnerchar WriteBitcodePass::ID = 0;
36e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
37d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar/// createBitcodeWriterPass - Create and return a pass that writes the module
38d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar/// to the specified ostream.
39d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel DunbarModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str) {
40d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar  return new WriteBitcodePass(Str);
41d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar}
42