aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Grosser <grosser@fim.uni-passau.de>2010-10-13 11:02:44 +0000
committerTobias Grosser <grosser@fim.uni-passau.de>2010-10-13 11:02:44 +0000
commitb227930cd6850e4c47358e671dbe2cdacb430def (patch)
tree7bdda5b853ae63af2f8ac7bb946582f344e785ca
parentede42b0a22fdb57eb70d0d8c780dc5d3283397c0 (diff)
downloadexternal_llvm-b227930cd6850e4c47358e671dbe2cdacb430def.zip
external_llvm-b227930cd6850e4c47358e671dbe2cdacb430def.tar.gz
external_llvm-b227930cd6850e4c47358e671dbe2cdacb430def.tar.bz2
Add Region::isTopLevelRegion().
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116402 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/RegionInfo.h5
-rw-r--r--lib/Analysis/RegionInfo.cpp6
2 files changed, 8 insertions, 3 deletions
diff --git a/include/llvm/Analysis/RegionInfo.h b/include/llvm/Analysis/RegionInfo.h
index 4e7d303..b6ac1b3 100644
--- a/include/llvm/Analysis/RegionInfo.h
+++ b/include/llvm/Analysis/RegionInfo.h
@@ -292,6 +292,11 @@ public:
/// @return The depth of the region.
unsigned getDepth() const;
+ /// @brief Check if a Region is the TopLevel region.
+ ///
+ /// The toplevel region represents the whole function.
+ bool isTopLevelRegion() const { return exit == NULL; };
+
/// @brief Return a new (non canonical) region, that is obtained by joining
/// this region with its predecessors.
///
diff --git a/lib/Analysis/RegionInfo.cpp b/lib/Analysis/RegionInfo.cpp
index 9d84f55..d26135c 100644
--- a/lib/Analysis/RegionInfo.cpp
+++ b/lib/Analysis/RegionInfo.cpp
@@ -140,8 +140,7 @@ bool Region::isSimple() const {
BasicBlock *entry = getEntry(), *exit = getExit();
- // TopLevelRegion
- if (!exit)
+ if (isTopLevelRegion())
return false;
for (pred_iterator PI = pred_begin(entry), PE = pred_end(entry); PI != PE;
@@ -810,9 +809,10 @@ RegionInfo::getCommonRegion(SmallVectorImpl<BasicBlock*> &BBs) const {
void RegionInfo::splitBlock(BasicBlock* NewBB, BasicBlock *OldBB)
{
Region *R = getRegionFor(OldBB);
+
setRegionFor(NewBB, R);
- while (R->getEntry() == OldBB && R->getParent()) {
+ while (R->getEntry() == OldBB && !R->isTopLevelRegion()) {
R->replaceEntry(NewBB);
R = R->getParent();
}