mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
Debug Info: Move isSubprogramContext from DebugInfo to DwarfDebug.
This helper function needs the type identifier map when we switch DIType::getContext to return DIScopeRef instead of DIScope. Since isSubprogramContext is used by DwarfDebug only, We move it to DwarfDebug to have easy access to the map. llvm-svn: 190325
This commit is contained in:
parent
f8b79cb122
commit
6d25d90435
@ -729,10 +729,6 @@ namespace llvm {
|
||||
/// getDICompositeType - Find underlying composite type.
|
||||
DICompositeType getDICompositeType(DIType T);
|
||||
|
||||
/// isSubprogramContext - Return true if Context is either a subprogram
|
||||
/// or another context nested inside a subprogram.
|
||||
bool isSubprogramContext(const MDNode *Context);
|
||||
|
||||
/// getOrInsertFnSpecificMDNode - Return a NameMDNode that is suitable
|
||||
/// to hold function specific information.
|
||||
NamedMDNode *getOrInsertFnSpecificMDNode(Module &M, DISubprogram SP);
|
||||
|
@ -1435,7 +1435,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
||||
// Do not create specification DIE if context is either compile unit
|
||||
// or a subprogram.
|
||||
if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
|
||||
!GVContext.isFile() && !isSubprogramContext(GVContext)) {
|
||||
!GVContext.isFile() && !DD->isSubprogramContext(GVContext)) {
|
||||
// Create specification DIE.
|
||||
VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
|
||||
addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
|
||||
|
@ -332,6 +332,19 @@ static void addSubprogramNames(CompileUnit *TheCU, DISubprogram SP,
|
||||
}
|
||||
}
|
||||
|
||||
/// isSubprogramContext - Return true if Context is either a subprogram
|
||||
/// or another context nested inside a subprogram.
|
||||
bool DwarfDebug::isSubprogramContext(const MDNode *Context) {
|
||||
if (!Context)
|
||||
return false;
|
||||
DIDescriptor D(Context);
|
||||
if (D.isSubprogram())
|
||||
return true;
|
||||
if (D.isType())
|
||||
return isSubprogramContext(DIType(Context).getContext());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Find DIE for the given subprogram and attach appropriate DW_AT_low_pc
|
||||
// and DW_AT_high_pc attributes. If there are global variables in this
|
||||
// scope then create and insert DIEs for these variables.
|
||||
|
@ -686,6 +686,10 @@ public:
|
||||
/// Find the MDNode for the given scope reference.
|
||||
DIScope resolve(DIScopeRef SRef) const;
|
||||
|
||||
/// isSubprogramContext - Return true if Context is either a subprogram
|
||||
/// or another context nested inside a subprogram.
|
||||
bool isSubprogramContext(const MDNode *Context);
|
||||
|
||||
};
|
||||
} // End of namespace llvm
|
||||
|
||||
|
@ -942,19 +942,6 @@ DICompositeType llvm::getDICompositeType(DIType T) {
|
||||
return DICompositeType();
|
||||
}
|
||||
|
||||
/// isSubprogramContext - Return true if Context is either a subprogram
|
||||
/// or another context nested inside a subprogram.
|
||||
bool llvm::isSubprogramContext(const MDNode *Context) {
|
||||
if (!Context)
|
||||
return false;
|
||||
DIDescriptor D(Context);
|
||||
if (D.isSubprogram())
|
||||
return true;
|
||||
if (D.isType())
|
||||
return isSubprogramContext(DIType(Context).getContext());
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Update DITypeIdentifierMap by going through retained types of each CU.
|
||||
DITypeIdentifierMap llvm::generateDITypeIdentifierMap(
|
||||
const NamedMDNode *CU_Nodes) {
|
||||
|
Loading…
Reference in New Issue
Block a user