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 
2191bc56edSDimitry Andric PreservedAnalyses BitcodeWriterPass::run(Module *M) {
2291bc56edSDimitry Andric   WriteBitcodeToFile(M, OS);
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
29f22ef01cSRoman Divacky   public:
30f22ef01cSRoman Divacky     static char ID; // Pass identification, replacement for typeid
31f22ef01cSRoman Divacky     explicit WriteBitcodePass(raw_ostream &o)
32e580952dSDimitry Andric       : ModulePass(ID), OS(o) {}
33f22ef01cSRoman Divacky 
3491bc56edSDimitry Andric     const char *getPassName() const override { return "Bitcode Writer"; }
35f22ef01cSRoman Divacky 
3691bc56edSDimitry Andric     bool runOnModule(Module &M) override {
37f22ef01cSRoman Divacky       WriteBitcodeToFile(&M, OS);
38f22ef01cSRoman Divacky       return false;
39f22ef01cSRoman Divacky     }
40f22ef01cSRoman Divacky   };
41f22ef01cSRoman Divacky }
42f22ef01cSRoman Divacky 
43f22ef01cSRoman Divacky char WriteBitcodePass::ID = 0;
44f22ef01cSRoman Divacky 
45f22ef01cSRoman Divacky ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str) {
46f22ef01cSRoman Divacky   return new WriteBitcodePass(Str);
47f22ef01cSRoman Divacky }
48