<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">So I haven't worked much on debug info, but here's the explanation for my patches:</div><div class="">My original motivation was getting rid of code some code in the llvm codegen that for spills and reloads just picked the next debug location around. That just seemed wrong to me, as spills and reloads really are bookkeeping, we just move values around between registers and memory and none of it is related to anything the user wrote in the source program. So not assigning any debug information felt right for these instructions. Then people noticed line table bloat because of this and I guess we assumed that having exact line-0 annotations isn't that useful that it warrants bloating the debug information...</div><div class=""><br class=""></div><div class="">- Matthias</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">On Oct 10, 2018, at 8:45 AM, via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Sorry for being late to the party, I have been away.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">I am not persuaded that this patch is functionally correct.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">It's lovely to reduce size, but not at the cost of telling</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">un-truths about source locations of instructions.  If the</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">instructions at the top of the block have no source location,</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">and you don't like using line 0, the correct path forward is to</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">understand why those instructions do not have a source location,</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">not to just pick one from a nearby instruction.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">My choice would be to revert the LLVM patch rather than make</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">the LLDB test accommodate the un-truth.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">--paulr</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">-----Original Message-----<br class="">From: lldb-dev [<a href="mailto:lldb-dev-bounces@lists.llvm.org" class="">mailto:lldb-dev-bounces@lists.llvm.org</a>] On Behalf Of Jim<br class="">Ingham via lldb-dev<br class="">Sent: Friday, October 05, 2018 9:30 PM<br class="">To: Vedant Kumar<br class="">Cc: Matthias Braun; Vedant Kumar via llvm-commits; LLDB<br class="">Subject: Re: [lldb-dev] [llvm] r343874 - DwarfDebug: Pick next location in<br class="">case of missing location at block begin<br class=""><br class="">So in the test scenario, we have this code:<br class=""><br class="">   printf("// Set second break point at this line.");<br class="">   (text_list.push_back(std::string("!!!")));<br class=""><br class="">and we have a breakpoint on the printf line.  We've just continued to hit<br class="">the breakpoint at printf.  Then we do next twice.  That should certainly<br class="">get us past the push_back.  If it does not that's either a bug in the line<br class="">tables or in lldb's handling of them.  You would not expect to have to<br class="">next three times to go from the start of the printf line to past the<br class="">push_back of !!!.<br class=""><br class="">Considered as a test about stepping, we should applaud the test for having<br class="">caught a bug, and go figure out whether the line tables are bogus in this<br class="">instance or just innovative and lldb will have to cope...<br class=""><br class="">Considered as a test about data formatters, it is a little silly to try to<br class="">drive it using next's since the push_backs are going to introduce a bunch<br class="">of inlining and the debug information for inlining is often a bit wonky...<br class=""><br class="">Best course is to use the breakpoints in this test to drive from point to<br class="">point, and make a reduced stepping test case that just shows this bad<br class="">stepping behavior.  Then we can fix the latter test failure either in<br class="">clang or lldb as is appropriate.<br class=""><br class="">Jim<br class=""><br class=""><br class=""><blockquote type="cite" class="">On Oct 5, 2018, at 4:18 PM, Vedant Kumar via lldb-dev <lldb-<br class=""></blockquote><a href="mailto:dev@lists.llvm.org" class="">dev@lists.llvm.org</a>> wrote:<br class=""><blockquote type="cite" class=""><br class="">No worries, I’ve relaxed the test for now in r343899 to get the bots<br class=""></blockquote>going again. Essentially, the test will just step one more time to make<br class="">sure the full effect of the push_back() is visible.<br class=""><blockquote type="cite" class=""><br class="">If folks on lldb-dev (cc’d) have a better idea we can try it out.<br class=""><br class="">vedant<br class=""><br class=""><blockquote type="cite" class="">On Oct 5, 2018, at 4:15 PM, Matthias Braun <<a href="mailto:matze@braunis.de" class="">matze@braunis.de</a>> wrote:<br class=""><br class="">So what should we do? Revert the llvm commit, fix the LLDB test, xfail<br class=""></blockquote></blockquote>on lldb? I'd be fine with any but don't want to learn how lldb tests work<br class="">at this moment...<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""><blockquote type="cite" class="">On Oct 5, 2018, at 4:11 PM, Vedant Kumar via llvm-commits <llvm-<br class=""></blockquote></blockquote></blockquote><a href="mailto:commits@lists.llvm.org" class="">commits@lists.llvm.org</a>> wrote:<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">Sadly, after this commit TestDataFormatterLibcxxList.py started<br class=""></blockquote></blockquote></blockquote>failing with:<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">```<br class="">output: Process 67333 stopped<br class="">* thread #1, queue = 'com.apple.main-thread', stop reason = step over<br class="">   frame #0: 0x0000000100000eb0 a.out`main at main.cpp:33:16<br class="">  30  <span class="Apple-tab-span" style="white-space: pre;">   </span><span class="Apple-converted-space"> </span>   (text_list.push_back(std::string("smart")));<br class="">  31<br class="">  32  <span class="Apple-tab-span" style="white-space: pre;">      </span><span class="Apple-converted-space"> </span>   printf("// Set second break point at this line.");<br class="">-> 33  <span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span>   (text_list.push_back(std::string("!!!")));<br class="">   <span class="Apple-tab-span" style="white-space: pre;">      </span><span class="Apple-converted-space"> </span>              ^<br class="">  34<br class="">  35  <span class="Apple-tab-span" style="white-space: pre;"> </span><span class="Apple-converted-space"> </span>   std::list<int> countingList = {3141, 3142, 3142,3142,3142,<br class=""></blockquote></blockquote></blockquote>3142, 3142, 3141};<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">  36  <span class="Apple-tab-span" style="white-space: pre;">      </span><span class="Apple-converted-space"> </span>   countingList.sort();<br class=""><br class=""><br class="">runCmd: frame variable text_list[0]<br class="">output: (std::__1::basic_string<char, std::__1::char_traits<char>,<br class=""></blockquote></blockquote></blockquote>std::__1::allocator<char> >) [0] = "goofy"<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">Expecting sub string: goofy<br class="">Matched<br class=""><br class="">runCmd: frame variable text_list[3]<br class="">output: None<br class=""><br class="">Expecting sub string: !!!<br class="">```<br class=""><br class="">URL: <a href="http://lab.llvm.org:8080/green/view/LLDB/job/lldb-cmake/10854" class="">http://lab.llvm.org:8080/green/view/LLDB/job/lldb-cmake/10854</a><br class=""><br class="">I confirmed that reverting this fixes the issue.<br class=""><br class="">I think the problem is that we’re breaking on an instruction that<br class=""></blockquote></blockquote></blockquote>looks like it’s on line 33, but it’s actually “before” the full effect of<br class="">the push_back() is visible.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">In which case the test is wrong, because it’s setting the breakpoint<br class=""></blockquote></blockquote></blockquote>too early…<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">vedant<br class=""><br class=""><blockquote type="cite" class="">On Oct 5, 2018, at 11:29 AM, Matthias Braun via llvm-commits <llvm-<br class=""></blockquote></blockquote></blockquote></blockquote><a href="mailto:commits@lists.llvm.org" class="">commits@lists.llvm.org</a>> wrote:<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">Author: matze<br class="">Date: Fri Oct  5 11:29:24 2018<br class="">New Revision: 343874<br class=""><br class="">URL: <a href="http://llvm.org/viewvc/llvm-project?rev=343874&view=rev" class="">http://llvm.org/viewvc/llvm-project?rev=343874&view=rev</a><br class="">Log:<br class="">DwarfDebug: Pick next location in case of missing location at block<br class=""></blockquote></blockquote></blockquote></blockquote>begin<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">Context: Compiler generated instructions do not have a debug location<br class="">assigned to them. However emitting 0-line records for all of them<br class=""></blockquote></blockquote></blockquote></blockquote>bloats<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">the line tables for very little benefit so we usually avoid doing<br class=""></blockquote></blockquote></blockquote></blockquote>that.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class="">Not emitting anything will lead to the previous debug location<br class=""></blockquote></blockquote></blockquote></blockquote>getting<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">applied to the locationless instructions. This is not desirable for<br class="">block begin and after labels. Previously we would emit simply emit<br class="">line-0 records in this case, this patch changes the behavior to do a<br class="">forward search for a debug location in these cases before emitting a<br class="">line-0 record to further reduce line table bloat.<br class=""><br class="">Inspired by the discussion in <a href="https://reviews.llvm.org/D52862" class="">https://reviews.llvm.org/D52862</a><br class=""><br class="">Added:<br class="">  llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir<br class="">Modified:<br class="">  llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br class="">  llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h<br class="">  llvm/trunk/test/DebugInfo/AArch64/line-header.ll<br class="">  llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-<br class=""></blockquote></blockquote></blockquote></blockquote>dbgloc.ll<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">  llvm/trunk/test/DebugInfo/Mips/delay-slot.ll<br class="">  llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll<br class="">  llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll<br class=""><br class="">Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=343874&r1=343<br class="">873&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)<br class="">+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Fri Oct  5<br class=""></blockquote></blockquote></blockquote></blockquote>11:29:24 2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -1313,6 +1313,49 @@ void DwarfDebug::collectEntityInfo(Dwarf<br class=""> }<br class="">}<br class=""><br class="">+static const DebugLoc &<br class="">+findNextDebugLoc(MachineBasicBlock::const_iterator MBBI,<br class="">+                 MachineBasicBlock::const_iterator MBBE) {<br class="">+  static DebugLoc NoLocation;<br class="">+  for ( ; MBBI != MBBE; ++MBBI) {<br class="">+    if (MBBI->isDebugInstr())<br class="">+      continue;<br class="">+    const DebugLoc &DL = MBBI->getDebugLoc();<br class="">+    if (DL)<br class="">+      return DL;<br class="">+  }<br class="">+  return NoLocation;<br class="">+}<br class="">+<br class="">+void DwarfDebug::emitDebugLoc(const DebugLoc &DL) {<br class="">+  unsigned LastAsmLine =<br class="">+      Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();<br class="">+<br class="">+  // We have an explicit location, different from the previous<br class=""></blockquote></blockquote></blockquote></blockquote>location.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+  // Don't repeat a line-0 record, but otherwise emit the new<br class=""></blockquote></blockquote></blockquote></blockquote>location.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+  // (The new location might be an explicit line 0, which we do<br class=""></blockquote></blockquote></blockquote></blockquote>emit.)<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+  unsigned Line = DL.getLine();<br class="">+  if (PrevInstLoc && Line == 0 && LastAsmLine == 0)<br class="">+    return;<br class="">+  unsigned Flags = 0;<br class="">+  if (DL == PrologEndLoc) {<br class="">+    Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;<br class="">+    PrologEndLoc = DebugLoc();<br class="">+  }<br class="">+  // If the line changed, we call that a new statement; unless we<br class=""></blockquote></blockquote></blockquote></blockquote>went to<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+  // line 0 and came back, in which case it is not a new statement.<br class="">+  unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() :<br class=""></blockquote></blockquote></blockquote></blockquote>LastAsmLine;<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+  if (Line && Line != OldLine)<br class="">+    Flags |= DWARF2_FLAG_IS_STMT;<br class="">+<br class="">+  const MDNode *Scope = DL.getScope();<br class="">+  recordSourceLine(Line, DL.getCol(), Scope, Flags);<br class="">+<br class="">+  // If we're not at line 0, remember this location.<br class="">+  if (Line)<br class="">+    PrevInstLoc = DL;<br class="">+}<br class="">+<br class="">// Process beginning of an instruction.<br class="">void DwarfDebug::beginInstruction(const MachineInstr *MI) {<br class=""> DebugHandlerBase::beginInstruction(MI);<br class="">@@ -1352,54 +1395,41 @@ void DwarfDebug::beginInstruction(const<br class="">   // If we have already emitted a line-0 record, don't repeat it.<br class="">   if (LastAsmLine == 0)<br class="">     return;<br class="">+    // By default we emit nothing to avoid line table bloat. However<br class=""></blockquote></blockquote></blockquote></blockquote>at the<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+    // beginning of a basic block or after a label it is undesirable<br class=""></blockquote></blockquote></blockquote></blockquote>to let<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+    // the previous location unchanged. In these cases do a forward<br class=""></blockquote></blockquote></blockquote></blockquote>search for<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+    // the next valid debug location.<br class="">+    if (UnknownLocations == Default) {<br class="">+      const MachineBasicBlock &MBB = *MI->getParent();<br class="">+      if (!PrevLabel && PrevInstBB == &MBB)<br class="">+        return;<br class="">+<br class="">+      const DebugLoc &NextDL = findNextDebugLoc(MI->getIterator(),<br class=""></blockquote></blockquote></blockquote></blockquote>MBB.end());<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+      if (NextDL) {<br class="">+        emitDebugLoc(NextDL);<br class="">+        return;<br class="">+      }<br class="">+    }<br class="">+<br class="">+    // We should emit a line-0 record.<br class="">   // If user said Don't Do That, don't do that.<br class="">   if (UnknownLocations == Disable)<br class="">     return;<br class="">-    // See if we have a reason to emit a line-0 record now.<br class="">-    // Reasons to emit a line-0 record include:<br class="">-    // - User asked for it (UnknownLocations).<br class="">-    // - Instruction has a label, so it's referenced from somewhere<br class=""></blockquote></blockquote></blockquote></blockquote>else,<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-    //   possibly debug information; we want it to have a source<br class=""></blockquote></blockquote></blockquote></blockquote>location.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-    // - Instruction is at the top of a block; we don't want to<br class=""></blockquote></blockquote></blockquote></blockquote>inherit the<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-    //   location from the physically previous (maybe unrelated)<br class=""></blockquote></blockquote></blockquote></blockquote>block.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-    if (UnknownLocations == Enable || PrevLabel ||<br class="">-        (PrevInstBB && PrevInstBB != MI->getParent())) {<br class="">-      // Preserve the file and column numbers, if we can, to save<br class=""></blockquote></blockquote></blockquote></blockquote>space in<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-      // the encoded line table.<br class="">-      // Do not update PrevInstLoc, it remembers the last non-0<br class=""></blockquote></blockquote></blockquote></blockquote>line.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-      const MDNode *Scope = nullptr;<br class="">-      unsigned Column = 0;<br class="">-      if (PrevInstLoc) {<br class="">-        Scope = PrevInstLoc.getScope();<br class="">-        Column = PrevInstLoc.getCol();<br class="">-      }<br class="">-      recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);<br class="">+    // Emit a line-0 record now.<br class="">+    // Preserve the file and column numbers, if we can, to save<br class=""></blockquote></blockquote></blockquote></blockquote>space in<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+    // the encoded line table.<br class="">+    // Do not update PrevInstLoc, it remembers the last non-0 line.<br class="">+    const MDNode *Scope = nullptr;<br class="">+    unsigned Column = 0;<br class="">+    if (PrevInstLoc) {<br class="">+      Scope = PrevInstLoc.getScope();<br class="">+      Column = PrevInstLoc.getCol();<br class="">   }<br class="">+    recordSourceLine(/*Line=*/0, Column, Scope, /*Flags=*/0);<br class="">   return;<br class=""> }<br class=""><br class="">-  // We have an explicit location, different from the previous<br class=""></blockquote></blockquote></blockquote></blockquote>location.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-  // Don't repeat a line-0 record, but otherwise emit the new<br class=""></blockquote></blockquote></blockquote></blockquote>location.<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-  // (The new location might be an explicit line 0, which we do<br class=""></blockquote></blockquote></blockquote></blockquote>emit.)<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-  if (PrevInstLoc && DL.getLine() == 0 && LastAsmLine == 0)<br class="">-    return;<br class="">-  unsigned Flags = 0;<br class="">-  if (DL == PrologEndLoc) {<br class="">-    Flags |= DWARF2_FLAG_PROLOGUE_END | DWARF2_FLAG_IS_STMT;<br class="">-    PrologEndLoc = DebugLoc();<br class="">-  }<br class="">-  // If the line changed, we call that a new statement; unless we<br class=""></blockquote></blockquote></blockquote></blockquote>went to<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-  // line 0 and came back, in which case it is not a new statement.<br class="">-  unsigned OldLine = PrevInstLoc ? PrevInstLoc.getLine() :<br class=""></blockquote></blockquote></blockquote></blockquote>LastAsmLine;<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-  if (DL.getLine() && DL.getLine() != OldLine)<br class="">-    Flags |= DWARF2_FLAG_IS_STMT;<br class="">-<br class="">-  const MDNode *Scope = DL.getScope();<br class="">-  recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);<br class="">-<br class="">-  // If we're not at line 0, remember this location.<br class="">-  if (DL.getLine())<br class="">-    PrevInstLoc = DL;<br class="">+  emitDebugLoc(DL);<br class="">}<br class=""><br class="">static DebugLoc findPrologueEndLoc(const MachineFunction *MF) {<br class=""><br class="">Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=343874&r1=34387<br class="">3&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)<br class="">+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Fri Oct  5<br class=""></blockquote></blockquote></blockquote></blockquote>11:29:24 2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -719,6 +719,9 @@ public:<br class=""> bool tuneForLLDB() const { return DebuggerTuning ==<br class=""></blockquote></blockquote></blockquote></blockquote>DebuggerKind::LLDB; }<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""> bool tuneForSCE() const { return DebuggerTuning ==<br class=""></blockquote></blockquote></blockquote></blockquote>DebuggerKind::SCE; }<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""> /// @}<br class="">+<br class="">+private:<br class="">+  void emitDebugLoc(const DebugLoc &DL);<br class="">};<br class=""><br class="">} // end namespace llvm<br class=""><br class="">Modified: llvm/trunk/test/DebugInfo/AArch64/line-header.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/test/DebugInfo/AArch64/line-<br class="">header.ll?rev=343874&r1=343873&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/test/DebugInfo/AArch64/line-header.ll (original)<br class="">+++ llvm/trunk/test/DebugInfo/AArch64/line-header.ll Fri Oct  5<br class=""></blockquote></blockquote></blockquote></blockquote>11:29:24 2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -3,4 +3,4 @@<br class=""><br class="">; check line table length is correctly calculated for both big and<br class=""></blockquote></blockquote></blockquote></blockquote>little endian<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">CHECK-LABEL: .debug_line contents:<br class="">-CHECK: total_length: 0x0000003f<br class="">+CHECK: total_length: 0x0000003c<br class=""><br class="">Modified: llvm/trunk/test/DebugInfo/ARM/single-constant-use-<br class=""></blockquote></blockquote></blockquote></blockquote>preserves-dbgloc.ll<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-<br class="">dbgloc.ll?rev=343874&r1=343873&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-<br class=""></blockquote></blockquote></blockquote></blockquote>dbgloc.ll (original)<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+++ llvm/trunk/test/DebugInfo/ARM/single-constant-use-preserves-<br class=""></blockquote></blockquote></blockquote></blockquote>dbgloc.ll Fri Oct  5 11:29:24 2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -31,11 +31,10 @@ if.then:<br class=""><br class="">if.end:                                           ; preds = %entry<br class="">; Materialize the constant.<br class="">-; CHECK:      .loc    1 0<br class="">+; CHECK:      .loc    1 7 5<br class="">; CHECK-NEXT: mvn     r0, #0<br class=""><br class="">; The backend performs the store to %retval first, for some reason.<br class="">-; CHECK-NEXT: .loc    1 7 5<br class="">; CHECK-NEXT: str     r0, [sp, #4]<br class=""> store i32 -1, i32* %x, align 4, !dbg !19<br class=""><br class=""><br class="">Modified: llvm/trunk/test/DebugInfo/Mips/delay-slot.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/test/DebugInfo/Mips/delay-<br class="">slot.ll?rev=343874&r1=343873&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/test/DebugInfo/Mips/delay-slot.ll (original)<br class="">+++ llvm/trunk/test/DebugInfo/Mips/delay-slot.ll Fri Oct  5 11:29:24<br class=""></blockquote></blockquote></blockquote></blockquote>2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -16,7 +16,7 @@<br class="">; CHECK: 0x0000000000000004      2      0      1   0             0<br class=""></blockquote></blockquote></blockquote></blockquote>is_stmt prologue_end<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">; CHECK: 0x0000000000000024      3      0      1   0             0<br class=""></blockquote></blockquote></blockquote></blockquote>is_stmt<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">; CHECK: 0x0000000000000034      4      0      1   0             0<br class=""></blockquote></blockquote></blockquote></blockquote>is_stmt<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">-; CHECK: 0x0000000000000048      5      0      1   0             0<br class=""></blockquote></blockquote></blockquote></blockquote>is_stmt<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+; CHECK: 0x0000000000000044      5      0      1   0             0<br class=""></blockquote></blockquote></blockquote></blockquote>is_stmt<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">; CHECK: 0x0000000000000058      5      0      1   0             0<br class=""></blockquote></blockquote></blockquote></blockquote>is_stmt end_sequence<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""><br class=""><br class="">Modified: llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/test/DebugInfo/NVPTX/debug-<br class="">info.ll?rev=343874&r1=343873&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll (original)<br class="">+++ llvm/trunk/test/DebugInfo/NVPTX/debug-info.ll Fri Oct  5 11:29:24<br class=""></blockquote></blockquote></blockquote></blockquote>2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -36,6 +36,7 @@<br class="">; CHECK: setp.ge.s32     %p{{.+}}, %r{{.+}}, %r{{.+}};<br class="">; CHECK: .loc [[DEBUG_INFO_CU]] 7 7<br class="">; CHECK: @%p{{.+}} bra   [[BB:.+]];<br class="">+; CHECK: .loc [[DEBUG_INFO_CU]] 8 13<br class="">; CHECK: ld.param.f32    %f{{.+}}, [{{.+}}];<br class="">; CHECK: ld.param.u64    %rd{{.+}}, [{{.+}}];<br class="">; CHECK: cvta.to.global.u64      %rd{{.+}}, %rd{{.+}};<br class="">@@ -43,7 +44,6 @@<br class="">; CHECK: cvta.to.global.u64      %rd{{.+}}, %rd{{.+}};<br class="">; CHECK: mul.wide.u32    %rd{{.+}}, %r{{.+}}, 4;<br class="">; CHECK: add.s64         %rd{{.+}}, %rd{{.+}}, %rd{{.+}};<br class="">-; CHECK: .loc [[DEBUG_INFO_CU]] 8 13<br class="">; CHECK: ld.global.f32   %f{{.+}}, [%rd{{.+}}];<br class="">; CHECK: add.s64         %rd{{.+}}, %rd{{.+}}, %rd{{.+}};<br class="">; CHECK: .loc [[DEBUG_INFO_CU]] 8 19<br class=""><br class="">Modified: llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/test/DebugInfo/X86/dwarf-no-source-<br class="">loc.ll?rev=343874&r1=343873&r2=343874&view=diff<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll (original)<br class="">+++ llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.ll Fri Oct  5<br class=""></blockquote></blockquote></blockquote></blockquote>11:29:24 2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -40,15 +40,14 @@ if.end:<br class=""> ret void, !dbg !14<br class="">}<br class=""><br class="">-; CHECK:      .loc 1 7 7<br class="">+; CHECK:      .loc 1 7 7 prologue_end<br class="">; CHECK-NOT:  .loc<br class="">-; CHECK:      .loc 1 0 7 is_stmt 0<br class="">+; CHECK:      # %bb.1<br class="">+; CHECK-NEXT: .file 2 "/tests/include.h"<br class="">+; CHECK-NEXT: .loc 2 20 5<br class="">; CHECK-NOT:  .loc<br class="">-; CHECK:      .loc 2 20 5 is_stmt 1<br class="">; CHECK:      .LBB0_2:<br class="">-; CHECK-NEXT: .loc 2 0 5 is_stmt 0<br class="">-; CHECK-NOT:  .loc<br class="">-; CHECK:      .loc 1 10 3 is_stmt 1<br class="">+; CHECK:      .loc 1 10 3<br class="">;<br class="">; DISABLE-NOT: .loc 1 0<br class=""><br class=""><br class="">Added: llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir<br class="">URL: <a href="http://llvm.org/viewvc/llvm-" class="">http://llvm.org/viewvc/llvm-</a><br class=""></blockquote></blockquote></blockquote></blockquote>project/llvm/trunk/test/DebugInfo/X86/dwarf-no-source-<br class="">loc.mir?rev=343874&view=auto<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><br class=""></blockquote></blockquote></blockquote></blockquote>==========================================================================<br class="">====<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">--- llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir (added)<br class="">+++ llvm/trunk/test/DebugInfo/X86/dwarf-no-source-loc.mir Fri Oct  5<br class=""></blockquote></blockquote></blockquote></blockquote>11:29:24 2018<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">@@ -0,0 +1,74 @@<br class="">+# RUN: llc -o - %s -start-before=patchable-function -use-unknown-<br class=""></blockquote></blockquote></blockquote></blockquote>locations=Default | FileCheck %s --check-prefixes=CHECK,DEFAULT<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+# RUN: llc -o - %s -start-before=patchable-function -use-unknown-<br class=""></blockquote></blockquote></blockquote></blockquote>locations=Enable | FileCheck %s --check-prefixes=CHECK,ENABLE<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+# RUN: llc -o - %s -start-before=patchable-function -use-unknown-<br class=""></blockquote></blockquote></blockquote></blockquote>locations=Disable | FileCheck %s --check-prefixes=CHECK,DISABLE<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+--- |<br class="">+  target triple = "x86_64--"<br class="">+<br class="">+  !0 = !DIFile(filename: "dwarf-no-source-loc.mir", directory: "/")<br class="">+  !1 = distinct !DICompileUnit(file: !0, language: DW_LANG_C,<br class=""></blockquote></blockquote></blockquote></blockquote>emissionKind: LineTablesOnly)<br class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class=""><blockquote type="cite" class="">+  !2 = distinct !DISubprogram(name: "func", unit: !1)<br class="">+  !3 = !DILocation(line: 17, scope: !2)<br class="">+  !4 = !DILocation(line: 42, scope: !2)<br class="">+<br class="">+  !llvm.dbg.cu = !{!1}<br class="">+  !llvm.module.flags = !{!10, !11}<br class="">+  !10 = !{i32 2, !"Dwarf Version", i32 4}<br class="">+  !11 = !{i32 2, !"Debug Info Version", i32 3}<br class="">+<br class="">+  define void @func() !dbg !2 {<br class="">+    unreachable<br class="">+  }<br class="">+...<br class="">+---<br class="">+name: func<br class="">+body: |<br class="">+  bb.0:<br class="">+    NOOP<br class="">+    NOOP<br class="">+    $eax = MOV32ri 1, debug-location !3<br class="">+    ; CHECK-LABEL: bb.0<br class="">+    ; CHECK: nop<br class="">+    ; CHECK: nop<br class="">+    ; CHECK: .loc 1 17 0 prologue_end<br class="">+    ; CHECK: movl $1, %eax<br class="">+<br class="">+  bb.1:<br class="">+    NOOP<br class="">+    $ebx = MOV32ri 2, debug-location !4<br class="">+    ; CHECK-LABEL: bb.1<br class="">+    ; DEFAULT: .loc 1 42 0<br class="">+    ; ENABLE: .loc 1 0<br class="">+    ; DISABLE-NOT: .loc 1 0<br class="">+    ; CHECK: nop<br class="">+    ; ENABLE: .loc 1 42 0<br class="">+    ; CHECK: movl $2, %ebx<br class="">+<br class="">+  bb.2:<br class="">+    NOOP<br class="">+    ; CHECK-LABEL: bb.2<br class="">+    ; DEFAULT: .loc 1 0 0 is_stmt 0<br class="">+    ; ENABLE: .loc 1 0 0 is_stmt 0<br class="">+    ; DISABLE-NOT: .loc 1 0<br class="">+    ; CHECK: nop<br class="">+<br class="">+  bb.3:<br class="">+    NOOP<br class="">+    $ecx = MOV32ri 3, debug-location !3<br class="">+    ; CHECK-LABEL: bb.3<br class="">+    ; CHECK: nop<br class="">+    ; DEFAULT: .loc 1 17 0 is_stmt 1<br class="">+    ; ENABLE: .loc 1 17 0 is_stmt 1<br class="">+    ; DISABLE-NOT: .loc 1 0<br class="">+    ; CHECK: movl $3, %ecx<br class="">+<br class="">+  bb.4:<br class="">+    NOOP<br class="">+    $edx = MOV32ri 4, debug-location !4<br class="">+    ; CHECK: bb.4<br class="">+    ; DEFAULT: .loc 1 42 0<br class="">+    ; ENABLE: .loc 1 0 0 is_stmt 0<br class="">+    ; DISABLE-NOT: .loc 1 0<br class="">+    ; CHECK: nop<br class="">+    ; ENABLE: .loc 1 42 0 is_stmt 1<br class="">+    ; CHECK: movl $4, %edx<br class="">+...<br class=""><br class=""><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></blockquote><br class="">_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></blockquote><br class=""></blockquote><br class="">_______________________________________________<br class="">lldb-dev mailing list<br class=""><a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev<br class=""></blockquote><br class="">_______________________________________________<br class="">lldb-dev mailing list<br class=""><a href="mailto:lldb-dev@lists.llvm.org" class="">lldb-dev@lists.llvm.org</a><br class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev</a><br class=""></blockquote><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">llvm-commits mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:llvm-commits@lists.llvm.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">llvm-commits@lists.llvm.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a></div></blockquote></div><br class=""></body></html>