summaryrefslogtreecommitdiffstats
path: root/lib/Analysis/MemRegion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Analysis/MemRegion.cpp')
-rw-r--r--lib/Analysis/MemRegion.cpp47
1 files changed, 21 insertions, 26 deletions
diff --git a/lib/Analysis/MemRegion.cpp b/lib/Analysis/MemRegion.cpp
index 9bd93cd..c8e0275 100644
--- a/lib/Analysis/MemRegion.cpp
+++ b/lib/Analysis/MemRegion.cpp
@@ -313,45 +313,40 @@ AllocaRegion* MemRegionManager::getAllocaRegion(const Expr* E, unsigned cnt) {
return getRegion<AllocaRegion>(E, cnt);
}
-bool MemRegionManager::hasStackStorage(const MemRegion* R) {
- // Only subregions can have stack storage.
- const SubRegion* SR = dyn_cast<SubRegion>(R);
- if (!SR)
- return false;
-
- MemSpaceRegion* S = getStackRegion();
+const MemSpaceRegion *MemRegion::getMemorySpace() const {
+ const MemRegion *R = this;
+ const SubRegion* SR = dyn_cast<SubRegion>(this);
while (SR) {
R = SR->getSuperRegion();
- if (R == S)
- return true;
-
- SR = dyn_cast<SubRegion>(R);
+ SR = dyn_cast<SubRegion>(R);
}
-
- return false;
+
+ return dyn_cast<MemSpaceRegion>(R);
}
-bool MemRegionManager::hasHeapStorage(const MemRegion* R) {
- // Only subregions can have stack storage.
- const SubRegion* SR = dyn_cast<SubRegion>(R);
+bool MemRegion::hasStackStorage() const {
+ if (const MemSpaceRegion *MS = getMemorySpace())
+ return MS == getMemRegionManager()->getStackRegion();
- if (!SR)
- return false;
+ return false;
+}
- MemSpaceRegion* H = getHeapRegion();
+bool MemRegion::hasHeapStorage() const {
+ if (const MemSpaceRegion *MS = getMemorySpace())
+ return MS == getMemRegionManager()->getHeapRegion();
- while (SR) {
- R = SR->getSuperRegion();
- if (R == H)
- return true;
+ return false;
+}
- SR = dyn_cast<SubRegion>(R);
+bool MemRegion::hasHeapOrStackStorage() const {
+ if (const MemSpaceRegion *MS = getMemorySpace()) {
+ MemRegionManager *Mgr = getMemRegionManager();
+ return MS == Mgr->getHeapRegion() || MS == Mgr->getStackRegion();
}
-
return false;
-}
+}
//===----------------------------------------------------------------------===//
// View handling.
OpenPOWER on IntegriCloud