diff options
author | Devang Patel <dpatel@apple.com> | 2010-04-01 17:32:01 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-04-01 17:32:01 +0000 |
commit | 1a55ef0427f242827f37e80c5c48baba756ba46d (patch) | |
tree | 38abf9f38d972f8dea8c0fcd45303f7457a58dba /llvm/lib/CodeGen | |
parent | 4c603b1c4e70061d21634578011d7dc121912d89 (diff) | |
download | bcm5719-llvm-1a55ef0427f242827f37e80c5c48baba756ba46d.tar.gz bcm5719-llvm-1a55ef0427f242827f37e80c5c48baba756ba46d.zip |
Skip instructions until new scope is seen.
llvm-svn: 100117
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 8f8c7f8bfee..45c8dadfbab 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -2146,6 +2146,8 @@ bool DwarfDebug::extractScopeInformation() { DenseMap<const MachineInstr *, unsigned> MIIndexMap; unsigned MIIndex = 0; + MDNode *PrevScope = NULL; + MDNode *PrevInlinedAt = NULL; // Scan each instruction and create scopes. First build working set of scopes. for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); I != E; ++I) { @@ -2159,17 +2161,23 @@ bool DwarfDebug::extractScopeInformation() { if (DL.isUnknown()) continue; DILocation DLT = MF->getDILocation(DL); DIScope DLTScope = DLT.getScope(); - if (!DLTScope.getNode()) continue; + MDNode *NewScope = DLTScope.getNode(); + if (!NewScope) continue; // There is no need to create another DIE for compile unit. For all // other scopes, create one DbgScope now. This will be translated // into a scope DIE at the end. if (DLTScope.isCompileUnit()) continue; - createDbgScope(DLTScope.getNode(), DLT.getOrigLocation().getNode()); + MDNode *NewInlinedAt = DLT.getOrigLocation().getNode(); + if (NewScope == PrevScope && NewInlinedAt == PrevInlinedAt) continue; + createDbgScope(NewScope, NewInlinedAt); + PrevScope = NewScope; + PrevInlinedAt = NewInlinedAt; } } - // Build scope hierarchy using working set of scopes. + PrevScope = NULL; + PrevInlinedAt = NULL; for (MachineFunction::const_iterator I = MF->begin(), E = MF->end(); I != E; ++I) { for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end(); @@ -2181,14 +2189,18 @@ bool DwarfDebug::extractScopeInformation() { if (DL.isUnknown()) continue; DILocation DLT = MF->getDILocation(DL); DIScope DLTScope = DLT.getScope(); - if (!DLTScope.getNode()) continue; + MDNode *NewScope = DLTScope.getNode(); + if (!NewScope) continue; // There is no need to create another DIE for compile unit. For all // other scopes, create one DbgScope now. This will be translated // into a scope DIE at the end. if (DLTScope.isCompileUnit()) continue; - DbgScope *Scope = getUpdatedDbgScope(DLTScope.getNode(), MInsn, - DLT.getOrigLocation().getNode()); + MDNode *NewInlinedAt = DLT.getOrigLocation().getNode(); + if (NewScope == PrevScope && NewInlinedAt == PrevInlinedAt) continue; + DbgScope *Scope = getUpdatedDbgScope(NewScope, MInsn, NewInlinedAt); Scope->setLastInsn(MInsn); + PrevScope = NewScope; + PrevInlinedAt = NewInlinedAt; } } |