136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines//===- BitcodeWriterPass.cpp - Bitcode writing pass -----------------------===// 2e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// 3e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// The LLVM Compiler Infrastructure 4e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// 8e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//===----------------------------------------------------------------------===// 9e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// 10e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// BitcodeWriterPass implementation. 11e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner// 12e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner//===----------------------------------------------------------------------===// 13e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner 1436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/Bitcode/BitcodeWriterPass.h" 15e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner#include "llvm/Bitcode/ReaderWriter.h" 1636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/Module.h" 1736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/IR/PassManager.h" 18e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner#include "llvm/Pass.h" 19e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnerusing namespace llvm; 20e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesPreservedAnalyses BitcodeWriterPass::run(Module *M) { 2236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines WriteBitcodeToFile(M, OS); 2336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines return PreservedAnalyses::all(); 2436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines} 2536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 26e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnernamespace { 27e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner class WriteBitcodePass : public ModulePass { 28b515d75856f58a8b3b71d782eb00916d686329adChris Lattner raw_ostream &OS; // raw_ostream to print on 29e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner public: 30d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar static char ID; // Pass identification, replacement for typeid 31d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar explicit WriteBitcodePass(raw_ostream &o) 3290c579de5a383cee278acc3f7e7b9d0a656e6a35Owen Anderson : ModulePass(ID), OS(o) {} 33170a15e98dc6900df1ae40d03c5f0622d792fb45Joe Abbey 3436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines const char *getPassName() const override { return "Bitcode Writer"; } 35170a15e98dc6900df1ae40d03c5f0622d792fb45Joe Abbey 3636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines bool runOnModule(Module &M) override { 37b515d75856f58a8b3b71d782eb00916d686329adChris Lattner WriteBitcodeToFile(&M, OS); 38e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner return false; 39e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner } 40e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner }; 41e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner} 42e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner 43e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattnerchar WriteBitcodePass::ID = 0; 44e8e1e4bf8a7ced315b0d2ecfdab2478d7bbbe138Chris Lattner 45d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel DunbarModulePass *llvm::createBitcodeWriterPass(raw_ostream &Str) { 46d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar return new WriteBitcodePass(Str); 47d1ce3b48e24b9e7d78cac590d1e4590a68c2e2ceDaniel Dunbar} 48