136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//
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
1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Bitcode/BitcodeWriterPass.h"
15e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner#include "llvm/Bitcode/ReaderWriter.h"
1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/Module.h"
1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/PassManager.h"
18e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner#include "llvm/Pass.h"
19e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnerusing namespace llvm;
20e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesPreservedAnalyses BitcodeWriterPass::run(Module *M) {
2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  WriteBitcodeToFile(M, OS);
2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines  return PreservedAnalyses::all();
2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines}
2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines
26e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnernamespace {
27e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner  class WriteBitcodePass : public ModulePass {
28b515d75856f58a8b3b71d782eb00916d686329adChris Lattner    raw_ostream &OS; // raw_ostream to print on
29e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner  public:
30d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar    static char ID; // Pass identification, replacement for typeid
31d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar    explicit WriteBitcodePass(raw_ostream &o)
3290c579de5a383cee278acc3f7e7b9d0a656e6a35Owen Anderson      : ModulePass(ID), OS(o) {}
33170a15e98dc6900df1ae40d03c5f0622d792fb45Joe Abbey
3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    const char *getPassName() const override { return "Bitcode Writer"; }
35170a15e98dc6900df1ae40d03c5f0622d792fb45Joe Abbey
3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines    bool runOnModule(Module &M) override {
37b515d75856f58a8b3b71d782eb00916d686329adChris Lattner      WriteBitcodeToFile(&M, OS);
38e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner      return false;
39e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner    }
40e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner  };
41e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner}
42e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
43e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnerchar WriteBitcodePass::ID = 0;
44e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner
45d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel DunbarModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str) {
46d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar  return new WriteBitcodePass(Str);
47d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar}
48