LLVM 20.0.0git
|
A "must be executed context" for a given program point PP is the set of instructions, potentially before and after PP, that are executed always when PP is reached. More...
#include "llvm/Analysis/MustExecute.h"
Public Types | |
using | iterator = MustBeExecutedIterator |
Iterator-based interface. | |
using | const_iterator = const MustBeExecutedIterator |
Public Member Functions | |
MustBeExecutedContextExplorer (bool ExploreInterBlock, bool ExploreCFGForward, bool ExploreCFGBackward, GetterTy< const LoopInfo > LIGetter=[](const Function &) { return nullptr;}, GetterTy< const DominatorTree > DTGetter=[](const Function &) { return nullptr;}, GetterTy< const PostDominatorTree > PDTGetter=[](const Function &) { return nullptr;}) | |
In the description of the parameters we use PP to denote a program point for which the must be executed context is explored, or put differently, for which the MustBeExecutedIterator is created. | |
iterator & | begin (const Instruction *PP) |
Return an iterator to explore the context around PP . | |
const_iterator & | begin (const Instruction *PP) const |
Return an iterator to explore the cached context around PP . | |
iterator & | end () |
Return an universal end iterator. | |
iterator & | end (const Instruction *) |
const_iterator & | end () const |
const_iterator & | end (const Instruction *) const |
llvm::iterator_range< iterator > | range (const Instruction *PP) |
} | |
llvm::iterator_range< const_iterator > | range (const Instruction *PP) const |
Return an iterator range to explore the cached context around PP . | |
bool | checkForAllContext (const Instruction *PP, function_ref< bool(const Instruction *)> Pred) |
} | |
bool | findInContextOf (const Instruction *I, const Instruction *PP) |
Helper to look for I in the context of PP . | |
bool | findInContextOf (const Instruction *I, iterator &EIt, iterator &EEnd) |
Helper to look for I in the context defined by EIt and EEnd . | |
const Instruction * | getMustBeExecutedNextInstruction (MustBeExecutedIterator &It, const Instruction *PP) |
Return the next instruction that is guaranteed to be executed after PP . | |
const Instruction * | getMustBeExecutedPrevInstruction (MustBeExecutedIterator &It, const Instruction *PP) |
Return the previous instr. | |
const BasicBlock * | findForwardJoinPoint (const BasicBlock *InitBB) |
Find the next join point from InitBB in forward direction. | |
const BasicBlock * | findBackwardJoinPoint (const BasicBlock *InitBB) |
Find the next join point from InitBB in backward direction. | |
Public Attributes | |
const bool | ExploreInterBlock |
Parameter that limit the performed exploration. | |
const bool | ExploreCFGForward |
const bool | ExploreCFGBackward |
A "must be executed context" for a given program point PP is the set of instructions, potentially before and after PP, that are executed always when PP is reached.
The MustBeExecutedContextExplorer an interface to explore "must be executed contexts" in a module through the use of MustBeExecutedIterator.
The explorer exposes "must be executed iterators" that traverse the must be executed context. There is little information sharing between iterators as the expected use case involves few iterators for "far apart" instructions. If that changes, we should consider caching more intermediate results.
Definition at line 385 of file MustExecute.h.
Definition at line 416 of file MustExecute.h.
Iterator-based interface.
Definition at line 415 of file MustExecute.h.
|
inline |
In the description of the parameters we use PP to denote a program point for which the must be executed context is explored, or put differently, for which the MustBeExecutedIterator is created.
ExploreInterBlock | Flag to indicate if instructions in blocks other than the parent of PP should be explored. |
ExploreCFGForward | Flag to indicate if instructions located after PP in the CFG, e.g., post-dominating PP, should be explored. |
ExploreCFGBackward | Flag to indicate if instructions located before PP in the CFG, e.g., dominating PP, should be explored. |
Definition at line 400 of file MustExecute.h.
|
inline |
Return an iterator to explore the context around PP
.
Definition at line 419 of file MustExecute.h.
Referenced by checkForAllContext(), findInContextOf(), llvm::Attributor::getAttrsFromAssumes(), and range().
|
inline |
Return an iterator to explore the cached context around PP
.
Definition at line 427 of file MustExecute.h.
|
inline |
}
Check Pred
on all instructions in the context.
This method will evaluate Pred
and return true if Pred
holds in every instruction.
Definition at line 455 of file MustExecute.h.
|
inline |
Return an universal end iterator.
{
Definition at line 433 of file MustExecute.h.
Referenced by checkForAllContext(), findInContextOf(), llvm::Attributor::getAttrsFromAssumes(), and range().
|
inline |
Definition at line 436 of file MustExecute.h.
|
inline |
Definition at line 434 of file MustExecute.h.
|
inline |
Definition at line 437 of file MustExecute.h.
const BasicBlock * MustBeExecutedContextExplorer::findBackwardJoinPoint | ( | const BasicBlock * | InitBB | ) |
Find the next join point from InitBB
in backward direction.
Definition at line 549 of file MustExecute.cpp.
References llvm::dbgs(), llvm::SmallVectorBase< Size_T >::empty(), llvm::LoopInfoBase< BlockT, LoopT >::getLoopFor(), llvm::Value::getName(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getNode(), llvm::BasicBlock::getParent(), llvm::BasicBlock::getUniquePredecessor(), LLVM_DEBUG, llvm::predecessors(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorBase< Size_T >::size().
Referenced by getMustBeExecutedPrevInstruction().
const BasicBlock * MustBeExecutedContextExplorer::findForwardJoinPoint | ( | const BasicBlock * | InitBB | ) |
Find the next join point from InitBB
in forward direction.
Definition at line 413 of file MustExecute.cpp.
References llvm::append_range(), llvm::dbgs(), llvm::SmallVectorBase< Size_T >::empty(), F, llvm::LoopInfoBase< BlockT, LoopT >::getLoopFor(), llvm::Value::getName(), llvm::DominatorTreeBase< NodeT, IsPostDom >::getNode(), getOrCreateCachedOptional(), llvm::BasicBlock::getParent(), llvm::BasicBlock::getUniqueSuccessor(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::isGuaranteedToTransferExecutionToSuccessor(), LLVM_DEBUG, maybeEndlessLoop(), llvm::mayContainIrreducibleControl(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorBase< Size_T >::size(), and llvm::successors().
Referenced by getMustBeExecutedNextInstruction().
|
inline |
Helper to look for I
in the context of PP
.
The context is expanded until I
was found or no more expansion is possible.
I
was found. Definition at line 469 of file MustExecute.h.
References begin(), end(), findInContextOf(), and I.
Referenced by findInContextOf(), and llvm::Attributor::getAttrsFromAssumes().
|
inline |
Helper to look for I
in the context defined by EIt
and EEnd
.
The context is expanded until I
was found or no more expansion is possible.
I
was found. Definition at line 480 of file MustExecute.h.
References llvm::MustBeExecutedIterator::count(), and I.
const Instruction * MustBeExecutedContextExplorer::getMustBeExecutedNextInstruction | ( | MustBeExecutedIterator & | It, |
const Instruction * | PP | ||
) |
Return the next instruction that is guaranteed to be executed after PP
.
It | The iterator that is used to traverse the must be executed context. |
PP | The program point for which the next instruction that is guaranteed to execute is determined. |
Definition at line 616 of file MustExecute.cpp.
References assert(), llvm::dbgs(), ExploreInterBlock, findForwardJoinPoint(), llvm::BasicBlock::front(), llvm::ilist_node_with_parent< NodeTy, ParentTy, Options >::getNextNode(), llvm::Instruction::getNumSuccessors(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::Instruction::getSuccessor(), llvm::isGuaranteedToTransferExecutionToSuccessor(), llvm::Instruction::isTerminator(), and LLVM_DEBUG.
const Instruction * MustBeExecutedContextExplorer::getMustBeExecutedPrevInstruction | ( | MustBeExecutedIterator & | It, |
const Instruction * | PP | ||
) |
Return the previous instr.
that is guaranteed to be executed before PP
.
It | The iterator that is used to traverse the must be executed context. |
PP | The program point for which the previous instr. that is guaranteed to execute is determined. |
Definition at line 673 of file MustExecute.cpp.
References llvm::dbgs(), ExploreInterBlock, findBackwardJoinPoint(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::ilist_node_with_parent< NodeTy, ParentTy, Options >::getPrevNode(), and LLVM_DEBUG.
|
inline |
}
Return an iterator range to explore the context around PP
.
Definition at line 441 of file MustExecute.h.
References begin(), end(), and llvm::make_range().
Referenced by llvm::MustBeExecutedContextPrinterPass::run().
|
inline |
Return an iterator range to explore the cached context around PP
.
Definition at line 446 of file MustExecute.h.
References begin(), end(), and llvm::make_range().
Definition at line 517 of file MustExecute.h.
Definition at line 516 of file MustExecute.h.
Parameter that limit the performed exploration.
See the constructor for their meaning. {
Definition at line 515 of file MustExecute.h.
Referenced by getMustBeExecutedNextInstruction(), and getMustBeExecutedPrevInstruction().