1 //===-- EmbedBitcodePass.h - Embeds bitcode into global ---------*- C++ -*-===//
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 /// \file
9 ///
10 /// This file provides a pass which clones the current module and runs the
11 /// provided pass pipeline on the clone. The optimized module is stored into a
12 /// global variable in the `.llvm.lto` section. Primarily, this pass is used
13 /// to support the FatLTO pipeline, but could be used to generate a bitcode
14 /// section for any arbitrary pass pipeline without changing the current module.
15 ///
16 //===----------------------------------------------------------------------===//
17 //
18 #ifndef LLVM_TRANSFORMS_IPO_EMBEDBITCODEPASS_H
19 #define LLVM_TRANSFORMS_IPO_EMBEDBITCODEPASS_H
20 
21 #include "llvm/IR/PassManager.h"
22 
23 namespace llvm {
24 class Module;
25 class Pass;
26 
27 /// Pass embeds a copy of the module optimized with the provided pass pipeline
28 /// into a global variable.
29 class EmbedBitcodePass : public PassInfoMixin<EmbedBitcodePass> {
30   ModulePassManager MPM;
31 
32 public:
33   EmbedBitcodePass() {}
34 
35   PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
36 
37   static bool isRequired() { return true; }
38 };
39 
40 } // end namespace llvm.
41 
42 #endif
43