forked from OSchip/llvm-project
If the front end has emitted llvm.dbg.cu and other debug info anchors (clang does it now) then use them directly. This saves one scan of entire module, to collect debug info, which in turns saves few machine cycles at compile time.
llvm-svn: 130759
This commit is contained in:
parent
5066858bcd
commit
e02e58528a
|
@ -1113,11 +1113,32 @@ void DwarfDebug::beginModule(Module *M) {
|
|||
if (DisableDebugInfoPrinting)
|
||||
return;
|
||||
|
||||
bool HasDebugInfo = false;
|
||||
|
||||
// If module has named metadata anchors then use them, otherwise scan the module
|
||||
// using debug info finder to collect debug info.
|
||||
NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
|
||||
if (CU_Nodes) {
|
||||
for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
|
||||
HasDebugInfo = true;
|
||||
constructCompileUnit(CU_Nodes->getOperand(i));
|
||||
}
|
||||
if (!HasDebugInfo)
|
||||
return;
|
||||
|
||||
if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
|
||||
for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
|
||||
constructGlobalVariableDIE(NMD->getOperand(i));
|
||||
|
||||
if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
|
||||
for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
|
||||
constructSubprogramDIE(NMD->getOperand(i));
|
||||
|
||||
} else {
|
||||
|
||||
DebugInfoFinder DbgFinder;
|
||||
DbgFinder.processModule(*M);
|
||||
|
||||
bool HasDebugInfo = false;
|
||||
|
||||
// Scan all the compile-units to see if there are any marked as the main unit.
|
||||
// if not, we do not generate debug info.
|
||||
for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
|
||||
|
@ -1128,14 +1149,6 @@ void DwarfDebug::beginModule(Module *M) {
|
|||
}
|
||||
}
|
||||
|
||||
if (!HasDebugInfo) return;
|
||||
|
||||
// Tell MMI that we have debug info.
|
||||
MMI->setDebugInfoAvailability(true);
|
||||
|
||||
// Emit initial sections.
|
||||
EmitSectionLabels();
|
||||
|
||||
// Create all the compile unit DIEs.
|
||||
for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
|
||||
E = DbgFinder.compile_unit_end(); I != E; ++I)
|
||||
|
@ -1150,6 +1163,15 @@ void DwarfDebug::beginModule(Module *M) {
|
|||
for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
|
||||
E = DbgFinder.subprogram_end(); I != E; ++I)
|
||||
constructSubprogramDIE(*I);
|
||||
}
|
||||
|
||||
if (!HasDebugInfo) return;
|
||||
|
||||
// Tell MMI that we have debug info.
|
||||
MMI->setDebugInfoAvailability(true);
|
||||
|
||||
// Emit initial sections.
|
||||
EmitSectionLabels();
|
||||
|
||||
//getOrCreateTypeDIE
|
||||
if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
|
||||
|
|
Loading…
Reference in New Issue