LLVM 20.0.0git
|
Simple and conservative implementation of LoopSafetyInfo that can give false-positive answers to its queries in order to avoid complicated analysis. More...
#include "llvm/Analysis/MustExecute.h"
Public Member Functions | |
bool | blockMayThrow (const BasicBlock *BB) const override |
Returns true iff the block BB potentially may throw exception. | |
bool | anyBlockMayThrow () const override |
Returns true iff any block of the loop for which this info is contains an instruction that may throw or otherwise exit abnormally. | |
void | computeLoopSafetyInfo (const Loop *CurLoop) override |
Computes safety information for a loop checks loop body & header for the possibility of may throw exception, it takes LoopSafetyInfo and loop as argument. | |
bool | isGuaranteedToExecute (const Instruction &Inst, const DominatorTree *DT, const Loop *CurLoop) const override |
Returns true if the instruction in a loop is guaranteed to execute at least once. | |
Public Member Functions inherited from llvm::LoopSafetyInfo | |
const DenseMap< BasicBlock *, ColorVector > & | getBlockColors () const |
Returns block colors map that is used to update funclet operand bundles. | |
void | copyColors (BasicBlock *New, BasicBlock *Old) |
Copy colors of block Old into the block New . | |
virtual bool | blockMayThrow (const BasicBlock *BB) const =0 |
Returns true iff the block BB potentially may throw exception. | |
virtual bool | anyBlockMayThrow () const =0 |
Returns true iff any block of the loop for which this info is contains an instruction that may throw or otherwise exit abnormally. | |
bool | allLoopPathsLeadToBlock (const Loop *CurLoop, const BasicBlock *BB, const DominatorTree *DT) const |
Return true if we must reach the block BB under assumption that the loop CurLoop is entered. | |
virtual void | computeLoopSafetyInfo (const Loop *CurLoop)=0 |
Computes safety information for a loop checks loop body & header for the possibility of may throw exception, it takes LoopSafetyInfo and loop as argument. | |
virtual bool | isGuaranteedToExecute (const Instruction &Inst, const DominatorTree *DT, const Loop *CurLoop) const =0 |
Returns true if the instruction in a loop is guaranteed to execute at least once (under the assumption that the loop is entered). | |
LoopSafetyInfo ()=default | |
virtual | ~LoopSafetyInfo ()=default |
Additional Inherited Members | |
Protected Member Functions inherited from llvm::LoopSafetyInfo | |
void | computeBlockColors (const Loop *CurLoop) |
Computes block colors. | |
Simple and conservative implementation of LoopSafetyInfo that can give false-positive answers to its queries in order to avoid complicated analysis.
Definition at line 109 of file MustExecute.h.
|
overridevirtual |
Returns true iff any block of the loop for which this info is contains an instruction that may throw or otherwise exit abnormally.
Implements llvm::LoopSafetyInfo.
Definition at line 47 of file MustExecute.cpp.
Referenced by blockMayThrow(), and llvm::isSafeToUnrollAndJam().
|
overridevirtual |
Returns true iff the block BB
potentially may throw exception.
It can be false-positive in cases when we want to avoid complex analysis.
Implements llvm::LoopSafetyInfo.
Definition at line 42 of file MustExecute.cpp.
References anyBlockMayThrow().
Computes safety information for a loop checks loop body & header for the possibility of may throw exception, it takes LoopSafetyInfo and loop as argument.
Updates safety information in LoopSafetyInfo argument. Note: This is defined to clear and reinitialize an already initialized LoopSafetyInfo. Some callers rely on this fact.
Implements llvm::LoopSafetyInfo.
Definition at line 51 of file MustExecute.cpp.
References assert(), llvm::LoopBase< BlockT, LoopT >::blocks(), llvm::LoopSafetyInfo::computeBlockColors(), llvm::drop_begin(), llvm::LoopBase< BlockT, LoopT >::getBlocks(), llvm::LoopBase< BlockT, LoopT >::getHeader(), and llvm::isGuaranteedToTransferExecutionToSuccessor().
Referenced by isMustExecuteIn(), and llvm::isSafeToUnrollAndJam().
|
overridevirtual |
Returns true if the instruction in a loop is guaranteed to execute at least once.
Implements llvm::LoopSafetyInfo.
Definition at line 263 of file MustExecute.cpp.
References llvm::LoopSafetyInfo::allLoopPathsLeadToBlock(), llvm::LoopBase< BlockT, LoopT >::getHeader(), and llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent().
Referenced by isMustExecuteIn().