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/Support/Compiler.h" 20 #include <llvm/IR/PassManager.h> 21 22 namespace llvm { 23 class Module; 24 class raw_ostream; 25 26 class ThinLTOBitcodeWriterPass 27 : public PassInfoMixin<ThinLTOBitcodeWriterPass> { 28 raw_ostream &OS; 29 raw_ostream *ThinLinkOS; 30 const bool ShouldPreserveUseListOrder; 31 32 public: 33 // Writes bitcode to OS. Also write thin link file to ThinLinkOS, if 34 // it's not nullptr. 35 ThinLTOBitcodeWriterPass(raw_ostream &OS, raw_ostream *ThinLinkOS, 36 bool ShouldPreserveUseListOrder = false) OS(OS)37 : OS(OS), ThinLinkOS(ThinLinkOS), 38 ShouldPreserveUseListOrder(ShouldPreserveUseListOrder) {} 39 40 LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); 41 isRequired()42 static bool isRequired() { return true; } 43 }; 44 45 } // namespace llvm 46 47 #endif 48