1276479Sdim//===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//
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
14276479Sdim#include "llvm/Bitcode/BitcodeWriterPass.h"
15193323Sed#include "llvm/Bitcode/ReaderWriter.h"
16276479Sdim#include "llvm/IR/Module.h"
17276479Sdim#include "llvm/IR/PassManager.h"
18193323Sed#include "llvm/Pass.h"
19193323Sedusing namespace llvm;
20193323Sed
21280031SdimPreservedAnalyses BitcodeWriterPass::run(Module &M) {
22296417Sdim  WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitFunctionSummary);
23276479Sdim  return PreservedAnalyses::all();
24276479Sdim}
25276479Sdim
26193323Sednamespace {
27193323Sed  class WriteBitcodePass : public ModulePass {
28198090Srdivacky    raw_ostream &OS; // raw_ostream to print on
29288943Sdim    bool ShouldPreserveUseListOrder;
30296417Sdim    bool EmitFunctionSummary;
31288943Sdim
32193323Sed  public:
33193323Sed    static char ID; // Pass identification, replacement for typeid
34296417Sdim    explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder,
35296417Sdim                              bool EmitFunctionSummary)
36288943Sdim        : ModulePass(ID), OS(o),
37296417Sdim          ShouldPreserveUseListOrder(ShouldPreserveUseListOrder),
38296417Sdim          EmitFunctionSummary(EmitFunctionSummary) {}
39249423Sdim
40276479Sdim    const char *getPassName() const override { return "Bitcode Writer"; }
41249423Sdim
42276479Sdim    bool runOnModule(Module &M) override {
43296417Sdim      WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder,
44296417Sdim                         EmitFunctionSummary);
45193323Sed      return false;
46193323Sed    }
47193323Sed  };
48193323Sed}
49193323Sed
50193323Sedchar WriteBitcodePass::ID = 0;
51193323Sed
52288943SdimModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
53296417Sdim                                          bool ShouldPreserveUseListOrder,
54296417Sdim                                          bool EmitFunctionSummary) {
55296417Sdim  return new WriteBitcodePass(Str, ShouldPreserveUseListOrder,
56296417Sdim                              EmitFunctionSummary);
57193323Sed}
58