From 133b09953c40b9cceb559e765bca461c38bb4c51 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Fri, 15 Jul 2011 21:25:44 +0000 Subject: Use DebugLoc directly to map inlined functions' instructions to respective lexical scope. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135302 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'lib/CodeGen/AsmPrinter/DwarfDebug.cpp') diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index c5efd99969..125e1e86b1 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -1593,6 +1593,7 @@ DbgScope *DwarfDebug::getOrCreateDbgScope(DebugLoc DL) { WScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt); DbgScopeMap.insert(std::make_pair(InlinedAt, WScope)); + InlinedDbgScopeMap[DebugLoc::getFromDILocation(InlinedAt)] = WScope; DbgScope *Parent = getOrCreateDbgScope(DebugLoc::getFromDILocation(InlinedAt)); WScope->setParent(Parent); @@ -2043,6 +2044,7 @@ void DwarfDebug::endFunction(const MachineFunction *MF) { DbgVariableToFrameIndexMap.clear(); VarToAbstractVarMap.clear(); DbgVariableToDbgInstMap.clear(); + InlinedDbgScopeMap.clear(); DeleteContainerSeconds(DbgScopeMap); UserVariables.clear(); DbgValues.clear(); @@ -2079,10 +2081,10 @@ DbgScope *DwarfDebug::findDbgScope(DebugLoc DL) { DbgScope *Scope = NULL; LLVMContext &Ctx = Asm->MF->getFunction()->getContext(); - const MDNode *N = DL.getScope(Ctx); - if (const MDNode *IA = DL.getInlinedAt(Ctx)) - N = IA; - Scope = DbgScopeMap.lookup(N); + if (MDNode *IA = DL.getInlinedAt(Ctx)) + Scope = InlinedDbgScopeMap.lookup(DebugLoc::getFromDILocation(IA)); + else + Scope = DbgScopeMap.lookup(DL.getScope(Ctx)); return Scope; } -- cgit v1.2.3-18-g5258