<div dir="ltr">Reverted in <span style="color:rgb(33,33,33)">348898 due to a Google-internal failure still being investigated (looks like some other path to build code for ptxas without being "isNVPTX" I guess?).</span></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Dec 10, 2018 at 2:47 PM David Blaikie via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dblaikie<br>
Date: Mon Dec 10 14:44:48 2018<br>
New Revision: 348806<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=348806&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=348806&view=rev</a><br>
Log:<br>
debuginfo: Use symbol difference for CU length to simplify assembly reading/editing<br>
<br>
Mucking about simplifying a test case ( <a href="https://reviews.llvm.org/D55261" rel="noreferrer" target="_blank">https://reviews.llvm.org/D55261</a> ) I stumbled across something I've hit before - that LLVM's (GCC's does too, FWIW) assembly output includes a hardcode length for a DWARF unit in its header. Instead we could emit a label difference - making the assembly easier to read/edit (though potentially at a slight (I haven't tried to observe it) performance cost of delaying/sinking the length computation into the MC layer).<br>
<br>
Reviewers: JDevlieghere, probinson, ABataev<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D55281" rel="noreferrer" target="_blank">https://reviews.llvm.org/D55281</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp<br>
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h<br>
    llvm/trunk/test/DebugInfo/X86/sections_as_references.ll<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp?rev=348806&r1=348805&r2=348806&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp?rev=348806&r1=348805&r2=348806&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfFile.cpp Mon Dec 10 14:44:48 2018<br>
@@ -46,6 +46,8 @@ void DwarfFile::emitUnit(DwarfUnit *TheU<br>
   TheU->emitHeader(UseOffsets);<br>
<br>
   Asm->emitDwarfDIE(Die);<br>
+<br>
+  Asm->OutStreamer->EmitLabel(TheU->getEndLabel());<br>
 }<br>
<br>
 // Compute the size and offset for each DIE.<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=348806&r1=348805&r2=348806&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp?rev=348806&r1=348805&r2=348806&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.cpp Mon Dec 10 14:44:48 2018<br>
@@ -38,6 +38,7 @@<br>
 #include "llvm/Support/Casting.h"<br>
 #include "llvm/Support/CommandLine.h"<br>
 #include "llvm/Target/TargetLoweringObjectFile.h"<br>
+#include "llvm/Target/TargetMachine.h"<br>
 #include <cassert><br>
 #include <cstdint><br>
 #include <string><br>
@@ -1553,7 +1554,17 @@ DIE *DwarfUnit::getOrCreateStaticMemberD<br>
 void DwarfUnit::emitCommonHeader(bool UseOffsets, dwarf::UnitType UT) {<br>
   // Emit size of content not including length itself<br>
   Asm->OutStreamer->AddComment("Length of Unit");<br>
-  Asm->emitInt32(getHeaderSize() + getUnitDie().getSize());<br>
+  StringRef Prefix = isDwoUnit() ? "debug_info_dwo_" : "debug_info_";<br>
+  MCSymbol *BeginLabel = Asm->createTempSymbol(Prefix + "start");<br>
+  EndLabel = Asm->createTempSymbol(Prefix + "end");<br>
+<br>
+  // Use a label difference for the convenience of legible/easily modified<br>
+  // assembly - except on NVPTX where label differences aren't supported.<br>
+  if (Asm->TM.getTargetTriple().isNVPTX())<br>
+    Asm->emitInt32(getHeaderSize() + getUnitDie().getSize());<br>
+  else<br>
+    Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);<br>
+  Asm->OutStreamer->EmitLabel(BeginLabel);<br>
<br>
   Asm->OutStreamer->AddComment("DWARF version number");<br>
   unsigned Version = DD->getDwarfVersion();<br>
<br>
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h?rev=348806&r1=348805&r2=348806&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h?rev=348806&r1=348805&r2=348806&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h (original)<br>
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfUnit.h Mon Dec 10 14:44:48 2018<br>
@@ -48,6 +48,7 @@ protected:<br>
<br>
   /// Target of Dwarf emission.<br>
   AsmPrinter *Asm;<br>
+  MCSymbol *EndLabel;<br>
<br>
   // Holders for some common dwarf information.<br>
   DwarfDebug *DD;<br>
@@ -82,6 +83,7 @@ protected:<br>
 public:<br>
   // Accessors.<br>
   AsmPrinter* getAsmPrinter() const { return Asm; }<br>
+  MCSymbol *getEndLabel() const { return EndLabel; }<br>
   uint16_t getLanguage() const { return CUNode->getSourceLanguage(); }<br>
   const DICompileUnit *getCUNode() const { return CUNode; }<br>
<br>
<br>
Modified: llvm/trunk/test/DebugInfo/X86/sections_as_references.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/sections_as_references.ll?rev=348806&r1=348805&r2=348806&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/sections_as_references.ll?rev=348806&r1=348805&r2=348806&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/X86/sections_as_references.ll (original)<br>
+++ llvm/trunk/test/DebugInfo/X86/sections_as_references.ll Mon Dec 10 14:44:48 2018<br>
@@ -9,13 +9,19 @@<br>
 ; CHECK-NOT: .L<br>
<br>
 ; CHECK:      .section .debug_info<br>
-; CHECK-NOT:  .L<br>
-; CHECK:      .short 2             # DWARF version number<br>
+; CHECK-NEXT: .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit<br>
+; CHECK-NEXT: .Ldebug_info_start0:<br>
+; CHECK-NEXT: .short 2             # DWARF version number<br>
 ; CHECK-NOT:  .L<br>
 ; CHECK:      .long .debug_abbrev  # Offset Into Abbrev. Section<br>
 ; CHECK-NOT:  .L<br>
 ; CHECK:      .long .debug_line    # DW_AT_stmt_list<br>
 ; CHECK-NOT:  .L<br>
+; CHECK:      .Ldebug_info_end0:<br>
+; CHECK-NOT:  .L<br>
+; CHECK:      .long .Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit<br>
+; CHECK-NEXT: .Ldebug_info_start1:<br>
+; CHECK-NOT:  .L<br>
 ; CHECK:      .long .debug_abbrev  # Offset Into Abbrev. Section<br>
 ; CHECK-NOT:  .L<br>
 ; CHECK:      .long .debug_line    # DW_AT_stmt_list<br>
@@ -23,6 +29,7 @@<br>
 ; CHECK:      .quad .debug_info+{{[0-9]+}} # DW_AT_type<br>
 ; CHECK-NOT:  .L<br>
 ; CHECK:      .byte 0              # End Of Children Mark<br>
+; CHECK-NEXT: .Ldebug_info_end1:<br>
 ; CHECK-NOT:  .L<br>
<br>
 source_filename = "test/DebugInfo/X86/sections_as_references.ll"<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>