DebugInfo: comment/inlining based on feedback from Eric & Adrian

llvm-svn: 188834
This commit is contained in:
David Blaikie 2013-08-20 21:49:21 +00:00
parent bcbc89cf0b
commit ce76304627
2 changed files with 16 additions and 18 deletions

View File

@ -946,9 +946,18 @@ void CGDebugInfo::CollectRecordFields(const RecordDecl *record,
// the corresponding declarations in the source program.
for (RecordDecl::decl_iterator I = record->decls_begin(),
E = record->decls_end(); I != E; ++I)
if (const VarDecl *V = dyn_cast<VarDecl>(*I))
elements.push_back(getOrCreateStaticDataMemberDeclaration(V, RecordTy));
else if (FieldDecl *field = dyn_cast<FieldDecl>(*I)) {
if (const VarDecl *V = dyn_cast<VarDecl>(*I)) {
// Reuse the existing static member declaration if one exists
llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator MI =
StaticDataMemberCache.find(V->getCanonicalDecl());
if (MI != StaticDataMemberCache.end()) {
assert(MI->second &&
"Static data member declaration should still exist");
elements.push_back(
llvm::DIDerivedType(cast<llvm::MDNode>(MI->second)));
} else
elements.push_back(CreateRecordStaticField(V, RecordTy));
} else if (FieldDecl *field = dyn_cast<FieldDecl>(*I)) {
CollectRecordNormalField(field, layout.getFieldOffset(fieldNo),
tunit, elements, RecordTy);
@ -1123,6 +1132,7 @@ CollectCXXMemberFunctions(const CXXRecordDecl *RD, llvm::DIFile Unit,
continue;
if (const CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
// Reuse the existing member function declaration if it exists
llvm::DenseMap<const FunctionDecl *, llvm::WeakVH>::iterator MI =
SPCache.find(Method->getCanonicalDecl());
if (MI == SPCache.end())
@ -3067,6 +3077,9 @@ CGDebugInfo::getOrCreateStaticDataMemberDeclarationOrNull(const VarDecl *D) {
assert(MI->second && "Static data member declaration should still exist");
return llvm::DIDerivedType(cast<llvm::MDNode>(MI->second));
}
// If the member wasn't found in the cache, lazily construct and add it to the
// type (used when a limited form of the type is emitted).
llvm::DICompositeType Ctxt(
getContextDescriptor(cast<Decl>(D->getDeclContext())));
llvm::DIDerivedType T = CreateRecordStaticField(D, Ctxt);
@ -3074,18 +3087,6 @@ CGDebugInfo::getOrCreateStaticDataMemberDeclarationOrNull(const VarDecl *D) {
return T;
}
llvm::DIDerivedType
CGDebugInfo::getOrCreateStaticDataMemberDeclaration(const VarDecl *D,
llvm::DICompositeType Ctxt) {
llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator MI =
StaticDataMemberCache.find(D->getCanonicalDecl());
if (MI != StaticDataMemberCache.end()) {
assert(MI->second && "Static data member declaration should still exist");
return llvm::DIDerivedType(cast<llvm::MDNode>(MI->second));
}
return CreateRecordStaticField(D, Ctxt);
}
/// EmitGlobalVariable - Emit information about a global variable.
void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
const VarDecl *D) {

View File

@ -359,9 +359,6 @@ private:
/// declaration for the given out-of-class definition.
llvm::DIDerivedType
getOrCreateStaticDataMemberDeclarationOrNull(const VarDecl *D);
llvm::DIDerivedType
getOrCreateStaticDataMemberDeclaration(const VarDecl *D,
llvm::DICompositeType Ctxt);
/// getFunctionName - Get function name for the given FunctionDecl. If the
/// name is constructred on demand (e.g. C++ destructor) then the name