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*403a787eSTeresa Johnson WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, EmitFunctionSummary); 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; 30*403a787eSTeresa Johnson bool EmitFunctionSummary; 31679db334SDuncan P. N. Exon Smith 327ef41710SChris Lattner public: 33890d0debSDaniel Dunbar static char ID; // Pass identification, replacement for typeid 34*403a787eSTeresa Johnson explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder, 35*403a787eSTeresa Johnson bool EmitFunctionSummary) 36679db334SDuncan P. N. Exon Smith : ModulePass(ID), OS(o), 37*403a787eSTeresa Johnson ShouldPreserveUseListOrder(ShouldPreserveUseListOrder), 38*403a787eSTeresa Johnson EmitFunctionSummary(EmitFunctionSummary) {} 3935f398a9SGordon Henriksen 408548299aSCraig Topper const char *getPassName() const override { return "Bitcode Writer"; } 417ef41710SChris Lattner 428548299aSCraig Topper bool runOnModule(Module &M) override { 43*403a787eSTeresa Johnson WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, 44*403a787eSTeresa Johnson EmitFunctionSummary); 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, 53*403a787eSTeresa Johnson bool ShouldPreserveUseListOrder, 54*403a787eSTeresa Johnson bool EmitFunctionSummary) { 55*403a787eSTeresa Johnson return new WriteBitcodePass(Str, ShouldPreserveUseListOrder, 56*403a787eSTeresa Johnson EmitFunctionSummary); 57890d0debSDaniel Dunbar } 58