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

LLVM 22.0.0git
ControlHeightReduction.cpp File Reference

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.

Macros

#define DEBUG_TYPE   "chr"
#define CHR_DEBUG(X)

Functions

static void parseCHRFilterFiles ()
static raw_ostream LLVM_ATTRIBUTE_UNUSEDoperator<< (raw_ostream &OS, const CHRStats &Stats)
static raw_ostreamoperator<< (raw_ostream &OS, const CHRScope &Scope)
static bool shouldApply (Function &F, ProfileSummaryInfo &PSI)
static void LLVM_ATTRIBUTE_UNUSED dumpIR (Function &F, const char *Label, CHRStats *Stats)
static bool isHoistableInstructionType (Instruction *I)
static bool isHoistable (Instruction *I, DominatorTree &DT)
static const std::set< Value * > & getBaseValues (Value *V, DominatorTree &DT, DenseMap< Value *, std::set< Value * > > &Visited)
static bool checkHoistValue (Value *V, Instruction *InsertPoint, DominatorTree &DT, DenseSet< Instruction * > &Unhoistables, DenseSet< Instruction * > *HoistStops, DenseMap< Instruction *, bool > &Visited)
static bool extractBranchProbabilities (Instruction *I, BranchProbability &TrueProb, BranchProbability &FalseProb)
static BranchProbability getCHRBiasThreshold ()
template<typename K, typename S, typename M>
static bool checkBias (K *Key, BranchProbability TrueProb, BranchProbability FalseProb, S &TrueSet, S &FalseSet, M &BiasMap)
static bool checkBiasedBranch (BranchInst *BI, Region *R, DenseSet< Region * > &TrueBiasedRegionsGlobal, DenseSet< Region * > &FalseBiasedRegionsGlobal, DenseMap< Region *, BranchProbability > &BranchBiasMap)
static bool checkBiasedSelect (SelectInst *SI, Region *R, DenseSet< SelectInst * > &TrueBiasedSelectsGlobal, DenseSet< SelectInst * > &FalseBiasedSelectsGlobal, DenseMap< SelectInst *, BranchProbability > &SelectBiasMap)
static InstructiongetBranchInsertPoint (RegInfo &RI)
static DenseSet< Value * > getCHRConditionValuesForRegion (RegInfo &RI)
static bool shouldSplit (Instruction *InsertPoint, DenseSet< Value * > &PrevConditionValues, DenseSet< Value * > &ConditionValues, DominatorTree &DT, DenseSet< Instruction * > &Unhoistables)
static void getSelectsInScope (CHRScope *Scope, DenseSet< Instruction * > &Output)
static bool hasAtLeastTwoBiasedBranches (CHRScope *Scope)
static bool CHRScopeSorter (CHRScope *Scope1, CHRScope *Scope2)
static void hoistValue (Value *V, Instruction *HoistPoint, Region *R, HoistStopMapTy &HoistStopMap, DenseSet< Instruction * > &HoistedSet, DenseSet< PHINode * > &TrivialPHIs, DominatorTree &DT)
static void hoistScopeConditions (CHRScope *Scope, Instruction *HoistPoint, DenseSet< PHINode * > &TrivialPHIs, DominatorTree &DT)
static bool negateICmpIfUsedByBranchOrSelectOnly (ICmpInst *ICmp, Instruction *ExcludedUser, CHRScope *Scope)
static void insertTrivialPHIs (CHRScope *Scope, BasicBlock *EntryBlock, BasicBlock *ExitBlock, DenseSet< PHINode * > &TrivialPHIs)
static void LLVM_ATTRIBUTE_UNUSED assertCHRRegionsHaveBiasedBranchOrSelect (CHRScope *Scope)
static void LLVM_ATTRIBUTE_UNUSED assertBranchOrSelectConditionHoisted (CHRScope *Scope, BasicBlock *PreEntryBlock)
static void LLVM_ATTRIBUTE_UNUSED dumpScopes (SmallVectorImpl< CHRScope * > &Scopes, const char *Label)

Variables

static cl::opt< boolDisableCHR ("disable-chr", cl::init(false), cl::Hidden, cl::desc("Disable CHR for all functions"))
static cl::opt< boolForceCHR ("force-chr", cl::init(false), cl::Hidden, cl::desc("Apply CHR for all functions"))
static cl::opt< double > CHRBiasThreshold ("chr-bias-threshold", cl::init(0.99), cl::Hidden, cl::desc("CHR considers a branch bias greater than this ratio as biased"))
static cl::opt< unsignedCHRMergeThreshold ("chr-merge-threshold", cl::init(2), cl::Hidden, cl::desc("CHR merges a group of N branches/selects where N >= this value"))
static cl::opt< std::stringCHRModuleList ("chr-module-list", cl::init(""), cl::Hidden, cl::desc("Specify file to retrieve the list of modules to apply CHR to"))
static cl::opt< std::stringCHRFunctionList ("chr-function-list", cl::init(""), cl::Hidden, cl::desc("Specify file to retrieve the list of functions to apply CHR to"))
static cl::opt< unsignedCHRDupThreshsold ("chr-dup-threshold", cl::init(3), cl::Hidden, cl::desc("Max number of duplications by CHR for a region"))
static StringSet CHRModules
static StringSet CHRFunctions

Macro Definition Documentation

◆ CHR_DEBUG

#define CHR_DEBUG ( X)
Value:
#define LLVM_DEBUG(...)
Definition Debug.h:114
static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")

Definition at line 49 of file ControlHeightReduction.cpp.

Referenced by assertBranchOrSelectConditionHoisted(), checkBiasedBranch(), checkBiasedSelect(), checkHoistValue(), dumpIR(), hoistValue(), insertTrivialPHIs(), and shouldSplit().

◆ DEBUG_TYPE

#define DEBUG_TYPE   "chr"

Definition at line 47 of file ControlHeightReduction.cpp.

Function Documentation

◆ assertBranchOrSelectConditionHoisted()

void LLVM_ATTRIBUTE_UNUSED assertBranchOrSelectConditionHoisted ( CHRScope * Scope,
BasicBlock * PreEntryBlock )
static

◆ assertCHRRegionsHaveBiasedBranchOrSelect()

void LLVM_ATTRIBUTE_UNUSED assertCHRRegionsHaveBiasedBranchOrSelect ( CHRScope * Scope)
static

Definition at line 1609 of file ControlHeightReduction.cpp.

References assert().

◆ checkBias()

template<typename K, typename S, typename M>
bool checkBias ( K * Key,
BranchProbability TrueProb,
BranchProbability FalseProb,
S & TrueSet,
S & FalseSet,
M & BiasMap )
static

◆ checkBiasedBranch()

bool checkBiasedBranch ( BranchInst * BI,
Region * R,
DenseSet< Region * > & TrueBiasedRegionsGlobal,
DenseSet< Region * > & FalseBiasedRegionsGlobal,
DenseMap< Region *, BranchProbability > & BranchBiasMap )
static

◆ checkBiasedSelect()

bool checkBiasedSelect ( SelectInst * SI,
Region * R,
DenseSet< SelectInst * > & TrueBiasedSelectsGlobal,
DenseSet< SelectInst * > & FalseBiasedSelectsGlobal,
DenseMap< SelectInst *, BranchProbability > & SelectBiasMap )
static

◆ checkHoistValue()

◆ CHRScopeSorter()

bool CHRScopeSorter ( CHRScope * Scope1,
CHRScope * Scope2 )
static

Definition at line 1410 of file ControlHeightReduction.cpp.

◆ dumpIR()

void LLVM_ATTRIBUTE_UNUSED dumpIR ( Function & F,
const char * Label,
CHRStats * Stats )
static

Definition at line 428 of file ControlHeightReduction.cpp.

References CHR_DEBUG, llvm::dbgs(), F, LLVM_ATTRIBUTE_UNUSED, and Stats.

◆ dumpScopes()

void LLVM_ATTRIBUTE_UNUSED dumpScopes ( SmallVectorImpl< CHRScope * > & Scopes,
const char * Label )
static

Definition at line 1982 of file ControlHeightReduction.cpp.

References llvm::dbgs().

◆ extractBranchProbabilities()

bool extractBranchProbabilities ( Instruction * I,
BranchProbability & TrueProb,
BranchProbability & FalseProb )
static

◆ getBaseValues()

const std::set< Value * > & getBaseValues ( Value * V,
DominatorTree & DT,
DenseMap< Value *, std::set< Value * > > & Visited )
static

Definition at line 489 of file ControlHeightReduction.cpp.

References llvm::dyn_cast(), getBaseValues(), I, llvm::isa(), and isHoistable().

Referenced by getBaseValues(), and shouldSplit().

◆ getBranchInsertPoint()

◆ getCHRBiasThreshold()

BranchProbability getCHRBiasThreshold ( )
static

◆ getCHRConditionValuesForRegion()

DenseSet< Value * > getCHRConditionValuesForRegion ( RegInfo & RI)
static

◆ getSelectsInScope()

void getSelectsInScope ( CHRScope * Scope,
DenseSet< Instruction * > & Output )
static

◆ hasAtLeastTwoBiasedBranches()

bool hasAtLeastTwoBiasedBranches ( CHRScope * Scope)
static

Definition at line 1308 of file ControlHeightReduction.cpp.

References CHRMergeThreshold.

◆ hoistScopeConditions()

void hoistScopeConditions ( CHRScope * Scope,
Instruction * HoistPoint,
DenseSet< PHINode * > & TrivialPHIs,
DominatorTree & DT )
static

Definition at line 1471 of file ControlHeightReduction.cpp.

References llvm::cast(), and hoistValue().

◆ hoistValue()

◆ insertTrivialPHIs()

◆ isHoistable()

bool isHoistable ( Instruction * I,
DominatorTree & DT )
static

◆ isHoistableInstructionType()

bool isHoistableInstructionType ( Instruction * I)
static

Definition at line 468 of file ControlHeightReduction.cpp.

References I, and llvm::isa().

Referenced by hoistValue(), and isHoistable().

◆ negateICmpIfUsedByBranchOrSelectOnly()

bool negateICmpIfUsedByBranchOrSelectOnly ( ICmpInst * ICmp,
Instruction * ExcludedUser,
CHRScope * Scope )
static

◆ operator<<() [1/2]

raw_ostream & operator<< ( raw_ostream & OS,
const CHRScope & Scope )
inlinestatic

Definition at line 407 of file ControlHeightReduction.cpp.

◆ operator<<() [2/2]

raw_ostream LLVM_ATTRIBUTE_UNUSED & operator<< ( raw_ostream & OS,
const CHRStats & Stats )
inlinestatic

Definition at line 400 of file ControlHeightReduction.cpp.

References LLVM_ATTRIBUTE_UNUSED, and Stats.

◆ parseCHRFilterFiles()

◆ shouldApply()

◆ shouldSplit()

bool shouldSplit ( Instruction * InsertPoint,
DenseSet< Value * > & PrevConditionValues,
DenseSet< Value * > & ConditionValues,
DominatorTree & DT,
DenseSet< Instruction * > & Unhoistables )
static

Variable Documentation

◆ CHRBiasThreshold

cl::opt< double > CHRBiasThreshold("chr-bias-threshold", cl::init(0.99), cl::Hidden, cl::desc("CHR considers a branch bias greater than this ratio as biased")) ( "chr-bias-threshold" ,
cl::init(0.99) ,
cl::Hidden ,
cl::desc("CHR considers a branch bias greater than this ratio as biased")  )
static

Referenced by getCHRBiasThreshold().

◆ CHRDupThreshsold

cl::opt< unsigned > CHRDupThreshsold("chr-dup-threshold", cl::init(3), cl::Hidden, cl::desc("Max number of duplications by CHR for a region")) ( "chr-dup-threshold" ,
cl::init(3) ,
cl::Hidden ,
cl::desc("Max number of duplications by CHR for a region")  )
static

◆ CHRFunctionList

cl::opt< std::string > CHRFunctionList("chr-function-list", cl::init(""), cl::Hidden, cl::desc("Specify file to retrieve the list of functions to apply CHR to")) ( "chr-function-list" ,
cl::init("") ,
cl::Hidden ,
cl::desc("Specify file to retrieve the list of functions to apply CHR to")  )
static

Referenced by parseCHRFilterFiles(), and shouldApply().

◆ CHRFunctions

StringSet CHRFunctions
static

Definition at line 78 of file ControlHeightReduction.cpp.

Referenced by parseCHRFilterFiles(), and shouldApply().

◆ CHRMergeThreshold

cl::opt< unsigned > CHRMergeThreshold("chr-merge-threshold", cl::init(2), cl::Hidden, cl::desc("CHR merges a group of N branches/selects where N >= this value")) ( "chr-merge-threshold" ,
cl::init(2) ,
cl::Hidden ,
cl::desc("CHR merges a group of N branches/selects where N >= this value")  )
static

◆ CHRModuleList

cl::opt< std::string > CHRModuleList("chr-module-list", cl::init(""), cl::Hidden, cl::desc("Specify file to retrieve the list of modules to apply CHR to")) ( "chr-module-list" ,
cl::init("") ,
cl::Hidden ,
cl::desc("Specify file to retrieve the list of modules to apply CHR to")  )
static

Referenced by parseCHRFilterFiles(), and shouldApply().

◆ CHRModules

StringSet CHRModules
static

Definition at line 77 of file ControlHeightReduction.cpp.

Referenced by parseCHRFilterFiles(), and shouldApply().

◆ DisableCHR

cl::opt< bool > DisableCHR("disable-chr", cl::init(false), cl::Hidden, cl::desc("Disable CHR for all functions")) ( "disable-chr" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Disable CHR for all functions")  )
static

Referenced by shouldApply().

◆ ForceCHR

cl::opt< bool > ForceCHR("force-chr", cl::init(false), cl::Hidden, cl::desc("Apply CHR for all functions")) ( "force-chr" ,
cl::init(false) ,
cl::Hidden ,
cl::desc("Apply CHR for all functions")  )
static

Referenced by shouldApply().