191bc56edSDimitry Andric //===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===//
2f22ef01cSRoman Divacky //
3f22ef01cSRoman Divacky //                     The LLVM Compiler Infrastructure
4f22ef01cSRoman Divacky //
5f22ef01cSRoman Divacky // This file is distributed under the University of Illinois Open Source
6f22ef01cSRoman Divacky // License. See LICENSE.TXT for details.
7f22ef01cSRoman Divacky //
8f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
9f22ef01cSRoman Divacky //
10f22ef01cSRoman Divacky // BitcodeWriterPass implementation.
11f22ef01cSRoman Divacky //
12f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
13f22ef01cSRoman Divacky 
1491bc56edSDimitry Andric #include "llvm/Bitcode/BitcodeWriterPass.h"
15f22ef01cSRoman Divacky #include "llvm/Bitcode/ReaderWriter.h"
1691bc56edSDimitry Andric #include "llvm/IR/Module.h"
1791bc56edSDimitry Andric #include "llvm/IR/PassManager.h"
18f22ef01cSRoman Divacky #include "llvm/Pass.h"
19f22ef01cSRoman Divacky using namespace llvm;
20f22ef01cSRoman Divacky 
2139d628a0SDimitry Andric PreservedAnalyses BitcodeWriterPass::run(Module &M) {
22ff0cc061SDimitry Andric   WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder);
2391bc56edSDimitry Andric   return PreservedAnalyses::all();
2491bc56edSDimitry Andric }
2591bc56edSDimitry Andric 
26f22ef01cSRoman Divacky namespace {
27f22ef01cSRoman Divacky   class WriteBitcodePass : public ModulePass {
28f22ef01cSRoman Divacky     raw_ostream &OS; // raw_ostream to print on
29ff0cc061SDimitry Andric     bool ShouldPreserveUseListOrder;
30ff0cc061SDimitry Andric 
31f22ef01cSRoman Divacky   public:
32f22ef01cSRoman Divacky     static char ID; // Pass identification, replacement for typeid
33ff0cc061SDimitry Andric     explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder)
34ff0cc061SDimitry Andric         : ModulePass(ID), OS(o),
35ff0cc061SDimitry Andric           ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {}
36f22ef01cSRoman Divacky 
3791bc56edSDimitry Andric     const char *getPassName() const override { return "Bitcode Writer"; }
38f22ef01cSRoman Divacky 
3991bc56edSDimitry Andric     bool runOnModule(Module &M) override {
40ff0cc061SDimitry Andric       WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder);
41f22ef01cSRoman Divacky       return false;
42f22ef01cSRoman Divacky     }
43f22ef01cSRoman Divacky   };
44f22ef01cSRoman Divacky }
45f22ef01cSRoman Divacky 
46f22ef01cSRoman Divacky char WriteBitcodePass::ID = 0;
47f22ef01cSRoman Divacky 
48ff0cc061SDimitry Andric ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str,
49ff0cc061SDimitry Andric                                           bool ShouldPreserveUseListOrder) {
50ff0cc061SDimitry Andric   return new WriteBitcodePass(Str, ShouldPreserveUseListOrder);
51f22ef01cSRoman Divacky }
52