Refactor.
authorDevang Patel <dpatel@apple.com>
Wed, 20 Jul 2011 23:00:27 +0000 (23:00 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 20 Jul 2011 23:00:27 +0000 (23:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@135633 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h

index 30d63991ea0e1e012784231bff8c4e56421a4592..696f72b8d5cad32c275b77cab3851cbcecb3f629 100644 (file)
@@ -1573,44 +1573,54 @@ void DwarfDebug::endInstruction(const MachineInstr *MI) {
   I->second = PrevLabel;
 }
 
+/// getOrCreateRegularScope - Create regular DbgScope.
+DbgScope *DwarfDebug::getOrCreateRegularScope(MDNode *Scope) {
+  DbgScope *WScope = DbgScopeMap.lookup(Scope);
+  if (WScope)
+    return WScope;
+  WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
+  DbgScopeMap.insert(std::make_pair(Scope, WScope));
+  if (DIDescriptor(Scope).isLexicalBlock()) {
+    DbgScope *Parent =
+      getOrCreateDbgScope(DebugLoc::getFromDILexicalBlock(Scope));
+    WScope->setParent(Parent);
+    Parent->addScope(WScope);
+  } else if (DIDescriptor(Scope).isSubprogram()
+             && DISubprogram(Scope).describes(Asm->MF->getFunction()))
+    CurrentFnDbgScope = WScope;
+  
+  return WScope;
+}
+
+/// getOrCreateInlinedScope - Create inlined scope. 
+DbgScope *DwarfDebug::getOrCreateInlinedScope(MDNode *Scope, MDNode *InlinedAt){
+  DbgScope *InlinedScope = DbgScopeMap.lookup(InlinedAt);
+  if (InlinedScope)
+    return InlinedScope;
+
+  InlinedScope = new DbgScope(NULL, DIDescriptor(Scope), InlinedAt);
+  DebugLoc InlinedLoc = DebugLoc::getFromDILocation(InlinedAt);
+  InlinedDbgScopeMap[InlinedLoc] = InlinedScope;
+  DbgScopeMap[InlinedAt] = InlinedScope;
+  DbgScope *Parent = getOrCreateDbgScope(InlinedLoc);
+  InlinedScope->setParent(Parent);
+  Parent->addScope(InlinedScope);
+  return InlinedScope;
+}
+
 /// getOrCreateDbgScope - Create DbgScope for the scope.
 DbgScope *DwarfDebug::getOrCreateDbgScope(DebugLoc DL) {
   LLVMContext &Ctx = Asm->MF->getFunction()->getContext();
   MDNode *Scope = NULL;
   MDNode *InlinedAt = NULL;
   DL.getScopeAndInlinedAt(Scope, InlinedAt, Ctx);
+  if (!InlinedAt) 
+    return getOrCreateRegularScope(Scope);
 
-  if (!InlinedAt) {
-    DbgScope *WScope = DbgScopeMap.lookup(Scope);
-    if (WScope)
-      return WScope;
-    WScope = new DbgScope(NULL, DIDescriptor(Scope), NULL);
-    DbgScopeMap.insert(std::make_pair(Scope, WScope));
-    if (DIDescriptor(Scope).isLexicalBlock()) {
-      DbgScope *Parent =
-        getOrCreateDbgScope(DebugLoc::getFromDILexicalBlock(Scope));
-      WScope->setParent(Parent);
-      Parent->addScope(WScope);
-    } else if (DIDescriptor(Scope).isSubprogram()
-               && DISubprogram(Scope).describes(Asm->MF->getFunction()))
-      CurrentFnDbgScope = WScope;
-
-    return WScope;
-  }
-
+  // Create an abstract scope for inlined function.
   getOrCreateAbstractScope(Scope);
-  DbgScope *WScope = DbgScopeMap.lookup(InlinedAt);
-  if (WScope)
-    return WScope;
-
-  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);
-  Parent->addScope(WScope);
-  return WScope;
+  // Create an inlined scope for inlined function.
+  return getOrCreateInlinedScope(Scope, InlinedAt);
 }
 
 /// calculateDominanceGraph - Calculate dominance graph for DbgScope
index 32006a394314ceff152011557b0111df94beb355..30ba0b3bb15dc9cedd022d4d60c131499626aad2 100644 (file)
@@ -318,7 +318,8 @@ private:
 
   /// getOrCreateDbgScope - Create DbgScope for the scope.
   DbgScope *getOrCreateDbgScope(DebugLoc DL);
-
+  DbgScope *getOrCreateRegularScope(MDNode *Scope);
+  DbgScope *getOrCreateInlinedScope(MDNode *Scope, MDNode *InlinedAt);
   DbgScope *getOrCreateAbstractScope(const MDNode *N);
 
   /// findAbstractVariable - Find abstract variable associated with Var.