1b7bdfd65SChandler Carruth //===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//
27ef41710SChris Lattner //
37ef41710SChris Lattner //                     The LLVM Compiler Infrastructure
47ef41710SChris Lattner //
5f3ebc3f3SChris Lattner // This file is distributed under the University of Illinois Open Source
6f3ebc3f3SChris Lattner // License. See LICENSE.TXT for details.
77ef41710SChris Lattner //
87ef41710SChris Lattner //===----------------------------------------------------------------------===//
97ef41710SChris Lattner //
107ef41710SChris Lattner // BitcodeWriterPass implementation.
117ef41710SChris Lattner //
127ef41710SChris Lattner //===----------------------------------------------------------------------===//
137ef41710SChris Lattner 
14b7bdfd65SChandler Carruth #include "llvm/Bitcode/BitcodeWriterPass.h"
157ef41710SChris Lattner #include "llvm/Bitcode/ReaderWriter.h"
16b7bdfd65SChandler Carruth #include "llvm/IR/Module.h"
17b7bdfd65SChandler Carruth #include "llvm/IR/PassManager.h"
187ef41710SChris Lattner #include "llvm/Pass.h"
197ef41710SChris Lattner using namespace llvm;
207ef41710SChris Lattner 
21d174ce4aSChandler Carruth PreservedAnalyses BitcodeWriterPass::run(Module &M) {
22*f9e4576eSMehdi Amini   WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitSummaryIndex, EmitModuleHash);
23b7bdfd65SChandler Carruth   return PreservedAnalyses::all();
24b7bdfd65SChandler Carruth }
25b7bdfd65SChandler Carruth 
267ef41710SChris Lattner namespace {
277ef41710SChris Lattner   class WriteBitcodePass : public ModulePass {
286973395cSChris Lattner     raw_ostream &OS; // raw_ostream to print on
29679db334SDuncan P. N. Exon Smith     bool ShouldPreserveUseListOrder;
3026ab5772STeresa Johnson     bool EmitSummaryIndex;
31*f9e4576eSMehdi Amini     bool EmitModuleHash;
32679db334SDuncan P. N. Exon Smith 
337ef41710SChris Lattner   public:
34890d0debSDaniel Dunbar     static char ID; // Pass identification, replacement for typeid
35403a787eSTeresa Johnson     explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder,
36*f9e4576eSMehdi Amini                               bool EmitSummaryIndex, bool EmitModuleHash)
37679db334SDuncan P. N. Exon Smith         : ModulePass(ID), OS(o),
38403a787eSTeresa Johnson           ShouldPreserveUseListOrder(ShouldPreserveUseListOrder),
39*f9e4576eSMehdi Amini           EmitSummaryIndex(EmitSummaryIndex), EmitModuleHash(EmitModuleHash) {}
4035f398a9SGordon Henriksen 
418548299aSCraig Topper     const char *getPassName() const override { return "Bitcode Writer"; }
427ef41710SChris Lattner 
438548299aSCraig Topper     bool runOnModule(Module &M) override {
44*f9e4576eSMehdi Amini       WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitSummaryIndex, EmitModuleHash);
457ef41710SChris Lattner       return false;
467ef41710SChris Lattner     }
477ef41710SChris Lattner   };
48f00654e3SAlexander Kornienko }
497ef41710SChris Lattner 
507ef41710SChris Lattner char WriteBitcodePass::ID = 0;
517ef41710SChris Lattner 
52679db334SDuncan P. N. Exon Smith ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
53403a787eSTeresa Johnson                                           bool ShouldPreserveUseListOrder,
54*f9e4576eSMehdi Amini                                           bool EmitSummaryIndex, bool EmitModuleHash) {
55403a787eSTeresa Johnson   return new WriteBitcodePass(Str, ShouldPreserveUseListOrder,
56*f9e4576eSMehdi Amini                               EmitSummaryIndex, EmitModuleHash);
57890d0debSDaniel Dunbar }
58