LLVM 18.0.0git
|
#include "llvm/Analysis/InlineCost.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/BlockFrequencyInfo.h"
#include "llvm/Analysis/CodeMetrics.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/IR/AssemblyAnnotationWriter.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/GetElementPtrTypeIterator.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/FormattedStream.h"
#include "llvm/Support/raw_ostream.h"
#include <climits>
#include <limits>
#include <optional>
Go to the source code of this file.
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. | |
namespace | llvm::InlineConstants |
Macros | |
#define | DEBUG_TYPE "inline-cost" |
#define | DEBUG_PRINT_STAT(x) OS << " " #x ": " << x << "\n" |
Functions | |
STATISTIC (NumCallsAnalyzed, "Number of call sites analyzed") | |
std::optional< int > | llvm::getStringFnAttrAsInt (const Attribute &Attr) |
std::optional< int > | llvm::getStringFnAttrAsInt (CallBase &CB, StringRef AttrKind) |
std::optional< int > | llvm::getStringFnAttrAsInt (Function *F, StringRef AttrKind) |
int | llvm::InlineConstants::getInstrCost () |
static bool | functionsHaveCompatibleAttributes (Function *Caller, Function *Callee, TargetTransformInfo &TTI, function_ref< const TargetLibraryInfo &(Function &)> &GetTLI) |
Test that there are no attribute conflicts between Caller and Callee that prevent inlining. | |
static int | computeThresholdFromOptLevels (unsigned OptLevel, unsigned SizeOptLevel) |
Variables | |
static cl::opt< int > | DefaultThreshold ("inlinedefault-threshold", cl::Hidden, cl::init(225), cl::desc("Default amount of inlining to perform")) |
static cl::opt< bool > | IgnoreTTIInlineCompatible ("ignore-tti-inline-compatible", cl::Hidden, cl::init(false), cl::desc("Ignore TTI attributes compatibility check between callee/caller " "during inline cost calculation")) |
static cl::opt< bool > | PrintInstructionComments ("print-instruction-comments", cl::Hidden, cl::init(false), cl::desc("Prints comments for instruction based on inline cost analysis")) |
static cl::opt< int > | InlineThreshold ("inline-threshold", cl::Hidden, cl::init(225), cl::desc("Control the amount of inlining to perform (default = 225)")) |
static cl::opt< int > | HintThreshold ("inlinehint-threshold", cl::Hidden, cl::init(325), cl::desc("Threshold for inlining functions with inline hint")) |
static cl::opt< int > | ColdCallSiteThreshold ("inline-cold-callsite-threshold", cl::Hidden, cl::init(45), cl::desc("Threshold for inlining cold callsites")) |
static cl::opt< bool > | InlineEnableCostBenefitAnalysis ("inline-enable-cost-benefit-analysis", cl::Hidden, cl::init(false), cl::desc("Enable the cost-benefit analysis for the inliner")) |
static cl::opt< int > | InlineSavingsMultiplier ("inline-savings-multiplier", cl::Hidden, cl::init(8), cl::desc("Multiplier to multiply cycle savings by during inlining")) |
static cl::opt< int > | InlineSavingsProfitableMultiplier ("inline-savings-profitable-multiplier", cl::Hidden, cl::init(4), cl::desc("A multiplier on top of cycle savings to decide whether the " "savings won't justify the cost")) |
static cl::opt< int > | InlineSizeAllowance ("inline-size-allowance", cl::Hidden, cl::init(100), cl::desc("The maximum size of a callee that get's " "inlined without sufficient cycle savings")) |
static cl::opt< int > | ColdThreshold ("inlinecold-threshold", cl::Hidden, cl::init(45), cl::desc("Threshold for inlining functions with cold attribute")) |
static cl::opt< int > | HotCallSiteThreshold ("hot-callsite-threshold", cl::Hidden, cl::init(3000), cl::desc("Threshold for hot callsites ")) |
static cl::opt< int > | LocallyHotCallSiteThreshold ("locally-hot-callsite-threshold", cl::Hidden, cl::init(525), cl::desc("Threshold for locally hot callsites ")) |
static cl::opt< int > | ColdCallSiteRelFreq ("cold-callsite-rel-freq", cl::Hidden, cl::init(2), cl::desc("Maximum block frequency, expressed as a percentage of caller's " "entry frequency, for a callsite to be cold in the absence of " "profile information.")) |
static cl::opt< uint64_t > | HotCallSiteRelFreq ("hot-callsite-rel-freq", cl::Hidden, cl::init(60), cl::desc("Minimum block frequency, expressed as a multiple of caller's " "entry frequency, for a callsite to be hot in the absence of " "profile information.")) |
static cl::opt< int > | InstrCost ("inline-instr-cost", cl::Hidden, cl::init(5), cl::desc("Cost of a single instruction when inlining")) |
static cl::opt< int > | MemAccessCost ("inline-memaccess-cost", cl::Hidden, cl::init(0), cl::desc("Cost of load/store instruction when inlining")) |
static cl::opt< int > | CallPenalty ("inline-call-penalty", cl::Hidden, cl::init(25), cl::desc("Call penalty that is applied per callsite when inlining")) |
static cl::opt< size_t > | StackSizeThreshold ("inline-max-stacksize", cl::Hidden, cl::init(std::numeric_limits< size_t >::max()), cl::desc("Do not inline functions with a stack size " "that exceeds the specified limit")) |
static cl::opt< size_t > | RecurStackSizeThreshold ("recursive-inline-max-stacksize", cl::Hidden, cl::init(InlineConstants::TotalAllocaSizeRecursiveCaller), cl::desc("Do not inline recursive functions with a stack " "size that exceeds the specified limit")) |
static cl::opt< bool > | OptComputeFullInlineCost ("inline-cost-full", cl::Hidden, cl::desc("Compute the full inline cost of a call site even when the cost " "exceeds the threshold.")) |
static cl::opt< bool > | InlineCallerSupersetNoBuiltin ("inline-caller-superset-nobuiltin", cl::Hidden, cl::init(true), cl::desc("Allow inlining when caller has a superset of callee's nobuiltin " "attributes.")) |
static cl::opt< bool > | DisableGEPConstOperand ("disable-gep-const-evaluation", cl::Hidden, cl::init(false), cl::desc("Disables evaluation of GetElementPtr with constant operands")) |
#define DEBUG_PRINT_STAT | ( | x | ) | OS << " " #x ": " << x << "\n" |
#define DEBUG_TYPE "inline-cost" |
Definition at line 52 of file InlineCost.cpp.
Definition at line 3212 of file InlineCost.cpp.
References DefaultThreshold, llvm::InlineConstants::OptAggressiveThreshold, llvm::InlineConstants::OptMinSizeThreshold, and llvm::InlineConstants::OptSizeThreshold.
Referenced by llvm::getInlineParams().
|
static |
Test that there are no attribute conflicts between Caller and Callee that prevent inlining.
Definition at line 2876 of file InlineCost.cpp.
References llvm::AttributeFuncs::areInlineCompatible(), llvm::TargetTransformInfo::areInlineCompatible(), IgnoreTTIInlineCompatible, and InlineCallerSupersetNoBuiltin.
Referenced by llvm::getAttributeBasedInliningDecision().
STATISTIC | ( | NumCallsAnalyzed | , |
"Number of call sites analyzed" | |||
) |
|
static |
Referenced by llvm::getCallsiteCost().
|
static |
|
static |
Referenced by llvm::getInlineParams().
|
static |
Referenced by llvm::getInlineParams().
|
static |
Referenced by computeThresholdFromOptLevels(), and llvm::getInlineParams().
|
static |
|
static |
Referenced by llvm::getInlineParams().
|
static |
|
static |
Referenced by llvm::getInlineParams().
|
static |
Referenced by functionsHaveCompatibleAttributes().
|
static |
Referenced by functionsHaveCompatibleAttributes().
|
static |
|
static |
|
static |
|
static |
|
static |
Referenced by llvm::getInlineParams().
|
static |
Referenced by llvm::getCallsiteCost(), and llvm::InlineConstants::getInstrCost().
|
static |
Referenced by llvm::getInlineParams().
|
static |
|
static |
|
static |
Referenced by llvm::InlineCostAnnotationPrinterPass::run().
|
static |
|
static |