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) { 227d523365SDimitry Andric WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitFunctionSummary); 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; 307d523365SDimitry Andric bool EmitFunctionSummary; 31ff0cc061SDimitry Andric 32f22ef01cSRoman Divacky public: 33f22ef01cSRoman Divacky static char ID; // Pass identification, replacement for typeid 347d523365SDimitry Andric explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder, 357d523365SDimitry Andric bool EmitFunctionSummary) 36ff0cc061SDimitry Andric : ModulePass(ID), OS(o), 377d523365SDimitry Andric ShouldPreserveUseListOrder(ShouldPreserveUseListOrder), 387d523365SDimitry Andric EmitFunctionSummary(EmitFunctionSummary) {} 39f22ef01cSRoman Divacky 4091bc56edSDimitry Andric const char *getPassName() const override { return "Bitcode Writer"; } 41f22ef01cSRoman Divacky 4291bc56edSDimitry Andric bool runOnModule(Module &M) override { 437d523365SDimitry Andric WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, 447d523365SDimitry Andric EmitFunctionSummary); 45f22ef01cSRoman Divacky return false; 46f22ef01cSRoman Divacky } 47f22ef01cSRoman Divacky }; 483dac3a9bSDimitry Andric } 49f22ef01cSRoman Divacky 50f22ef01cSRoman Divacky char WriteBitcodePass::ID = 0; 51f22ef01cSRoman Divacky 52ff0cc061SDimitry Andric ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str, 537d523365SDimitry Andric bool ShouldPreserveUseListOrder, 547d523365SDimitry Andric bool EmitFunctionSummary) { 557d523365SDimitry Andric return new WriteBitcodePass(Str, ShouldPreserveUseListOrder, 567d523365SDimitry Andric EmitFunctionSummary); 57f22ef01cSRoman Divacky } 58