LLVM 22.0.0git
|
#include "llvm/CodeGen/SwitchLoweringUtils.h"
Classes | |
struct | SplitWorkItemInfo |
Public Attributes | |
std::vector< CaseBlock > | SwitchCases |
Vector of CaseBlock structures used to communicate SwitchInst code generation information. | |
std::vector< JumpTableBlock > | JTCases |
Vector of JumpTable structures used to communicate SwitchInst code generation information. | |
std::vector< BitTestBlock > | BitTestCases |
Vector of BitTestBlock structures used to communicate SwitchInst code generation information. |
Definition at line 258 of file SwitchLoweringUtils.h.
|
inline |
Definition at line 260 of file SwitchLoweringUtils.h.
Referenced by llvm::SelectionDAGBuilder::SDAGSwitchLowering::SDAGSwitchLowering().
|
virtualdefault |
|
pure virtual |
Implemented in llvm::SelectionDAGBuilder::SDAGSwitchLowering.
References llvm::First, llvm::BranchProbability::getUnknown(), and llvm::Last.
Referenced by buildJumpTable().
bool SwitchCG::SwitchLowering::buildBitTests | ( | CaseClusterVector & | Clusters, |
unsigned | First, | ||
unsigned | Last, | ||
const SwitchInst * | SI, | ||
CaseCluster & | BTCluster ) |
Build a bit test cluster from Clusters[First..Last].
Returns false if it decides it's not a good idea.
Definition at line 367 of file SwitchLoweringUtils.cpp.
References assert(), llvm::SwitchCG::CaseBits::Bits, BitTestCases, llvm::SwitchCG::CaseCluster::bitTests(), llvm::BitWidth, llvm::SwitchCG::CC_Range, llvm::BitVector::count(), llvm::SwitchCG::CaseBits::ExtraProb, llvm::First, llvm::APInt::getZero(), llvm::BranchProbability::getZero(), llvm::Hi, High, I, llvm::Last, llvm::Lo, llvm::Low, llvm::SwitchCG::CaseBits::Mask, MBB, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::BitVector::set(), and llvm::sort().
Referenced by findBitTestClusters().
bool SwitchCG::SwitchLowering::buildJumpTable | ( | const CaseClusterVector & | Clusters, |
unsigned | First, | ||
unsigned | Last, | ||
const SwitchInst * | SI, | ||
const std::optional< SDLoc > & | SL, | ||
MachineBasicBlock * | DefaultMBB, | ||
CaseCluster & | JTCluster ) |
Definition at line 192 of file SwitchLoweringUtils.cpp.
References addSuccessorWithProb(), assert(), llvm::SwitchCG::CC_Range, llvm::MachineJumpTableInfo::createJumpTableIndex(), llvm::MachineFunction::CreateMachineBasicBlock(), llvm::Done, llvm::First, llvm::MachineFunction::getOrCreateJumpTableInfo(), llvm::BranchProbability::getZero(), High, I, JTCases, llvm::SwitchCG::CaseCluster::jumpTable(), llvm::Last, llvm::Low, MBB, llvm::MachineBasicBlock::normalizeSuccProbs(), Register, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::size(), and llvm::APInt::slt().
Referenced by findJumpTables().
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().
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.
void SwitchCG::SwitchLowering::findBitTestClusters | ( | CaseClusterVector & | Clusters, |
const SwitchInst * | SI ) |
Definition at line 268 of file SwitchLoweringUtils.cpp.
References assert(), llvm::BitWidth, buildBitTests(), llvm::CallingConv::C, llvm::SwitchCG::CC_JumpTable, llvm::SwitchCG::CC_Range, llvm::BitVector::count(), llvm::First, llvm::EVT::getSizeInBits(), High, llvm::Last, MBB, N, llvm::None, llvm::BitVector::set(), and llvm::ISD::SHL.
void SwitchCG::SwitchLowering::findJumpTables | ( | CaseClusterVector & | Clusters, |
const SwitchInst * | SI, | ||
std::optional< SDLoc > | SL, | ||
MachineBasicBlock * | DefaultMBB, | ||
ProfileSummaryInfo * | PSI, | ||
BlockFrequencyInfo * | BFI ) |
Definition at line 46 of file SwitchLoweringUtils.cpp.
References assert(), buildJumpTable(), llvm::CallingConv::C, llvm::SwitchCG::CC_Range, llvm::First, llvm::SwitchCG::getJumpTableNumCases(), llvm::SwitchCG::getJumpTableRange(), llvm::Hi, High, I, llvm::Last, llvm::Lo, N, llvm::None, Range, and UINT64_MAX.
|
inline |
Definition at line 262 of file SwitchLoweringUtils.h.
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().
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().
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.