Sink DwarfDebug::createScopeChildrenDIE down into DwarfCompileUnit.
authorDavid Blaikie <dblaikie@gmail.com>
Thu, 9 Oct 2014 18:24:28 +0000 (18:24 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Thu, 9 Oct 2014 18:24:28 +0000 (18:24 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219422 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 26cca50..52da4e7 100644 (file)
@@ -353,7 +353,7 @@ void DwarfCompileUnit::constructScopeDIE(
     if (!ScopeDIE)
       return;
     // We create children when the scope DIE is not null.
-    DD->createScopeChildrenDIE(*this, Scope, Children);
+    createScopeChildrenDIE(Scope, Children);
   } else {
     // Early exit when we know the scope DIE is going to be null.
     if (DD->isLexicalScopeDIENull(Scope))
@@ -363,7 +363,7 @@ void DwarfCompileUnit::constructScopeDIE(
 
     // We create children here when we know the scope DIE is not going to be
     // null and the children will be added to the scope DIE.
-    DD->createScopeChildrenDIE(*this, Scope, Children, &ChildScopeCount);
+    createScopeChildrenDIE(Scope, Children, &ChildScopeCount);
 
     // There is no need to emit empty lexical block DIE.
     for (const auto &E : DD->findImportedEntitiesForScope(DS))
@@ -550,4 +550,23 @@ std::unique_ptr<DIE> DwarfCompileUnit::constructVariableDIE(
   return Var;
 }
 
+DIE *DwarfCompileUnit::createScopeChildrenDIE(
+    LexicalScope *Scope, SmallVectorImpl<std::unique_ptr<DIE>> &Children,
+    unsigned *ChildScopeCount) {
+  DIE *ObjectPointer = nullptr;
+
+  for (DbgVariable *DV : DD->getScopeVariables().lookup(Scope))
+    Children.push_back(constructVariableDIE(*DV, *Scope, ObjectPointer));
+
+  unsigned ChildCountWithoutScopes = Children.size();
+
+  for (LexicalScope *LS : Scope->getChildren())
+    constructScopeDIE(LS, Children);
+
+  if (ChildScopeCount)
+    *ChildScopeCount = Children.size() - ChildCountWithoutScopes;
+
+  return ObjectPointer;
+}
+
 } // end llvm namespace
index 9ad503c..b9a8a5e 100644 (file)
@@ -110,6 +110,11 @@ public:
   std::unique_ptr<DIE> constructVariableDIE(DbgVariable &DV,
                                             const LexicalScope &Scope,
                                             DIE *&ObjectPointer);
+
+  /// A helper function to create children of a Scope DIE.
+  DIE *createScopeChildrenDIE(LexicalScope *Scope,
+                              SmallVectorImpl<std::unique_ptr<DIE>> &Children,
+                              unsigned *ChildScopeCount = nullptr);
 };
 
 } // end llvm namespace
index 75206d2..2b71f84 100644 (file)
@@ -330,31 +330,11 @@ bool DwarfDebug::isLexicalScopeDIENull(LexicalScope *Scope) {
   return !getLabelAfterInsn(Ranges.front().second);
 }
 
-DIE *DwarfDebug::createScopeChildrenDIE(
-    DwarfCompileUnit &TheCU, LexicalScope *Scope,
-    SmallVectorImpl<std::unique_ptr<DIE>> &Children,
-    unsigned *ChildScopeCount) {
-  DIE *ObjectPointer = nullptr;
-
-  for (DbgVariable *DV : ScopeVariables.lookup(Scope))
-    Children.push_back(TheCU.constructVariableDIE(*DV, *Scope, ObjectPointer));
-
-  unsigned ChildCountWithoutScopes = Children.size();
-
-  for (LexicalScope *LS : Scope->getChildren())
-    TheCU.constructScopeDIE(LS, Children);
-
-  if (ChildScopeCount)
-    *ChildScopeCount = Children.size() - ChildCountWithoutScopes;
-
-  return ObjectPointer;
-}
-
 DIE *DwarfDebug::createAndAddScopeChildren(DwarfCompileUnit &TheCU,
                                            LexicalScope *Scope, DIE &ScopeDIE) {
   // We create children when the scope DIE is not null.
   SmallVector<std::unique_ptr<DIE>, 8> Children;
-  DIE *ObjectPointer = createScopeChildrenDIE(TheCU, Scope, Children);
+  DIE *ObjectPointer = TheCU.createScopeChildrenDIE(Scope, Children);
 
   // Add children
   for (auto &I : Children)
@@ -1483,6 +1463,8 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {
     assert(ScopeVariables.empty());
     assert(CurrentFnArguments.empty());
     assert(DbgValues.empty());
+    // FIXME: This wouldn't be true in LTO with a -g (with inlining) CU followed
+    // by a -gmlt CU. Add a test and remove this assertion.
     assert(AbstractVariables.empty());
     LabelsBeforeInsn.clear();
     LabelsAfterInsn.clear();
index d08334d..099b136 100644 (file)
@@ -675,14 +675,11 @@ public:
 
   // FIXME: Sink these functions down into DwarfFile/Dwarf*Unit.
 
-  /// A helper function to create children of a Scope DIE.
-  DIE *createScopeChildrenDIE(DwarfCompileUnit &TheCU, LexicalScope *Scope,
-                              SmallVectorImpl<std::unique_ptr<DIE>> &Children,
-                              unsigned *ChildScopeCount = nullptr);
-
   DenseMap<const MDNode *, DIE *> &getAbstractSPDies() {
     return AbstractSPDies;
   }
+
+  ScopeVariablesMap &getScopeVariables() { return ScopeVariables; }
 };
 } // End of namespace llvm