LLVM
17.0.0git
|
#include "llvm/CodeGen/SwitchLoweringUtils.h"
Public Member Functions | |
SwitchLowering (FunctionLoweringInfo &funcinfo) | |
void | init (const TargetLowering &tli, const TargetMachine &tm, const DataLayout &dl) |
void | findJumpTables (CaseClusterVector &Clusters, const SwitchInst *SI, MachineBasicBlock *DefaultMBB, ProfileSummaryInfo *PSI, BlockFrequencyInfo *BFI) |
bool | buildJumpTable (const CaseClusterVector &Clusters, unsigned First, unsigned Last, const SwitchInst *SI, 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]. More... | |
virtual void | addSuccessorWithProb (MachineBasicBlock *Src, MachineBasicBlock *Dst, BranchProbability Prob=BranchProbability::getUnknown())=0 |
virtual | ~SwitchLowering ()=default |
Public Attributes | |
std::vector< CaseBlock > | SwitchCases |
Vector of CaseBlock structures used to communicate SwitchInst code generation information. More... | |
std::vector< JumpTableBlock > | JTCases |
Vector of JumpTable structures used to communicate SwitchInst code generation information. More... | |
std::vector< BitTestBlock > | BitTestCases |
Vector of BitTestBlock structures used to communicate SwitchInst code generation information. More... | |
Definition at line 249 of file SwitchLoweringUtils.h.
|
inline |
Definition at line 251 of file SwitchLoweringUtils.h.
|
virtualdefault |
|
pure virtual |
Implemented in llvm::SelectionDAGBuilder::SDAGSwitchLowering.
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 364 of file SwitchLoweringUtils.cpp.
References assert(), b, BB, llvm::SwitchCG::CaseBits::Bits, llvm::SwitchCG::CaseCluster::bitTests(), llvm::BitWidth, llvm::SwitchCG::CC_Range, llvm::BitVector::count(), DL, llvm::SmallVectorImpl< T >::emplace_back(), llvm::SwitchCG::CaseBits::ExtraProb, First, llvm::MachineBasicBlock::getNumber(), llvm::BranchProbability::getZero(), llvm::APInt::getZero(), High, i, I, if(), j(), llvm::Last, llvm::Low, llvm::SwitchCG::CaseBits::Mask, MBB, move, llvm::MVT::Other, llvm::BitVector::set(), SI, and llvm::sort().
bool SwitchCG::SwitchLowering::buildJumpTable | ( | const CaseClusterVector & | Clusters, |
unsigned | First, | ||
unsigned | Last, | ||
const SwitchInst * | SI, | ||
MachineBasicBlock * | DefaultMBB, | ||
CaseCluster & | JTCluster | ||
) |
Definition at line 190 of file SwitchLoweringUtils.cpp.
References assert(), llvm::SwitchCG::CC_Range, llvm::SmallPtrSetImpl< PtrType >::count(), llvm::MachineJumpTableInfo::createJumpTableIndex(), llvm::MachineFunction::CreateMachineBasicBlock(), DL, First, llvm::MachineFunction::getOrCreateJumpTableInfo(), llvm::BranchProbability::getZero(), High, I, llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::HexagonISD::JT, llvm::SwitchCG::CaseCluster::jumpTable(), llvm::Last, llvm::Low, MBB, move, llvm::MachineBasicBlock::normalizeSuccProbs(), SI, llvm::DenseMapBase< DenseMap< KeyT, ValueT, DenseMapInfo< KeyT >, llvm::detail::DenseMapPair< KeyT, ValueT > >, KeyT, ValueT, DenseMapInfo< KeyT >, llvm::detail::DenseMapPair< KeyT, ValueT > >::size(), and llvm::APInt::slt().
void SwitchCG::SwitchLowering::findBitTestClusters | ( | CaseClusterVector & | Clusters, |
const SwitchInst * | SI | ||
) |
Definition at line 265 of file SwitchLoweringUtils.cpp.
References assert(), llvm::BitWidth, llvm::SwitchCG::CC_JumpTable, llvm::SwitchCG::CC_Range, llvm::BitVector::count(), DL, First, llvm::MachineBasicBlock::getNumber(), llvm::EVT::getSizeInBits(), High, i, j(), llvm::Last, MBB, llvm::min(), N, llvm::CodeGenOpt::None, llvm::BitVector::set(), llvm::ISD::SHL, SI, and TM.
void SwitchCG::SwitchLowering::findJumpTables | ( | CaseClusterVector & | Clusters, |
const SwitchInst * | SI, | ||
MachineBasicBlock * | DefaultMBB, | ||
ProfileSummaryInfo * | PSI, | ||
BlockFrequencyInfo * | BFI | ||
) |
Definition at line 46 of file SwitchLoweringUtils.cpp.
References assert(), llvm::AMDGPUISD::BFI, llvm::SwitchCG::CC_Range, llvm::numbers::e, First, llvm::SwitchCG::getJumpTableNumCases(), llvm::SwitchCG::getJumpTableRange(), High, i, I, j(), llvm::Last, N, llvm::CodeGenOpt::None, SI, TM, and UINT64_MAX.
|
inline |
Definition at line 253 of file SwitchLoweringUtils.h.
References DL.
std::vector<BitTestBlock> llvm::SwitchCG::SwitchLowering::BitTestCases |
Vector of BitTestBlock structures used to communicate SwitchInst code generation information.
Definition at line 270 of file SwitchLoweringUtils.h.
std::vector<JumpTableBlock> llvm::SwitchCG::SwitchLowering::JTCases |
Vector of JumpTable structures used to communicate SwitchInst code generation information.
Definition at line 266 of file SwitchLoweringUtils.h.
std::vector<CaseBlock> llvm::SwitchCG::SwitchLowering::SwitchCases |
Vector of CaseBlock structures used to communicate SwitchInst code generation information.
Definition at line 262 of file SwitchLoweringUtils.h.