LLVM 22.0.0git
llvm::SwitchCG::SwitchLowering Class Referenceabstract

#include "llvm/CodeGen/SwitchLoweringUtils.h"

Inheritance diagram for llvm::SwitchCG::SwitchLowering:
[legend]

Classes

struct  SplitWorkItemInfo

Public Member Functions

 SwitchLowering (FunctionLoweringInfo &funcinfo)
void init (const TargetLowering &tli, const TargetMachine &tm, const DataLayout &dl)
void findJumpTables (CaseClusterVector &Clusters, const SwitchInst *SI, std::optional< SDLoc > SL, MachineBasicBlock *DefaultMBB, ProfileSummaryInfo *PSI, BlockFrequencyInfo *BFI)
bool buildJumpTable (const CaseClusterVector &Clusters, unsigned First, unsigned Last, const SwitchInst *SI, const std::optional< SDLoc > &SL, MachineBasicBlock *DefaultMBB, CaseCluster &JTCluster)
void findBitTestClusters (CaseClusterVector &Clusters, const SwitchInst *SI)
bool buildBitTests (CaseClusterVector &Clusters, unsigned First, unsigned Last, const SwitchInst *SI, CaseCluster &BTCluster)
 Build a bit test cluster from Clusters[First..Last].
virtual void addSuccessorWithProb (MachineBasicBlock *Src, MachineBasicBlock *Dst, BranchProbability Prob=BranchProbability::getUnknown())=0
unsigned caseClusterRank (const CaseCluster &CC, CaseClusterIt First, CaseClusterIt Last)
 Determine the rank by weight of CC in [First,Last].
SplitWorkItemInfo computeSplitWorkItemInfo (const SwitchWorkListItem &W)
 Compute information to balance the tree based on branch probabilities to create a near-optimal (in terms of search time given key frequency) binary search tree.
virtual ~SwitchLowering ()=default

Public Attributes

std::vector< CaseBlockSwitchCases
 Vector of CaseBlock structures used to communicate SwitchInst code generation information.
std::vector< JumpTableBlockJTCases
 Vector of JumpTable structures used to communicate SwitchInst code generation information.
std::vector< BitTestBlockBitTestCases
 Vector of BitTestBlock structures used to communicate SwitchInst code generation information.

Detailed Description

Definition at line 258 of file SwitchLoweringUtils.h.

Constructor & Destructor Documentation

◆ SwitchLowering()

llvm::SwitchCG::SwitchLowering::SwitchLowering ( FunctionLoweringInfo & funcinfo)
inline

◆ ~SwitchLowering()

virtual llvm::SwitchCG::SwitchLowering::~SwitchLowering ( )
virtualdefault

Member Function Documentation

◆ addSuccessorWithProb()

virtual void llvm::SwitchCG::SwitchLowering::addSuccessorWithProb ( MachineBasicBlock * Src,
MachineBasicBlock * Dst,
BranchProbability Prob = BranchProbability::getUnknown() )
pure virtual

◆ buildBitTests()

◆ buildJumpTable()

◆ caseClusterRank()

unsigned SwitchCG::SwitchLowering::caseClusterRank ( const CaseCluster & CC,
CaseClusterIt First,
CaseClusterIt Last )

Determine the rank by weight of CC in [First,Last].

If CC has more weight than each cluster in the range, its rank is 0.

Definition at line 499 of file SwitchLoweringUtils.cpp.

References llvm::First, llvm::ConstantInt::getValue(), llvm::Last, llvm::SwitchCG::CaseCluster::Low, llvm::SwitchCG::CaseCluster::Prob, and X.

Referenced by computeSplitWorkItemInfo().

◆ computeSplitWorkItemInfo()

llvm::SwitchCG::SwitchLowering::SplitWorkItemInfo SwitchCG::SwitchLowering::computeSplitWorkItemInfo ( const SwitchWorkListItem & W)

Compute information to balance the tree based on branch probabilities to create a near-optimal (in terms of search time given key frequency) binary search tree.

See e.g. Kurt Mehlhorn "Nearly Optimal Binary Search Trees" (1975).

Definition at line 512 of file SwitchLoweringUtils.cpp.

References assert(), caseClusterRank(), and I.

◆ findBitTestClusters()

◆ findJumpTables()

◆ init()

void llvm::SwitchCG::SwitchLowering::init ( const TargetLowering & tli,
const TargetMachine & tm,
const DataLayout & dl )
inline

Definition at line 262 of file SwitchLoweringUtils.h.

Member Data Documentation

◆ BitTestCases

std::vector<BitTestBlock> llvm::SwitchCG::SwitchLowering::BitTestCases

Vector of BitTestBlock structures used to communicate SwitchInst code generation information.

Definition at line 279 of file SwitchLoweringUtils.h.

Referenced by buildBitTests().

◆ JTCases

std::vector<JumpTableBlock> llvm::SwitchCG::SwitchLowering::JTCases

Vector of JumpTable structures used to communicate SwitchInst code generation information.

Definition at line 275 of file SwitchLoweringUtils.h.

Referenced by buildJumpTable().

◆ SwitchCases

std::vector<CaseBlock> llvm::SwitchCG::SwitchLowering::SwitchCases

Vector of CaseBlock structures used to communicate SwitchInst code generation information.

Definition at line 271 of file SwitchLoweringUtils.h.


The documentation for this class was generated from the following files: