<div dir="ltr"><br><div>This is a pre-step for cleaning up the DIE construction in CompileUnit.</div><div><br></div><div>Manman</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Oct 18, 2013 at 2:49 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">On Fri, Oct 18, 2013 at 2:14 PM, Manman Ren <span dir="ltr"><<a href="mailto:manman.ren@gmail.com" target="_blank">manman.ren@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: mren<br>
Date: Fri Oct 18 16:14:19 2013<br>
New Revision: 193002<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=193002&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=193002&view=rev</a><br>
Log:<br>
Debug Info: add a newly-created DIE to a parent in the same function.<br></blockquote><div><br></div></div><div>Looks OK, but it's a strange change to make in isolation (ie: it's not a code cleanup/improvement). I assume this is in preparation for the cross-CU DIE sharing, in which case, I'd still like to see test coverage for these changes when the cross-CU patch is committed. (ie: within the next few days, I expect to cause test failures if I revert this patch - if that won't be true fairly soon, I'd prefer to revert this patch until that is true)</div>
<div><div class="h5">
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
With this commit, all DIEs created in CompileUnit will be added to parents<br>
inside the same function. Also make getOrCreateTemplateType|Value functions<br>
private.<br>
<br>
No functionality change.<br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=193002&r1=193001&r2=193002&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=193002&r1=193001&r2=193002&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Fri Oct 18 16:14:19 2013<br>
@@ -782,11 +782,11 @@ void CompileUnit::addTemplateParams(DIE<br>
   for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {<br>
     DIDescriptor Element = TParams.getElement(i);<br>
     if (Element.isTemplateTypeParameter())<br>
-      Buffer.addChild(getOrCreateTemplateTypeParameterDIE(<br>
-                        DITemplateTypeParameter(Element)));<br>
+      getOrCreateTemplateTypeParameterDIE(<br>
+                        DITemplateTypeParameter(Element), Buffer);<br>
     else if (Element.isTemplateValueParameter())<br>
-      Buffer.addChild(getOrCreateTemplateValueParameterDIE(<br>
-                        DITemplateValueParameter(Element)));<br>
+      getOrCreateTemplateValueParameterDIE(<br>
+                        DITemplateValueParameter(Element), Buffer);<br>
   }<br>
 }<br>
<br>
@@ -1084,10 +1084,8 @@ void CompileUnit::constructTypeDIE(DIE &<br>
     for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {<br>
       DIE *ElemDie = NULL;<br>
       DIDescriptor Enum(Elements.getElement(i));<br>
-      if (Enum.isEnumerator()) {<br>
-        ElemDie = constructEnumTypeDIE(DIEnumerator(Enum));<br>
-        Buffer.addChild(ElemDie);<br>
-      }<br>
+      if (Enum.isEnumerator())<br>
+        ElemDie = constructEnumTypeDIE(DIEnumerator(Enum), Buffer);<br>
     }<br>
     DIType DTy = resolve(CTy.getTypeDerivedFrom());<br>
     if (DTy) {<br>
@@ -1161,8 +1159,7 @@ void CompileUnit::constructTypeDIE(DIE &<br>
         } else if (DDTy.isStaticMember()) {<br>
           ElemDie = getOrCreateStaticMemberDIE(DDTy);<br>
         } else {<br>
-          ElemDie = createMemberDIE(DDTy);<br>
-          Buffer.addChild(ElemDie);<br>
+          ElemDie = createMemberDIE(DDTy, Buffer);<br>
         }<br>
       } else if (Element.isObjCProperty()) {<br>
         DIObjCProperty Property(Element);<br>
@@ -1267,12 +1264,14 @@ void CompileUnit::constructTypeDIE(DIE &<br>
 /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE<br>
 /// for the given DITemplateTypeParameter.<br>
 DIE *<br>
-CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {<br>
+CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP,<br>
+                                                 DIE &Buffer) {<br>
   DIE *ParamDIE = getDIE(TP);<br>
   if (ParamDIE)<br>
     return ParamDIE;<br>
<br>
   ParamDIE = new DIE(dwarf::DW_TAG_template_type_parameter);<br>
+  Buffer.addChild(ParamDIE);<br>
   // Add the type if it exists, it could be void and therefore no type.<br>
   if (TP.getType())<br>
     addType(ParamDIE, resolve(TP.getType()));<br>
@@ -1284,12 +1283,14 @@ CompileUnit::getOrCreateTemplateTypePara<br>
 /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE<br>
 /// for the given DITemplateValueParameter.<br>
 DIE *<br>
-CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter VP) {<br>
+CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter VP,<br>
+                                                  DIE &Buffer) {<br>
   DIE *ParamDIE = getDIE(VP);<br>
   if (ParamDIE)<br>
     return ParamDIE;<br>
<br>
   ParamDIE = new DIE(VP.getTag());<br>
+  Buffer.addChild(ParamDIE);<br>
<br>
   // Add the type if there is one, template template and template parameter<br>
   // packs will not have a type.<br>
@@ -1681,8 +1682,9 @@ void CompileUnit::constructArrayTypeDIE(<br>
 }<br>
<br>
 /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.<br>
-DIE *CompileUnit::constructEnumTypeDIE(DIEnumerator ETy) {<br>
+DIE *CompileUnit::constructEnumTypeDIE(DIEnumerator ETy, DIE &Buffer) {<br>
   DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);<br>
+  Buffer.addChild(Enumerator);<br>
   StringRef Name = ETy.getName();<br>
   addString(Enumerator, dwarf::DW_AT_name, Name);<br>
   int64_t Value = ETy.getEnumValue();<br>
@@ -1779,8 +1781,9 @@ DIE *CompileUnit::constructVariableDIE(D<br>
 }<br>
<br>
 /// createMemberDIE - Create new member DIE.<br>
-DIE *CompileUnit::createMemberDIE(DIDerivedType DT) {<br>
+DIE *CompileUnit::createMemberDIE(DIDerivedType DT, DIE &Buffer) {<br>
   DIE *MemberDie = new DIE(DT.getTag());<br>
+  Buffer.addChild(MemberDie);<br>
   StringRef Name = DT.getName();<br>
   if (!Name.empty())<br>
     addString(MemberDie, dwarf::DW_AT_name, Name);<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h?rev=193002&r1=193001&r2=193002&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h?rev=193002&r1=193001&r2=193002&view=diff</a><br>


==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h Fri Oct 18 16:14:19 2013<br>
@@ -290,14 +290,6 @@ public:<br>
   /// given DIType.<br>
   DIE *getOrCreateTypeDIE(const MDNode *N);<br>
<br>
-  /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE<br>
-  /// for the given DITemplateTypeParameter.<br>
-  DIE *getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP);<br>
-<br>
-  /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create<br>
-  /// new DIE for the given DITemplateValueParameter.<br>
-  DIE *getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TVP);<br>
-<br>
   /// getOrCreateContextDIE - Get context owner's DIE.<br>
   DIE *getOrCreateContextDIE(DIScope Context);<br>
<br>
@@ -328,10 +320,20 @@ private:<br>
   void constructArrayTypeDIE(DIE &Buffer, DICompositeType *CTy);<br>
<br>
   /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.<br>
-  DIE *constructEnumTypeDIE(DIEnumerator ETy);<br>
+  DIE *constructEnumTypeDIE(DIEnumerator ETy, DIE &Buffer);<br>
<br>
   /// createMemberDIE - Create new member DIE.<br>
-  DIE *createMemberDIE(DIDerivedType DT);<br>
+  DIE *createMemberDIE(DIDerivedType DT, DIE &Buffer);<br>
+<br>
+  /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE<br>
+  /// for the given DITemplateTypeParameter.<br>
+  DIE *getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP,<br>
+                                           DIE &Buffer);<br>
+<br>
+  /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create<br>
+  /// new DIE for the given DITemplateValueParameter.<br>
+  DIE *getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TVP,<br>
+                                            DIE &Buffer);<br>
<br>
   /// getOrCreateStaticMemberDIE - Create new static data member DIE.<br>
   DIE *getOrCreateStaticMemberDIE(DIDerivedType DT);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div>