LLVM: include/llvm/Analysis/InlineAdvisor.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_ANALYSIS_INLINEADVISOR_H
10#define LLVM_ANALYSIS_INLINEADVISOR_H
11
17#include
18
19namespace llvm {
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
44
45
56
57
58
64
66
68
69
70
71
72
73
74
76public:
80
84 assert(Recorded && "InlineAdvice should have been informed of the "
85 "inliner's decision in all cases");
86 }
87
88
89
90
91
93
94
95
96
98
99
101 markRecorded();
103 }
104
105
107 markRecorded();
109 }
110
111
115
116protected:
121
123
126
127
128
129
134
135private:
136 void markRecorded() {
137 assert(!Recorded && "Recording should happen exactly once");
138 Recorded = true;
139 }
140 void recordInlineStatsIfNeeded();
141
142 bool Recorded = false;
143};
144
146public:
148 std::optional OIC,
151 OIC(OIC), EmitRemarks(EmitRemarks) {}
152
153private:
154 void recordUnsuccessfulInliningImpl(const InlineResult &Result) override;
155 void recordInliningWithCalleeDeletedImpl() override;
156 void recordInliningImpl() override;
157
158private:
160 std::optional OIC;
161 bool EmitRemarks;
162};
163
164
166public:
169
170
171
172
173
174
175
176
177
178
179
181 bool MandatoryOnly = false);
182
183
184
185
187
188
189
190
192
193
195 OS << "Unimplemented InlineAdvisor print\n";
196 }
197
198
202
203protected:
205 std::optional IC = std::nullopt);
208 bool Advice);
209
215
217
218 static MandatoryInliningKind getMandatoryKind(CallBase &CB,
221
223
224private:
226};
227
228
229
230
232public:
236
237private:
238 std::unique_ptr getAdviceImpl(CallBase &CB) override;
239
241};
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
283public:
285
290
292 assert(Factory != nullptr &&
293 "The plugin advisor factory should not be a null pointer.");
294 }
295
299
302
303private:
305};
306
307
308
310public:
316 ModuleAnalysisManager::Invalidator &) {
317
318
320 return !PAC.preservedWhenStateless();
321 }
326
327 private:
330 std::unique_ptr Advisor;
331 };
332
334
335private:
336 static bool initializeIR2VecVocabIfRequested(Module &M,
338};
339
340
342 : public PassInfoMixin {
344
345public:
347
349
354};
355
356LLVM_ABI std::unique_ptr
358 std::function<bool(CallBase &)> GetDefaultAdvice);
359
360LLVM_ABI std::unique_ptr
362 std::function<bool(CallBase &)> GetDefaultAdvice);
363
364
365
366
367
368
369
370
371LLVM_ABI std::optional
375
376
380 const Function &Caller, bool IsMandatory,
382 const char *PassName = nullptr);
383
384
386 OptimizationRemarkEmitter &ORE, DebugLoc DLoc, const BasicBlock *Block,
387 const Function &Callee, const Function &Caller, const InlineCost &IC,
388 bool ForProfileContext = false, const char *PassName = nullptr);
389
390
392
393
395
396
398}
399#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This header provides classes for managing passes over SCCs of the call graph.
This header defines various interfaces for pass management in LLVM.
Implements a lazy call graph analysis and related passes for the new pass manager.
Machine Check Debug Module
FunctionAnalysisManager FAM
ModuleAnalysisManager MAM
static cl::opt< RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode > Mode("regalloc-enable-advisor", cl::Hidden, cl::init(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default), cl::desc("Enable regalloc advisor mode"), cl::values(clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Default, "default", "Default"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Release, "release", "precompiled"), clEnumValN(RegAllocEvictionAdvisorAnalysisLegacy::AdvisorMode::Development, "development", "for training")))
static const char PassName[]
LLVM Basic Block Representation.
Base class for all callable instructions (InvokeInst and CallInst) Holds everything related to callin...
DefaultInlineAdvice(InlineAdvisor *Advisor, CallBase &CB, std::optional< InlineCost > OIC, OptimizationRemarkEmitter &ORE, bool EmitRemarks=true)
Definition InlineAdvisor.h:147
DefaultInlineAdvisor(Module &M, FunctionAnalysisManager &FAM, InlineParams Params, InlineContext IC)
Definition InlineAdvisor.h:233
Calculate and dump ThinLTO specific inliner stats.
Function *const Callee
Definition InlineAdvisor.h:125
Function *const Caller
Caller and Callee are pre-inlining.
Definition InlineAdvisor.h:124
InlineAdvice(InlineAdvice &&)=delete
void recordUnsuccessfulInlining(const InlineResult &Result)
Call after the decision for a call site was to not inline.
Definition InlineAdvisor.h:100
InlineAdvice(const InlineAdvice &)=delete
virtual void recordInliningWithCalleeDeletedImpl()
Definition InlineAdvisor.h:118
void recordUnattemptedInlining()
Call to indicate inlining was not attempted.
Definition InlineAdvisor.h:106
const DebugLoc & getOriginalCallSiteDebugLoc() const
Definition InlineAdvisor.h:113
virtual void recordInliningImpl()
Definition InlineAdvisor.h:117
const BasicBlock *const Block
Definition InlineAdvisor.h:131
const BasicBlock * getOriginalCallSiteBasicBlock() const
Definition InlineAdvisor.h:114
LLVM_ABI void recordInlining()
Exactly one of the record* APIs must be called.
OptimizationRemarkEmitter & ORE
Definition InlineAdvisor.h:132
virtual void recordUnsuccessfulInliningImpl(const InlineResult &Result)
Definition InlineAdvisor.h:119
virtual ~InlineAdvice()
Definition InlineAdvisor.h:83
InlineAdvisor *const Advisor
Definition InlineAdvisor.h:122
LLVM_ABI InlineAdvice(InlineAdvisor *Advisor, CallBase &CB, OptimizationRemarkEmitter &ORE, bool IsInliningRecommended)
virtual void recordUnattemptedInliningImpl()
Definition InlineAdvisor.h:120
const DebugLoc DLoc
Definition InlineAdvisor.h:130
LLVM_ABI void recordInliningWithCalleeDeleted()
Call after inlining succeeded, and results in the callee being delete-able, meaning,...
bool isInliningRecommended() const
Get the inlining recommendation.
Definition InlineAdvisor.h:112
const bool IsInliningRecommended
Definition InlineAdvisor.h:133
static bool isRequired()
Definition InlineAdvisor.h:353
LLVM_ABI PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM)
InlineAdvisorAnalysisPrinterPass(raw_ostream &OS)
Definition InlineAdvisor.h:346
Result run(Module &M, ModuleAnalysisManager &MAM)
Definition InlineAdvisor.h:333
static LLVM_ABI AnalysisKey Key
Definition InlineAdvisor.h:311
InlineAdvisorAnalysis()=default
Interface for deciding whether to inline a call site or not.
Definition InlineAdvisor.h:165
const std::optional< InlineContext > IC
Definition InlineAdvisor.h:212
FunctionAnalysisManager & FAM
Definition InlineAdvisor.h:211
virtual void print(raw_ostream &OS) const
Support for printer pass.
Definition InlineAdvisor.h:194
MandatoryInliningKind
Definition InlineAdvisor.h:216
@ Always
Definition InlineAdvisor.h:216
@ Never
Definition InlineAdvisor.h:216
@ NotMandatory
Definition InlineAdvisor.h:216
const std::string AnnotatedInlinePassName
Definition InlineAdvisor.h:213
virtual std::unique_ptr< InlineAdvice > getMandatoryAdvice(CallBase &CB, bool Advice)
std::unique_ptr< ImportedFunctionsInliningStatistics > ImportedFunctionsStats
Definition InlineAdvisor.h:214
virtual void onPassEntry(LazyCallGraph::SCC *SCC=nullptr)
This must be called when the Inliner pass is entered, to allow the InlineAdvisor update internal stat...
Definition InlineAdvisor.h:186
const char * getAnnotatedInlinePassName() const
NOTE pass name is annotated only when inline advisor constructor provides InlineContext.
Definition InlineAdvisor.h:199
Module & M
Definition InlineAdvisor.h:210
virtual void onPassExit(LazyCallGraph::SCC *SCC=nullptr)
This must be called when the Inliner pass is exited, as function passes may be run subsequently.
Definition InlineAdvisor.h:191
friend class InlineAdvice
Definition InlineAdvisor.h:225
InlineAdvisor(InlineAdvisor &&)=delete
virtual std::unique_ptr< InlineAdvice > getAdviceImpl(CallBase &CB)=0
std::unique_ptr< InlineAdvice > getAdvice(CallBase &CB, bool MandatoryOnly=false)
Get an InlineAdvice containing a recommendation on whether to inline or not.
Represents the cost of inlining a function.
InlineResult is basically true or false.
An SCC of the call graph.
A lazily constructed view of the call graph of a module.
A Module instance is used to store all the information related to an LLVM module.
Result getResult()
Definition InlineAdvisor.h:301
PluginInlineAdvisorAnalysis(AdvisorFactory Factory)
Definition InlineAdvisor.h:291
InlineAdvisor *(* AdvisorFactory)(Module &M, FunctionAnalysisManager &FAM, InlineParams Params, InlineContext IC)
Definition InlineAdvisor.h:286
Result run(Module &M, ModuleAnalysisManager &MAM)
Definition InlineAdvisor.h:300
static LLVM_ABI AnalysisKey Key
Definition InlineAdvisor.h:284
A set of analyses that are preserved following a run of a transformation pass.
PreservedAnalysisChecker getChecker() const
Build a checker for this PreservedAnalyses and the specified analysis type.
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
An efficient, type-erasing, non-owning reference to a callable.
This class implements an extremely fast bulk output stream that can only output to a stream.
This is an optimization pass for GlobalISel generic memory operations.
InlinePass
Definition InlineAdvisor.h:46
@ CGSCCInliner
Definition InlineAdvisor.h:48
@ AlwaysInliner
Definition InlineAdvisor.h:47
@ SampleProfileInliner
Definition InlineAdvisor.h:54
@ ModuleInliner
Definition InlineAdvisor.h:50
@ MLInliner
Definition InlineAdvisor.h:51
@ EarlyInliner
Definition InlineAdvisor.h:49
@ ReplaySampleProfileInliner
Definition InlineAdvisor.h:53
@ ReplayCGSCCInliner
Definition InlineAdvisor.h:52
LLVM_ABI void emitInlinedInto(OptimizationRemarkEmitter &ORE, DebugLoc DLoc, const BasicBlock *Block, const Function &Callee, const Function &Caller, bool IsMandatory, function_ref< void(OptimizationRemark &)> ExtraContext={}, const char *PassName=nullptr)
Emit ORE message.
LLVM_ABI std::string inlineCostStr(const InlineCost &IC)
Utility for extracting the inline cost message to a string.
InliningAdvisorMode
There are 4 scenarios we can use the InlineAdvisor:
Definition InlineAdvisor.h:43
@ Development
Definition InlineAdvisor.h:43
@ Release
Definition InlineAdvisor.h:43
LLVM_ABI std::optional< InlineCost > shouldInline(CallBase &CB, TargetTransformInfo &CalleeTTI, function_ref< InlineCost(CallBase &CB)> GetInlineCost, OptimizationRemarkEmitter &ORE, bool EnableDeferral=true)
Return the cost only if the inliner should attempt to inline at the given CallSite.
LLVM_ABI std::unique_ptr< InlineAdvisor > getDevelopmentModeAdvisor(Module &M, ModuleAnalysisManager &MAM, std::function< bool(CallBase &)> GetDefaultAdvice)
LLVM_ABI std::unique_ptr< InlineAdvisor > getReleaseModeAdvisor(Module &M, ModuleAnalysisManager &MAM, std::function< bool(CallBase &)> GetDefaultAdvice)
LLVM_ABI void setInlineRemark(CallBase &CB, StringRef Message)
Set the inline-remark attribute.
AnalysisManager< LazyCallGraph::SCC, LazyCallGraph & > CGSCCAnalysisManager
The CGSCC analysis manager.
LLVM_ABI std::string AnnotateInlinePassName(InlineContext IC)
ThinOrFullLTOPhase
This enumerates the LLVM full LTO or ThinLTO optimization phases.
LLVM_ABI void emitInlinedIntoBasedOnCost(OptimizationRemarkEmitter &ORE, DebugLoc DLoc, const BasicBlock *Block, const Function &Callee, const Function &Caller, const InlineCost &IC, bool ForProfileContext=false, const char *PassName=nullptr)
Emit ORE message based in cost (default heuristic).
LLVM_ABI void addLocationToRemarks(OptimizationRemark &Remark, DebugLoc DLoc)
Add location info to ORE message.
AnalysisManager< Function > FunctionAnalysisManager
Convenience typedef for the Function analysis manager.
@ Default
The result values are uniform if and only if all operands are uniform.
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
A CRTP mix-in that provides informational APIs needed for analysis passes.
A special type used by analysis passes to provide an address that identifies that particular analysis...
Support structure for SCC passes to communicate updates the call graph back to the CGSCC pass manager...
Definition InlineAdvisor.h:313
LLVM_ABI bool tryCreate(InlineParams Params, InliningAdvisorMode Mode, const ReplayInlinerSettings &ReplaySettings, InlineContext IC)
InlineAdvisor * getAdvisor() const
Definition InlineAdvisor.h:325
Result(Module &M, ModuleAnalysisManager &MAM)
Definition InlineAdvisor.h:314
bool invalidate(Module &, const PreservedAnalyses &PA, ModuleAnalysisManager::Invalidator &)
Definition InlineAdvisor.h:315
Provides context on when an inline advisor is constructed in the pipeline (e.g., link phase,...
Definition InlineAdvisor.h:59
InlinePass Pass
Definition InlineAdvisor.h:62
ThinOrFullLTOPhase LTOPhase
Definition InlineAdvisor.h:60
Thresholds to tune inline cost analysis.
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition InlineAdvisor.h:296
AdvisorFactory Factory
Definition InlineAdvisor.h:297