[llvm] r351395 - [AsmPrinter] Collapse .loc 0 0 directives
Jonas Devlieghere via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 16 15:26:29 PST 2019
Author: jdevlieghere
Date: Wed Jan 16 15:26:29 2019
New Revision: 351395
URL: http://llvm.org/viewvc/llvm-project?rev=351395&view=rev
Log:
[AsmPrinter] Collapse .loc 0 0 directives
Currently we do not always collapse subsequent .loc 0 0 directives. The
reason is that we were checking for a PrevInstLoc which is not set when
we emit a line-0 record. We should only check the LastAsmLine, which
seems to be created exactly for this purpose.
// When we emit a line-0 record, we don't update PrevInstLoc; so look at
// the last line number actually emitted, to see if it was line 0.
unsigned LastAsmLine =
Asm->OutStreamer->getContext().getCurrentDwarfLoc().getLine();
Differential revision: https://reviews.llvm.org/D56767
Added:
llvm/trunk/test/DebugInfo/MIR/X86/debug-loc-0.mir
Modified:
llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=351395&r1=351394&r2=351395&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Wed Jan 16 15:26:29 2019
@@ -1489,7 +1489,7 @@ void DwarfDebug::beginInstruction(const
// 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)
+ if (DL.getLine() == 0 && LastAsmLine == 0)
return;
unsigned Flags = 0;
if (DL == PrologEndLoc) {
Added: llvm/trunk/test/DebugInfo/MIR/X86/debug-loc-0.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/MIR/X86/debug-loc-0.mir?rev=351395&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/MIR/X86/debug-loc-0.mir (added)
+++ llvm/trunk/test/DebugInfo/MIR/X86/debug-loc-0.mir Wed Jan 16 15:26:29 2019
@@ -0,0 +1,104 @@
+# Check that subsequent .loc 0 0 directives are collapsed.
+
+# RUN: llc -O2 -filetype=asm -mtriple=x86_64-apple-macosx10.9.0 -o - %s | FileCheck %s
+
+# CHECK: Ltmp0:
+# CHECK: .loc 1 0 0 prologue_end
+# CHECK-NOT: .loc 1 0 0
+# CHECK: .loc 1 37 1
+
+--- |
+ ; ModuleID = '<stdin>'
+ source_filename = "<stdin>"
+ target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+ target triple = "x86_64-apple-macosx10.9.0"
+
+ %swift.opaque = type opaque
+ %swift.metadata_response = type { %swift.type*, i64 }
+ %swift.type = type { i64 }
+
+ define hidden swiftcc void @"$S4main1fyyF"() !dbg !5 {
+ entry:
+ %s1.addr = alloca i8*, align 8
+ %0 = bitcast i8** %s1.addr to %swift.opaque**
+ store %swift.opaque* null, %swift.opaque** %0, align 8
+ %1 = call swiftcc %swift.metadata_response @"$S16resilient_struct4SizeVMa"(i64 0) #1, !dbg !10
+ %2 = extractvalue %swift.metadata_response %1, 0, !dbg !10
+ %3 = bitcast %swift.type* %2 to i8***, !dbg !10
+ %4 = getelementptr inbounds i8**, i8*** %3, i64 -1, !dbg !10
+ ret void, !dbg !12
+ }
+
+ declare swiftcc %swift.metadata_response @"$S16resilient_struct4SizeVMa"(i64)
+
+ ; Function Attrs: nounwind
+ declare void @llvm.stackprotector(i8*, i8**) #0
+
+ attributes #0 = { nounwind }
+ attributes #1 = { nounwind readnone }
+
+ !llvm.dbg.cu = !{!0}
+ !llvm.module.flags = !{!3, !4}
+
+ !0 = distinct !DICompileUnit(language: DW_LANG_Swift, file: !1, producer: "Swift version 4.2.1-dev effective-3.4.1 (LLVM 4ba03d9389, Clang 78aa734eee, Swift f4134ebef6)", isOptimized: false, runtimeVersion: 4, emissionKind: FullDebug, enums: !2, imports: !2)
+ !1 = !DIFile(filename: "struct_resilience.swift", directory: "/Users/jonas/swift")
+ !2 = !{}
+ !3 = !{i32 2, !"Dwarf Version", i32 4}
+ !4 = !{i32 2, !"Debug Info Version", i32 3}
+ !5 = distinct !DISubprogram(name: "f", linkageName: "$S4main1fyyF", scope: !0, file: !6, line: 23, type: !7, scopeLine: 23, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
+ !6 = !DIFile(filename: "struct_resilience.swift", directory: "/Users/jonas/swift/swift/test/DebugInfo")
+ !7 = !DISubroutineType(types: !8)
+ !8 = !{!9}
+ !9 = !DICompositeType(tag: DW_TAG_structure_type, name: "$SytD", file: !6, elements: !2, runtimeLang: DW_LANG_Swift, identifier: "$SytD")
+ !10 = !DILocation(line: 0, scope: !11)
+ !11 = distinct !DILexicalBlock(scope: !5, file: !6, line: 23, column: 10)
+ !12 = !DILocation(line: 37, column: 1, scope: !11)
+
+...
+---
+name: '$S4main1fyyF'
+alignment: 4
+exposesReturnsTwice: false
+legalized: false
+regBankSelected: false
+selected: false
+failedISel: false
+tracksRegLiveness: true
+hasWinCFI: false
+registers: []
+liveins: []
+frameInfo:
+ isFrameAddressTaken: false
+ isReturnAddressTaken: false
+ hasStackMap: false
+ hasPatchPoint: false
+ stackSize: 0
+ offsetAdjustment: 0
+ maxAlignment: 8
+ adjustsStack: false
+ hasCalls: true
+ stackProtector: ''
+ maxCallFrameSize: 4294967295
+ cvBytesOfCalleeSavedRegisters: 0
+ hasOpaqueSPAdjustment: false
+ hasVAStart: false
+ hasMustTailInVarArgFunc: false
+ localFrameSize: 0
+ savePoint: ''
+ restorePoint: ''
+fixedStack: []
+stack:
+ - { id: 0, name: s1.addr, type: default, offset: 0, size: 8, alignment: 8,
+ stack-id: 0, callee-saved-register: '', callee-saved-restored: true,
+ debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+constants: []
+body: |
+ bb.0.entry:
+ MOV64mi32 %stack.0.s1.addr, 1, $noreg, 0, $noreg, 0 :: (store 8 into %ir.0)
+ ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp, debug-location !10
+ dead $edi = MOV32r0 implicit-def dead $eflags, implicit-def $rdi, debug-location !10
+ CALL64pcrel32 @"$S16resilient_struct4SizeVMa", csr_64, implicit $rsp, implicit $ssp, implicit killed $rdi, implicit-def $rsp, implicit-def $ssp, implicit-def dead $rax, implicit-def dead $rdx, debug-location !10
+ ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp, debug-location !10
+ RET 0, debug-location !12
+
+...
More information about the llvm-commits
mailing list