1 //===- ThinLTOBitcodeWriter.h - Bitcode writing pass for ThinLTO ----------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This pass prepares a module containing type metadata for ThinLTO by splitting 10 // it into regular and thin LTO parts if possible, and writing both parts to 11 // a multi-module bitcode file. Modules that do not contain type metadata are 12 // written unmodified as a single module. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_TRANSFORMS_IPO_THINLTOBITCODEWRITER_H 17 #define LLVM_TRANSFORMS_IPO_THINLTOBITCODEWRITER_H 18 19 #include <llvm/IR/PassManager.h> 20 21 namespace llvm { 22 class Module; 23 class raw_ostream; 24 25 class ThinLTOBitcodeWriterPass 26 : public PassInfoMixin<ThinLTOBitcodeWriterPass> { 27 raw_ostream &OS; 28 raw_ostream *ThinLinkOS; 29 30 public: 31 // Writes bitcode to OS. Also write thin link file to ThinLinkOS, if 32 // it's not nullptr. 33 ThinLTOBitcodeWriterPass(raw_ostream &OS, raw_ostream *ThinLinkOS) 34 : OS(OS), ThinLinkOS(ThinLinkOS) {} 35 36 PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 37 }; 38 39 } // namespace llvm 40 41 #endif 42