Move the bookkeeping of the debug scopes back to the place where it

belonged. The variable declaration stuff wasn't happy with it where it
was. Sorry that the testcase is so big. Bugpoint wasn't able to reduce it
successfully.

llvm-svn: 71714
This commit is contained in:
Bill Wendling 2009-05-13 20:33:33 +00:00
parent bbbb02d463
commit 1d601cdaf4
2 changed files with 3276 additions and 20 deletions

View File

@ -1286,9 +1286,9 @@ class DwarfDebug : public Dwarf {
/// DbgScopeMap - Tracks the scopes in the current function.
DenseMap<GlobalVariable *, DbgScope *> DbgScopeMap;
/// DbgConcreteScopeMap - Tracks inlined scopes in the current function.
/// DbgInlinedScopeMap - Tracks inlined scopes in the current function.
DenseMap<GlobalVariable *,
SmallVector<DbgConcreteScope *, 8> > DbgConcreteScopeMap;
SmallVector<DbgScope *, 8> > DbgInlinedScopeMap;
/// InlineInfo - Keep track of inlined functions and their location. This
/// information is used to populate debug_inlined section.
@ -3434,7 +3434,7 @@ public:
if (FunctionDbgScope) {
delete FunctionDbgScope;
DbgScopeMap.clear();
DbgConcreteScopeMap.clear();
DbgInlinedScopeMap.clear();
InlinedVariableScopes.clear();
FunctionDbgScope = NULL;
LexicalScopeStack.clear();
@ -3619,6 +3619,15 @@ public:
// could be more elegant.
AddUInt(SPDie, DW_AT_inline, 0, DW_INL_declared_not_inlined);
// Keep track of the scope that's inlined into this function.
DenseMap<GlobalVariable *, SmallVector<DbgScope *, 8> >::iterator
SI = DbgInlinedScopeMap.find(GV);
if (SI == DbgInlinedScopeMap.end())
DbgInlinedScopeMap[GV].push_back(Scope);
else
SI->second.push_back(Scope);
AbstractInstanceRootMap[GV] = Scope;
AbstractInstanceRootList.push_back(Scope);
}
@ -3641,15 +3650,6 @@ public:
LexicalScopeStack.back()->AddConcreteInst(ConcreteScope);
// Keep track of the scope that's inlined into this function.
DenseMap<GlobalVariable *, SmallVector<DbgConcreteScope *, 8> >::iterator
SI = DbgConcreteScopeMap.find(GV);
if (SI == DbgConcreteScopeMap.end())
DbgConcreteScopeMap[GV].push_back(ConcreteScope);
else
SI->second.push_back(ConcreteScope);
// Track the start label for this inlined function.
DenseMap<GlobalVariable *, SmallVector<unsigned, 4> >::iterator
I = InlineInfo.find(GV);
@ -3674,19 +3674,19 @@ public:
DebugTimer->startTimer();
GlobalVariable *GV = SP.getGV();
DenseMap<GlobalVariable *, SmallVector<DbgConcreteScope *, 8> >::iterator
I = DbgConcreteScopeMap.find(GV);
DenseMap<GlobalVariable *, SmallVector<DbgScope *, 8> >::iterator
I = DbgInlinedScopeMap.find(GV);
if (I == DbgConcreteScopeMap.end()) {
if (I == DbgInlinedScopeMap.end()) {
if (TimePassesIsEnabled)
DebugTimer->stopTimer();
return 0;
}
SmallVector<DbgConcreteScope *, 8> &Scopes = I->second;
SmallVector<DbgScope *, 8> &Scopes = I->second;
assert(!Scopes.empty() && "We should have at least one debug scope!");
DbgConcreteScope *Scope = Scopes.back(); Scopes.pop_back();
DbgScope *Scope = Scopes.back(); Scopes.pop_back();
unsigned ID = MMI->NextLabelID();
MMI->RecordUsedDbgLabel(ID);
Scope->setEndLabelID(ID);
@ -3714,9 +3714,9 @@ public:
return;
}
DenseMap<GlobalVariable *, SmallVector<DbgConcreteScope *, 8> >::iterator
I = DbgConcreteScopeMap.find(SP.getGV());
if (I != DbgConcreteScopeMap.end())
DenseMap<GlobalVariable *, SmallVector<DbgScope *, 8> >::iterator
I = DbgInlinedScopeMap.find(SP.getGV());
if (I != DbgInlinedScopeMap.end())
InlinedVariableScopes[DeclareMI] = I->second.back();
if (TimePassesIsEnabled)

File diff suppressed because one or more lines are too long