LLVM 20.0.0git
|
#include "llvm/Transforms/IPO/Inliner.h"
#include "llvm/ADT/PriorityWorklist.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/BasicAliasAnalysis.h"
#include "llvm/Analysis/BlockFrequencyInfo.h"
#include "llvm/Analysis/CGSCCPassManager.h"
#include "llvm/Analysis/InlineAdvisor.h"
#include "llvm/Analysis/InlineCost.h"
#include "llvm/Analysis/LazyCallGraph.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/ReplayInlineAdvisor.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/Utils/ImportedFunctionsInliningStatistics.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/CallPromotionUtils.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"
#include <algorithm>
#include <cassert>
#include <functional>
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "inline" |
Functions | |
STATISTIC (NumInlined, "Number of functions inlined") | |
STATISTIC (NumDeleted, "Number of functions deleted because all callers found") | |
static bool | inlineHistoryIncludes (Function *F, int InlineHistoryID, const SmallVectorImpl< std::pair< Function *, int > > &InlineHistory) |
Return true if the specified inline history ID indicates an inline history that includes the specified function. | |
void | makeFunctionBodyUnreachable (Function &F) |
Variables | |
static cl::opt< int > | IntraSCCCostMultiplier ("intra-scc-cost-multiplier", cl::init(2), cl::Hidden, cl::desc("Cost multiplier to multiply onto inlined call sites where the " "new call was previously an intra-SCC call (not relevant when the " "original call was already intra-SCC). This can accumulate over " "multiple inlinings (e.g. if a call site already had a cost " "multiplier and one of its inlined calls was also subject to " "this, the inlined call would have the original multiplier " "multiplied by intra-scc-cost-multiplier). This is to prevent tons of " "inlining through a child SCC which can cause terrible compile times")) |
static cl::opt< bool > | KeepAdvisorForPrinting ("keep-inline-advisor-for-printing", cl::init(false), cl::Hidden) |
A flag for test, so we can print the content of the advisor when running it as part of the default (e.g. | |
static cl::opt< bool > | EnablePostSCCAdvisorPrinting ("enable-scc-inline-advisor-printing", cl::init(false), cl::Hidden) |
Allows printing the contents of the advisor after each SCC inliner pass. | |
static cl::opt< std::string > | CGSCCInlineReplayFile ("cgscc-inline-replay", cl::init(""), cl::value_desc("filename"), cl::desc("Optimization remarks file containing inline remarks to be replayed " "by cgscc inlining."), cl::Hidden) |
static cl::opt< ReplayInlinerSettings::Scope > | CGSCCInlineReplayScope ("cgscc-inline-replay-scope", cl::init(ReplayInlinerSettings::Scope::Function), cl::values(clEnumValN(ReplayInlinerSettings::Scope::Function, "Function", "Replay on functions that have remarks associated " "with them (default)"), clEnumValN(ReplayInlinerSettings::Scope::Module, "Module", "Replay on the entire module")), cl::desc("Whether inline replay should be applied to the entire " "Module or just the Functions (default) that are present as " "callers in remarks during cgscc inlining."), cl::Hidden) |
static cl::opt< ReplayInlinerSettings::Fallback > | CGSCCInlineReplayFallback ("cgscc-inline-replay-fallback", cl::init(ReplayInlinerSettings::Fallback::Original), cl::values(clEnumValN(ReplayInlinerSettings::Fallback::Original, "Original", "All decisions not in replay send to original advisor (default)"), clEnumValN(ReplayInlinerSettings::Fallback::AlwaysInline, "AlwaysInline", "All decisions not in replay are inlined"), clEnumValN(ReplayInlinerSettings::Fallback::NeverInline, "NeverInline", "All decisions not in replay are not inlined")), cl::desc("How cgscc inline replay treats sites that don't come from the replay. " "Original: defers to original advisor, AlwaysInline: inline all sites " "not in replay, NeverInline: inline no sites not in replay"), cl::Hidden) |
static cl::opt< CallSiteFormat::Format > | CGSCCInlineReplayFormat ("cgscc-inline-replay-format", cl::init(CallSiteFormat::Format::LineColumnDiscriminator), cl::values(clEnumValN(CallSiteFormat::Format::Line, "Line", "<Line Number>"), clEnumValN(CallSiteFormat::Format::LineColumn, "LineColumn", "<Line Number>:<Column Number>"), clEnumValN(CallSiteFormat::Format::LineDiscriminator, "LineDiscriminator", "<Line Number>.<Discriminator>"), clEnumValN(CallSiteFormat::Format::LineColumnDiscriminator, "LineColumnDiscriminator", "<Line Number>:<Column Number>.<Discriminator> (default)")), cl::desc("How cgscc inline replay file is formatted"), cl::Hidden) |
#define DEBUG_TYPE "inline" |
Definition at line 68 of file Inliner.cpp.
|
static |
Return true if the specified inline history ID indicates an inline history that includes the specified function.
Definition at line 149 of file Inliner.cpp.
void makeFunctionBodyUnreachable | ( | Function & | F | ) |
Definition at line 200 of file Inliner.cpp.
References llvm::BasicBlock::Create(), F, and llvm::make_early_inc_range().
STATISTIC | ( | NumDeleted | , |
"Number of functions deleted because all callers found" | |||
) |
STATISTIC | ( | NumInlined | , |
"Number of functions inlined" | |||
) |
|
static |
|
static |
|
static |
|
static |
|
static |
Allows printing the contents of the advisor after each SCC inliner pass.
Referenced by llvm::ModuleInlinerWrapperPass::ModuleInlinerWrapperPass().
|
static |
|
static |
A flag for test, so we can print the content of the advisor when running it as part of the default (e.g.
-O3) pipeline.