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().