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) { 22679db334SDuncan P. N. Exon Smith WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder); 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; 30679db334SDuncan P. N. Exon Smith 317ef41710SChris Lattner public: 32890d0debSDaniel Dunbar static char ID; // Pass identification, replacement for typeid 33679db334SDuncan P. N. Exon Smith explicit WriteBitcodePass(raw_ostream &o, bool ShouldPreserveUseListOrder) 34679db334SDuncan P. N. Exon Smith : ModulePass(ID), OS(o), 35679db334SDuncan P. N. Exon Smith ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {} 3635f398a9SGordon Henriksen 378548299aSCraig Topper const char *getPassName() const override { return "Bitcode Writer"; } 387ef41710SChris Lattner 398548299aSCraig Topper bool runOnModule(Module &M) override { 40679db334SDuncan P. N. Exon Smith WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder); 417ef41710SChris Lattner return false; 427ef41710SChris Lattner } 437ef41710SChris Lattner }; 44*f00654e3SAlexander Kornienko } 457ef41710SChris Lattner 467ef41710SChris Lattner char WriteBitcodePass::ID = 0; 477ef41710SChris Lattner 48679db334SDuncan P. N. Exon Smith ModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str, 49679db334SDuncan P. N. Exon Smith bool ShouldPreserveUseListOrder) { 50679db334SDuncan P. N. Exon Smith return new WriteBitcodePass(Str, ShouldPreserveUseListOrder); 51890d0debSDaniel Dunbar } 52