Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Analysis/InlineOrder.cpp
Show All 27 Lines | static cl::opt<InlinePriorityMode> UseInlinePriority( | ||||
"inline-priority-mode", cl::init(InlinePriorityMode::Size), cl::Hidden, | "inline-priority-mode", cl::init(InlinePriorityMode::Size), cl::Hidden, | ||||
cl::desc("Choose the priority mode to use in module inline"), | cl::desc("Choose the priority mode to use in module inline"), | ||||
cl::values(clEnumValN(InlinePriorityMode::Size, "size", | cl::values(clEnumValN(InlinePriorityMode::Size, "size", | ||||
"Use callee size priority."), | "Use callee size priority."), | ||||
clEnumValN(InlinePriorityMode::Cost, "cost", | clEnumValN(InlinePriorityMode::Cost, "cost", | ||||
"Use inline cost priority."), | "Use inline cost priority."), | ||||
clEnumValN(InlinePriorityMode::CostBenefit, "cost-benefit", | clEnumValN(InlinePriorityMode::CostBenefit, "cost-benefit", | ||||
"Use cost-benefit ratio."), | "Use cost-benefit ratio."), | ||||
clEnumValN(InlinePriorityMode::ML, "ml", | clEnumValN(InlinePriorityMode::ML, "ml", "Use ML."))); | ||||
"Use ML."))); | |||||
static cl::opt<int> ModuleInlinerTopPriorityThreshold( | static cl::opt<int> ModuleInlinerTopPriorityThreshold( | ||||
"moudle-inliner-top-priority-threshold", cl::Hidden, cl::init(0), | "moudle-inliner-top-priority-threshold", cl::Hidden, cl::init(0), | ||||
cl::desc("The cost threshold for call sites that get inlined without the " | cl::desc("The cost threshold for call sites that get inlined without the " | ||||
"cost-benefit analysis")); | "cost-benefit analysis")); | ||||
namespace { | namespace { | ||||
▲ Show 20 Lines • Show All 230 Lines • ▼ Show 20 Lines | private: | ||||
DenseMap<CallBase *, int> InlineHistoryMap; | DenseMap<CallBase *, int> InlineHistoryMap; | ||||
DenseMap<const CallBase *, PriorityT> Priorities; | DenseMap<const CallBase *, PriorityT> Priorities; | ||||
FunctionAnalysisManager &FAM; | FunctionAnalysisManager &FAM; | ||||
const InlineParams &Params; | const InlineParams &Params; | ||||
}; | }; | ||||
} // namespace | } // namespace | ||||
AnalysisKey llvm::PluginInlineOrderAnalysis::Key; | |||||
bool llvm::PluginInlineOrderAnalysis::HasBeenRegistered; | |||||
std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>> | std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>> | ||||
llvm::getInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params) { | llvm::getInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params, | ||||
ModuleAnalysisManager &MAM, Module &M) { | |||||
if (llvm::PluginInlineOrderAnalysis::HasBeenRegistered) { | |||||
LLVM_DEBUG(dbgs() << " Current used priority: plugin ---- \n"); | |||||
return MAM.getResult<PluginInlineOrderAnalysis>(M).Factory(FAM, Params, MAM, | |||||
M); | |||||
} | |||||
switch (UseInlinePriority) { | switch (UseInlinePriority) { | ||||
case InlinePriorityMode::Size: | case InlinePriorityMode::Size: | ||||
LLVM_DEBUG(dbgs() << " Current used priority: Size priority ---- \n"); | LLVM_DEBUG(dbgs() << " Current used priority: Size priority ---- \n"); | ||||
return std::make_unique<PriorityInlineOrder<SizePriority>>(FAM, Params); | return std::make_unique<PriorityInlineOrder<SizePriority>>(FAM, Params); | ||||
case InlinePriorityMode::Cost: | case InlinePriorityMode::Cost: | ||||
LLVM_DEBUG(dbgs() << " Current used priority: Cost priority ---- \n"); | LLVM_DEBUG(dbgs() << " Current used priority: Cost priority ---- \n"); | ||||
return std::make_unique<PriorityInlineOrder<CostPriority>>(FAM, Params); | return std::make_unique<PriorityInlineOrder<CostPriority>>(FAM, Params); | ||||
case InlinePriorityMode::CostBenefit: | case InlinePriorityMode::CostBenefit: | ||||
LLVM_DEBUG( | LLVM_DEBUG( | ||||
dbgs() << " Current used priority: cost-benefit priority ---- \n"); | dbgs() << " Current used priority: cost-benefit priority ---- \n"); | ||||
return std::make_unique<PriorityInlineOrder<CostBenefitPriority>>(FAM, Params); | return std::make_unique<PriorityInlineOrder<CostBenefitPriority>>(FAM, | ||||
Params); | |||||
case InlinePriorityMode::ML: | case InlinePriorityMode::ML: | ||||
LLVM_DEBUG( | LLVM_DEBUG(dbgs() << " Current used priority: ML priority ---- \n"); | ||||
dbgs() << " Current used priority: ML priority ---- \n"); | |||||
return std::make_unique<PriorityInlineOrder<MLPriority>>(FAM, Params); | return std::make_unique<PriorityInlineOrder<MLPriority>>(FAM, Params); | ||||
} | } | ||||
return nullptr; | return nullptr; | ||||
} | } |