mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-10 06:03:52 +00:00
[LLVM] [RegionInfo] Introduce getExitingBlocks to get all predecessors of Exit in the current region.
This function will return true if all predecessors of Exit are in the current region, false otherwise. Differential Revision: https://reviews.llvm.org/D36210 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313611 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4c92030df7
commit
570e4c977e
@ -407,6 +407,11 @@ public:
|
||||
/// else NULL.
|
||||
BlockT *getExitingBlock() const;
|
||||
|
||||
/// @brief Collect all blocks of this region's single exit edge, if existing.
|
||||
///
|
||||
/// @return True if this region contains all the predecessors of the exit.
|
||||
bool getExitingBlocks(SmallVectorImpl<BlockT *> &Exitings) const;
|
||||
|
||||
/// @brief Is this a simple region?
|
||||
///
|
||||
/// A region is simple if it has exactly one exit and one entry edge.
|
||||
|
@ -177,6 +177,29 @@ typename RegionBase<Tr>::BlockT *RegionBase<Tr>::getEnteringBlock() const {
|
||||
return enteringBlock;
|
||||
}
|
||||
|
||||
template <class Tr>
|
||||
bool RegionBase<Tr>::getExitingBlocks(
|
||||
SmallVectorImpl<BlockT *> &Exitings) const {
|
||||
bool CoverAll = true;
|
||||
|
||||
if (!exit)
|
||||
return CoverAll;
|
||||
|
||||
for (PredIterTy PI = InvBlockTraits::child_begin(exit),
|
||||
PE = InvBlockTraits::child_end(exit);
|
||||
PI != PE; ++PI) {
|
||||
BlockT *Pred = *PI;
|
||||
if (contains(Pred)) {
|
||||
Exitings.push_back(Pred);
|
||||
continue;
|
||||
}
|
||||
|
||||
CoverAll = false;
|
||||
}
|
||||
|
||||
return CoverAll;
|
||||
}
|
||||
|
||||
template <class Tr>
|
||||
typename RegionBase<Tr>::BlockT *RegionBase<Tr>::getExitingBlock() const {
|
||||
BlockT *exit = getExit();
|
||||
|
Loading…
Reference in New Issue
Block a user