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]. | |
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. | |
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 249 of file SwitchLoweringUtils.h.
|
inline |
Definition at line 251 of file SwitchLoweringUtils.h.
|
virtualdefault |
References DL.
|
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(), llvm::SwitchCG::CaseBits::Bits, llvm::SwitchCG::CaseCluster::bitTests(), llvm::BitWidth, llvm::SwitchCG::CC_Range, llvm::BitVector::count(), DL, llvm::SwitchCG::CaseBits::ExtraProb, llvm::MachineBasicBlock::getNumber(), llvm::BranchProbability::getZero(), llvm::APInt::getZero(), llvm::Hi, High, I, if(), llvm::Last, llvm::Lo, llvm::Low, llvm::SwitchCG::CaseBits::Mask, MBB, llvm::SmallVectorTemplateBase< T, bool >::push_back(), 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::MachineJumpTableInfo::createJumpTableIndex(), llvm::MachineFunction::CreateMachineBasicBlock(), DL, llvm::Done, llvm::MachineFunction::getOrCreateJumpTableInfo(), llvm::BranchProbability::getZero(), High, I, llvm::SwitchCG::CaseCluster::jumpTable(), llvm::Last, llvm::Low, MBB, llvm::MachineBasicBlock::normalizeSuccProbs(), SI, llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::size(), and llvm::APInt::slt().
Referenced by findJumpTables().
void SwitchCG::SwitchLowering::findBitTestClusters | ( | CaseClusterVector & | Clusters, |
const SwitchInst * | SI | ||
) |
Definition at line 265 of file SwitchLoweringUtils.cpp.
References assert(), llvm::BitWidth, llvm::CallingConv::C, llvm::SwitchCG::CC_JumpTable, llvm::SwitchCG::CC_Range, llvm::BitVector::count(), DL, llvm::MachineBasicBlock::getNumber(), llvm::EVT::getSizeInBits(), High, llvm::Last, MBB, 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 llvm::TargetLoweringBase::areJTsAllowed(), assert(), buildJumpTable(), llvm::CallingConv::C, llvm::SwitchCG::CC_Range, llvm::SwitchCG::getJumpTableNumCases(), llvm::SwitchCG::getJumpTableRange(), llvm::TargetLoweringBase::getMinimumJumpTableEntries(), llvm::TargetMachine::getOptLevel(), llvm::Hi, High, I, llvm::TargetLoweringBase::isSuitableForJumpTable(), llvm::Last, llvm::Lo, N, llvm::CodeGenOpt::None, SI, 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.