1 //===-- BitcodeWriterPass.h - Bitcode writing pass --------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// \file 10 /// 11 /// This file provides a bitcode writing pass. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_BITCODE_BITCODEWRITERPASS_H 16 #define LLVM_BITCODE_BITCODEWRITERPASS_H 17 18 #include "llvm/ADT/StringRef.h" 19 #include "llvm/IR/PassManager.h" 20 21 namespace llvm { 22 class Module; 23 class ModulePass; 24 class raw_ostream; 25 26 /// \brief Create and return a pass that writes the module to the specified 27 /// ostream. Note that this pass is designed for use with the legacy pass 28 /// manager. 29 /// 30 /// If \c ShouldPreserveUseListOrder, encode use-list order so it can be 31 /// reproduced when deserialized. 32 /// 33 /// If \c EmitSummaryIndex, emit the summary index (currently for use in ThinLTO 34 /// optimization). 35 /// 36 /// If \c EmitModuleHash, compute and emit the module hash in the bitcode 37 /// (currently for use in ThinLTO incremental build). 38 ModulePass *createBitcodeWriterPass(raw_ostream &Str, 39 bool ShouldPreserveUseListOrder = false, 40 bool EmitSummaryIndex = false, 41 bool EmitModuleHash = false); 42 43 /// \brief Pass for writing a module of IR out to a bitcode file. 44 /// 45 /// Note that this is intended for use with the new pass manager. To construct 46 /// a pass for the legacy pass manager, use the function above. 47 class BitcodeWriterPass { 48 raw_ostream &OS; 49 bool ShouldPreserveUseListOrder; 50 bool EmitSummaryIndex; 51 bool EmitModuleHash; 52 53 public: 54 /// \brief Construct a bitcode writer pass around a particular output stream. 55 /// 56 /// If \c ShouldPreserveUseListOrder, encode use-list order so it can be 57 /// reproduced when deserialized. 58 /// 59 /// If \c EmitSummaryIndex, emit the summary index (currently 60 /// for use in ThinLTO optimization). 61 explicit BitcodeWriterPass(raw_ostream &OS, 62 bool ShouldPreserveUseListOrder = false, 63 bool EmitSummaryIndex = false, 64 bool EmitModuleHash = false) 65 : OS(OS), ShouldPreserveUseListOrder(ShouldPreserveUseListOrder), 66 EmitSummaryIndex(EmitSummaryIndex), EmitModuleHash(EmitModuleHash) {} 67 68 /// \brief Run the bitcode writer pass, and output the module to the selected 69 /// output stream. 70 PreservedAnalyses run(Module &M, ModuleAnalysisManager &); 71 72 static StringRef name() { return "BitcodeWriterPass"; } 73 }; 74 75 } 76 77 #endif 78