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