LLVM 20.0.0git
Public Member Functions | List of all members
llvm::SimpleLoopSafetyInfo Class Reference

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"

Inheritance diagram for llvm::SimpleLoopSafetyInfo:
Inheritance graph
[legend]

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.
 

Detailed Description

Simple and conservative implementation of LoopSafetyInfo that can give false-positive answers to its queries in order to avoid complicated analysis.

Definition at line 110 of file MustExecute.h.

Member Function Documentation

◆ anyBlockMayThrow()

bool SimpleLoopSafetyInfo::anyBlockMayThrow ( ) const
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().

◆ blockMayThrow()

bool SimpleLoopSafetyInfo::blockMayThrow ( const BasicBlock BB) const
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().

◆ computeLoopSafetyInfo()

void SimpleLoopSafetyInfo::computeLoopSafetyInfo ( const Loop CurLoop)
overridevirtual

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().

◆ isGuaranteedToExecute()

bool SimpleLoopSafetyInfo::isGuaranteedToExecute ( const Instruction Inst,
const DominatorTree DT,
const Loop CurLoop 
) const
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().


The documentation for this class was generated from the following files: