xref: /freebsd/contrib/llvm-project/llvm/include/llvm/Transforms/IPO/ThinLTOBitcodeWriter.h (revision 700637cbb5e582861067a11aaca4d053546871d2)
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