|
LLVM 22.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/EphemeralValuesCache.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/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/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 <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 66 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 147 of file Inliner.cpp.
Referenced by llvm::InlinerPass::run(), and llvm::ModuleInlinerPass::run().
| void makeFunctionBodyUnreachable | ( | Function & | F | ) |
Definition at line 198 of file Inliner.cpp.
References llvm::BasicBlock::Create(), F, and llvm::make_early_inc_range().
Referenced by llvm::InlinerPass::run().
| 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 |
Referenced by llvm::InlinerPass::run().
|
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.