Thanks to visit codestin.com
Credit goes to llvm.org

LLVM 22.0.0git
PartialInlining.cpp File Reference
#include "llvm/Transforms/IPO/PartialInlining.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/BlockFrequencyInfo.h"
#include "llvm/Analysis/BranchProbabilityInfo.h"
#include "llvm/Analysis/InlineCost.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/ProfileSummaryInfo.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/ProfDataUtils.h"
#include "llvm/IR/User.h"
#include "llvm/Support/BlockFrequency.h"
#include "llvm/Support/BranchProbability.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Transforms/IPO.h"
#include "llvm/Transforms/Utils/Cloning.h"
#include "llvm/Transforms/Utils/CodeExtractor.h"
#include "llvm/Transforms/Utils/ValueMapper.h"
#include <algorithm>
#include <cassert>
#include <cstdint>
#include <memory>
#include <tuple>
#include <vector>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "partial-inlining"

Functions

 STATISTIC (NumPartialInlined, "Number of callsites functions partially inlined into.")
 STATISTIC (NumColdOutlinePartialInlined, "Number of times functions with " "cold outlined regions were partially " "inlined into its caller(s).")
 STATISTIC (NumColdRegionsFound, "Number of cold single entry/exit regions found.")
 STATISTIC (NumColdRegionsOutlined, "Number of cold single entry/exit regions outlined.")
static bool hasProfileData (const Function &F, const FunctionOutliningInfo &OI)

Variables

static cl::opt< boolDisablePartialInlining ("disable-partial-inlining", cl::init(false), cl::Hidden, cl::desc("Disable partial inlining"))
static cl::opt< boolDisableMultiRegionPartialInline ("disable-mr-partial-inlining", cl::init(false), cl::Hidden, cl::desc("Disable multi-region partial inlining"))
static cl::opt< boolForceLiveExit ("pi-force-live-exit-outline", cl::init(false), cl::Hidden, cl::desc("Force outline regions with live exits"))
static cl::opt< boolMarkOutlinedColdCC ("pi-mark-coldcc", cl::init(false), cl::Hidden, cl::desc("Mark outline function calls with ColdCC"))
static cl::opt< boolSkipCostAnalysis ("skip-partial-inlining-cost-analysis", cl::ReallyHidden, cl::desc("Skip Cost Analysis"))
static cl::opt< float > MinRegionSizeRatio ("min-region-size-ratio", cl::init(0.1), cl::Hidden, cl::desc("Minimum ratio comparing relative sizes of each " "outline candidate and original function"))
static cl::opt< unsignedMinBlockCounterExecution ("min-block-execution", cl::init(100), cl::Hidden, cl::desc("Minimum block executions to consider " "its BranchProbabilityInfo valid"))
static cl::opt< float > ColdBranchRatio ("cold-branch-ratio", cl::init(0.1), cl::Hidden, cl::desc("Minimum BranchProbability to consider a region cold."))
static cl::opt< unsignedMaxNumInlineBlocks ("max-num-inline-blocks", cl::init(5), cl::Hidden, cl::desc("Max number of blocks to be partially inlined"))
static cl::opt< int > MaxNumPartialInlining ("max-partial-inlining", cl::init(-1), cl::Hidden, cl::desc("Max number of partial inlining. The default is unlimited"))
static cl::opt< int > OutlineRegionFreqPercent ("outline-region-freq-percent", cl::init(75), cl::Hidden, cl::desc("Relative frequency of outline region to " "the entry block"))
static cl::opt< unsignedExtraOutliningPenalty ("partial-inlining-extra-penalty", cl::init(0), cl::Hidden, cl::desc("A debug option to add additional penalty to the computed one."))

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "partial-inlining"

Definition at line 63 of file PartialInlining.cpp.

Function Documentation

◆ hasProfileData()

bool hasProfileData ( const Function & F,
const FunctionOutliningInfo & OI )
static

◆ STATISTIC() [1/4]

STATISTIC ( NumColdOutlinePartialInlined ,
"Number of times functions with " "cold outlined regions were partially " "inlined into its caller(s)."  )

◆ STATISTIC() [2/4]

STATISTIC ( NumColdRegionsFound ,
"Number of cold single entry/exit regions found."  )

◆ STATISTIC() [3/4]

STATISTIC ( NumColdRegionsOutlined ,
"Number of cold single entry/exit regions outlined."  )

◆ STATISTIC() [4/4]

STATISTIC ( NumPartialInlined ,
"Number of callsites functions partially inlined into."  )

Variable Documentation

◆ ColdBranchRatio

cl::opt< float > ColdBranchRatio("cold-branch-ratio", cl::init(0.1), cl::Hidden, cl::desc("Minimum BranchProbability to consider a region cold.")) ( "cold-branch-ratio" ,
cl::init(0.1) ,
cl::Hidden ,
cl::desc("Minimum BranchProbability to consider a region cold.")  )
static

◆ DisableMultiRegionPartialInline

cl::opt< bool > DisableMultiRegionPartialInline("disable-mr-partial-inlining", cl::init(false), cl::Hidden, cl::desc("Disable multi-region partial inlining")) ( "disable-mr-partial-inlining" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Disable multi-region partial inlining")  )
static

◆ DisablePartialInlining

cl::opt< bool > DisablePartialInlining("disable-partial-inlining", cl::init(false), cl::Hidden, cl::desc("Disable partial inlining")) ( "disable-partial-inlining" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Disable partial inlining")  )
static

◆ ExtraOutliningPenalty

cl::opt< unsigned > ExtraOutliningPenalty("partial-inlining-extra-penalty", cl::init(0), cl::Hidden, cl::desc("A debug option to add additional penalty to the computed one.")) ( "partial-inlining-extra-penalty" ,
cl::init(0) ,
cl::Hidden ,
cl::desc("A debug option to add additional penalty to the computed one.")  )
static

◆ ForceLiveExit

cl::opt< bool > ForceLiveExit("pi-force-live-exit-outline", cl::init(false), cl::Hidden, cl::desc("Force outline regions with live exits")) ( "pi-force-live-exit-outline" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Force outline regions with live exits")  )
static

◆ MarkOutlinedColdCC

cl::opt< bool > MarkOutlinedColdCC("pi-mark-coldcc", cl::init(false), cl::Hidden, cl::desc("Mark outline function calls with ColdCC")) ( "pi-mark-coldcc" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Mark outline function calls with ColdCC")  )
static

◆ MaxNumInlineBlocks

cl::opt< unsigned > MaxNumInlineBlocks("max-num-inline-blocks", cl::init(5), cl::Hidden, cl::desc("Max number of blocks to be partially inlined")) ( "max-num-inline-blocks" ,
cl::init(5) ,
cl::Hidden ,
cl::desc("Max number of blocks to be partially inlined")  )
static

◆ MaxNumPartialInlining

cl::opt< int > MaxNumPartialInlining("max-partial-inlining", cl::init(-1), cl::Hidden, cl::desc("Max number of partial inlining. The default is unlimited")) ( "max-partial-inlining" ,
cl::init(-1) ,
cl::Hidden ,
cl::desc("Max number of partial inlining. The default is unlimited")  )
static

◆ MinBlockCounterExecution

cl::opt< unsigned > MinBlockCounterExecution("min-block-execution", cl::init(100), cl::Hidden, cl::desc("Minimum block executions to consider " "its BranchProbabilityInfo valid")) ( "min-block-execution" ,
cl::init(100) ,
cl::Hidden ,
cl::desc("Minimum block executions to consider " "its BranchProbabilityInfo valid")  )
static

◆ MinRegionSizeRatio

cl::opt< float > MinRegionSizeRatio("min-region-size-ratio", cl::init(0.1), cl::Hidden, cl::desc("Minimum ratio comparing relative sizes of each " "outline candidate and original function")) ( "min-region-size-ratio" ,
cl::init(0.1) ,
cl::Hidden ,
cl::desc("Minimum ratio comparing relative sizes of each " "outline candidate and original function")  )
static

◆ OutlineRegionFreqPercent

cl::opt< int > OutlineRegionFreqPercent("outline-region-freq-percent", cl::init(75), cl::Hidden, cl::desc("Relative frequency of outline region to " "the entry block")) ( "outline-region-freq-percent" ,
cl::init(75) ,
cl::Hidden ,
cl::desc("Relative frequency of outline region to " "the entry block")  )
static

◆ SkipCostAnalysis

cl::opt< bool > SkipCostAnalysis("skip-partial-inlining-cost-analysis", cl::ReallyHidden, cl::desc("Skip Cost Analysis")) ( "skip-partial-inlining-cost-analysis" ,
cl::ReallyHidden ,
cl::desc("Skip Cost Analysis")  )
static