forked from OSchip/llvm-project
For inline-based inter-procedural analysis, we will have multiple stack space regions. Use a dense map to store them.
llvm-svn: 96472
This commit is contained in:
parent
86bab2cddd
commit
daf4616455
|
@ -798,11 +798,10 @@ class MemRegionManager {
|
|||
|
||||
GlobalsSpaceRegion *globals;
|
||||
|
||||
const StackFrameContext *cachedStackLocalsFrame;
|
||||
StackLocalsSpaceRegion *cachedStackLocalsRegion;
|
||||
|
||||
const StackFrameContext *cachedStackArgumentsFrame;
|
||||
StackArgumentsSpaceRegion *cachedStackArgumentsRegion;
|
||||
llvm::DenseMap<const StackFrameContext *, StackLocalsSpaceRegion *>
|
||||
StackLocalsSpaceRegions;
|
||||
llvm::DenseMap<const StackFrameContext *, StackArgumentsSpaceRegion *>
|
||||
StackArgumentsSpaceRegions;
|
||||
|
||||
HeapSpaceRegion *heap;
|
||||
UnknownSpaceRegion *unknown;
|
||||
|
@ -810,10 +809,7 @@ class MemRegionManager {
|
|||
|
||||
public:
|
||||
MemRegionManager(ASTContext &c, llvm::BumpPtrAllocator& a)
|
||||
: C(c), A(a), globals(0),
|
||||
cachedStackLocalsFrame(0), cachedStackLocalsRegion(0),
|
||||
cachedStackArgumentsFrame(0), cachedStackArgumentsRegion(0),
|
||||
heap(0), unknown(0), code(0) {}
|
||||
: C(c), A(a), globals(0), heap(0), unknown(0), code(0) {}
|
||||
|
||||
~MemRegionManager();
|
||||
|
||||
|
|
|
@ -419,20 +419,27 @@ const REG *MemRegionManager::LazyAllocate(REG*& region, ARG a) {
|
|||
const StackLocalsSpaceRegion*
|
||||
MemRegionManager::getStackLocalsRegion(const StackFrameContext *STC) {
|
||||
assert(STC);
|
||||
if (STC == cachedStackLocalsFrame)
|
||||
return cachedStackLocalsRegion;
|
||||
cachedStackLocalsFrame = STC;
|
||||
return LazyAllocate(cachedStackLocalsRegion, STC);
|
||||
StackLocalsSpaceRegion *&R = StackLocalsSpaceRegions[STC];
|
||||
|
||||
if (R)
|
||||
return R;
|
||||
|
||||
R = A.Allocate<StackLocalsSpaceRegion>();
|
||||
new (R) StackLocalsSpaceRegion(this, STC);
|
||||
return R;
|
||||
}
|
||||
|
||||
const StackArgumentsSpaceRegion *
|
||||
MemRegionManager::getStackArgumentsRegion(const StackFrameContext *STC) {
|
||||
assert(STC);
|
||||
if (STC == cachedStackArgumentsFrame)
|
||||
return cachedStackArgumentsRegion;
|
||||
|
||||
cachedStackArgumentsFrame = STC;
|
||||
return LazyAllocate(cachedStackArgumentsRegion, STC);
|
||||
StackArgumentsSpaceRegion *&R = StackArgumentsSpaceRegions[STC];
|
||||
|
||||
if (R)
|
||||
return R;
|
||||
|
||||
R = A.Allocate<StackArgumentsSpaceRegion>();
|
||||
new (R) StackArgumentsSpaceRegion(this, STC);
|
||||
return R;
|
||||
}
|
||||
|
||||
const GlobalsSpaceRegion *MemRegionManager::getGlobalsRegion() {
|
||||
|
|
Loading…
Reference in New Issue