LLVM 20.0.0git
|
Public Member Functions | |
SPIRVMergeRegionExitTargets () | |
std::unordered_set< BasicBlock * > | gatherSuccessors (BasicBlock *BB) |
llvm::Value * | createExitVariable (BasicBlock *BB, const DenseMap< BasicBlock *, ConstantInt * > &TargetToValue) |
Create a value in BB set to the value associated with the branch the block terminator will take. | |
void | replaceBranchTargets (BasicBlock *BB, const SmallPtrSet< BasicBlock *, 4 > &ToReplace, BasicBlock *NewTarget) |
Replaces |BB|'s branch targets present in |ToReplace| with |NewTarget|. | |
bool | runOnConvergenceRegionNoRecurse (LoopInfo &LI, const SPIRV::ConvergenceRegion *CR) |
bool | runOnConvergenceRegion (LoopInfo &LI, const SPIRV::ConvergenceRegion *CR) |
Run the pass on the given convergence region and sub-regions (DFS). | |
void | validateRegionExits (const SPIRV::ConvergenceRegion *CR) |
Validates each edge exiting the region has the same destination basic block. | |
virtual bool | runOnFunction (Function &F) override |
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass. | |
void | getAnalysisUsage (AnalysisUsage &AU) const override |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job. | |
Public Member Functions inherited from llvm::FunctionPass | |
FunctionPass (char &pid) | |
Pass * | createPrinterPass (raw_ostream &OS, const std::string &Banner) const override |
createPrinterPass - Get a function printer pass. | |
virtual bool | runOnFunction (Function &F)=0 |
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass. | |
void | assignPassManager (PMStack &PMS, PassManagerType T) override |
Find appropriate Function Pass Manager or Call Graph Pass Manager in the PM Stack and add self into that manager. | |
PassManagerType | getPotentialPassManagerType () const override |
Return what kind of Pass Manager can manage this pass. | |
Public Member Functions inherited from llvm::Pass | |
Pass (PassKind K, char &pid) | |
Pass (const Pass &)=delete | |
Pass & | operator= (const Pass &)=delete |
virtual | ~Pass () |
PassKind | getPassKind () const |
virtual StringRef | getPassName () const |
getPassName - Return a nice clean name for a pass. | |
AnalysisID | getPassID () const |
getPassID - Return the PassID number that corresponds to this pass. | |
virtual bool | doInitialization (Module &) |
doInitialization - Virtual method overridden by subclasses to do any necessary initialization before any pass is run. | |
virtual bool | doFinalization (Module &) |
doFinalization - Virtual method overriden by subclasses to do any necessary clean up after all passes have run. | |
virtual void | print (raw_ostream &OS, const Module *M) const |
print - Print out the internal state of the pass. | |
void | dump () const |
virtual Pass * | createPrinterPass (raw_ostream &OS, const std::string &Banner) const =0 |
createPrinterPass - Get a Pass appropriate to print the IR this pass operates on (Module, Function or MachineFunction). | |
virtual void | assignPassManager (PMStack &, PassManagerType) |
Each pass is responsible for assigning a pass manager to itself. | |
virtual void | preparePassManager (PMStack &) |
Check if available pass managers are suitable for this pass or not. | |
virtual PassManagerType | getPotentialPassManagerType () const |
Return what kind of Pass Manager can manage this pass. | |
void | setResolver (AnalysisResolver *AR) |
AnalysisResolver * | getResolver () const |
virtual void | getAnalysisUsage (AnalysisUsage &) const |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job. | |
virtual void | releaseMemory () |
releaseMemory() - This member can be implemented by a pass if it wants to be able to release its memory when it is no longer needed. | |
virtual void * | getAdjustedAnalysisPointer (AnalysisID ID) |
getAdjustedAnalysisPointer - This method is used when a pass implements an analysis interface through multiple inheritance. | |
virtual ImmutablePass * | getAsImmutablePass () |
virtual PMDataManager * | getAsPMDataManager () |
virtual void | verifyAnalysis () const |
verifyAnalysis() - This member can be implemented by a analysis pass to check state of analysis information. | |
virtual void | dumpPassStructure (unsigned Offset=0) |
template<typename AnalysisType > | |
AnalysisType * | getAnalysisIfAvailable () const |
getAnalysisIfAvailable<AnalysisType>() - Subclasses use this function to get analysis information that might be around, for example to update it. | |
bool | mustPreserveAnalysisID (char &AID) const |
mustPreserveAnalysisID - This method serves the same function as getAnalysisIfAvailable, but works if you just have an AnalysisID. | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis () const |
getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysis (Function &F, bool *Changed=nullptr) |
getAnalysis<AnalysisType>() - This function is used by subclasses to get to the analysis information that they claim to use by overriding the getAnalysisUsage function. | |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI) const |
template<typename AnalysisType > | |
AnalysisType & | getAnalysisID (AnalysisID PI, Function &F, bool *Changed=nullptr) |
Static Public Attributes | |
static char | ID = 0 |
Additional Inherited Members | |
Static Public Member Functions inherited from llvm::Pass | |
static const PassInfo * | lookupPassInfo (const void *TI) |
static const PassInfo * | lookupPassInfo (StringRef Arg) |
static Pass * | createPass (AnalysisID ID) |
Protected Member Functions inherited from llvm::FunctionPass | |
bool | skipFunction (const Function &F) const |
Optional passes call this function to check whether the pass should be skipped. | |
Definition at line 40 of file SPIRVMergeRegionExitTargets.cpp.
|
inline |
Definition at line 44 of file SPIRVMergeRegionExitTargets.cpp.
References llvm::PassRegistry::getPassRegistry(), and llvm::initializeSPIRVMergeRegionExitTargetsPass().
|
inline |
Create a value in BB set to the value associated with the branch the block terminator will take.
Definition at line 74 of file SPIRVMergeRegionExitTargets.cpp.
References llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::at(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::count(), llvm::IRBuilderBase::CreateSelect(), llvm::BasicBlock::getTerminator(), LHS, llvm_unreachable, RHS, and llvm::IRBuilderBase::SetInsertPoint().
Referenced by runOnConvergenceRegionNoRecurse().
|
inline |
Definition at line 50 of file SPIRVMergeRegionExitTargets.cpp.
References assert(), and llvm::BasicBlock::getTerminator().
Referenced by runOnConvergenceRegionNoRecurse(), and validateRegionExits().
|
inlineoverridevirtual |
getAnalysisUsage - This function should be overriden by passes that need analysis information to do their job.
If a pass specifies that it uses a particular analysis result to this function, it can then use the getAnalysis<AnalysisType>() function, below.
Reimplemented from llvm::Pass.
Definition at line 261 of file SPIRVMergeRegionExitTargets.cpp.
References llvm::AnalysisUsage::addRequired(), and llvm::Pass::getAnalysisUsage().
|
inline |
Replaces |BB|'s branch targets present in |ToReplace| with |NewTarget|.
Definition at line 107 of file SPIRVMergeRegionExitTargets.cpp.
References assert(), llvm::SmallPtrSetImpl< PtrType >::count(), llvm::BasicBlock::getTerminator(), and llvm::Instruction::setSuccessor().
Referenced by runOnConvergenceRegionNoRecurse().
|
inline |
Run the pass on the given convergence region and sub-regions (DFS).
Returns true if a region/sub-region was modified, false otherwise. This returns as soon as one region/sub-region has been modified.
Definition at line 207 of file SPIRVMergeRegionExitTargets.cpp.
References llvm::SPIRV::ConvergenceRegion::Children, runOnConvergenceRegion(), and runOnConvergenceRegionNoRecurse().
Referenced by runOnConvergenceRegion(), and runOnFunction().
|
inline |
Definition at line 135 of file SPIRVMergeRegionExitTargets.cpp.
References llvm::SwitchInst::addCase(), llvm::PHINode::addIncoming(), llvm::SPIRV::ConvergenceRegion::Blocks, llvm::SmallPtrSetImpl< PtrType >::count(), llvm::BasicBlock::Create(), createExitVariable(), llvm::IRBuilderBase::CreatePHI(), llvm::IRBuilderBase::CreateSwitch(), llvm::SPIRV::ConvergenceRegion::Entry, llvm::SPIRV::ConvergenceRegion::Exits, F, gatherSuccessors(), llvm::IRBuilderBase::getInt32(), llvm::IRBuilderBase::getInt32Ty(), llvm::BasicBlock::getParent(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::SmallPtrSetImpl< PtrType >::insert(), replaceBranchTargets(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::size(), and llvm::SmallPtrSetImplBase::size().
Referenced by runOnConvergenceRegion().
runOnFunction - Virtual method overriden by subclasses to do the per-function processing of the pass.
Implements llvm::FunctionPass.
Definition at line 236 of file SPIRVMergeRegionExitTargets.cpp.
References runOnConvergenceRegion(), and validateRegionExits().
|
inline |
Validates each edge exiting the region has the same destination basic block.
Definition at line 219 of file SPIRVMergeRegionExitTargets.cpp.
References assert(), llvm::SPIRV::ConvergenceRegion::Blocks, llvm::SPIRV::ConvergenceRegion::Children, llvm::SPIRV::ConvergenceRegion::Exits, gatherSuccessors(), and validateRegionExits().
Referenced by runOnFunction(), and validateRegionExits().
|
static |
Definition at line 42 of file SPIRVMergeRegionExitTargets.cpp.