File indexing completed on 2026-05-10 08:44:40
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_TRANSFORMS_IPO_INLINER_H
0010 #define LLVM_TRANSFORMS_IPO_INLINER_H
0011
0012 #include "llvm/Analysis/CGSCCPassManager.h"
0013 #include "llvm/Analysis/InlineAdvisor.h"
0014 #include "llvm/Analysis/InlineCost.h"
0015 #include "llvm/Analysis/LazyCallGraph.h"
0016 #include "llvm/Analysis/Utils/ImportedFunctionsInliningStatistics.h"
0017 #include "llvm/IR/PassManager.h"
0018
0019 namespace llvm {
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 class InlinerPass : public PassInfoMixin<InlinerPass> {
0036 public:
0037 InlinerPass(bool OnlyMandatory = false,
0038 ThinOrFullLTOPhase LTOPhase = ThinOrFullLTOPhase::None)
0039 : OnlyMandatory(OnlyMandatory), LTOPhase(LTOPhase) {}
0040 InlinerPass(InlinerPass &&Arg) = default;
0041
0042 PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
0043 LazyCallGraph &CG, CGSCCUpdateResult &UR);
0044
0045 void printPipeline(raw_ostream &OS,
0046 function_ref<StringRef(StringRef)> MapClassName2PassName);
0047
0048 private:
0049 InlineAdvisor &getAdvisor(const ModuleAnalysisManagerCGSCCProxy::Result &MAM,
0050 FunctionAnalysisManager &FAM, Module &M);
0051 std::unique_ptr<InlineAdvisor> OwnedAdvisor;
0052 const bool OnlyMandatory;
0053 const ThinOrFullLTOPhase LTOPhase;
0054 };
0055
0056
0057
0058
0059
0060
0061 class ModuleInlinerWrapperPass
0062 : public PassInfoMixin<ModuleInlinerWrapperPass> {
0063 public:
0064 ModuleInlinerWrapperPass(
0065 InlineParams Params = getInlineParams(), bool MandatoryFirst = true,
0066 InlineContext IC = {},
0067 InliningAdvisorMode Mode = InliningAdvisorMode::Default,
0068 unsigned MaxDevirtIterations = 0);
0069 ModuleInlinerWrapperPass(ModuleInlinerWrapperPass &&Arg) = default;
0070
0071 PreservedAnalyses run(Module &, ModuleAnalysisManager &);
0072
0073
0074
0075 CGSCCPassManager &getPM() { return PM; }
0076
0077
0078 template <class T> void addModulePass(T Pass) {
0079 MPM.addPass(std::move(Pass));
0080 }
0081
0082
0083 template <class T> void addLateModulePass(T Pass) {
0084 AfterCGMPM.addPass(std::move(Pass));
0085 }
0086
0087 void printPipeline(raw_ostream &OS,
0088 function_ref<StringRef(StringRef)> MapClassName2PassName);
0089
0090 private:
0091 const InlineParams Params;
0092 const InlineContext IC;
0093 const InliningAdvisorMode Mode;
0094 const unsigned MaxDevirtIterations;
0095
0096 CGSCCPassManager PM;
0097 ModulePassManager MPM;
0098 ModulePassManager AfterCGMPM;
0099 };
0100 }
0101
0102 #endif