Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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 llvm-svn: 351395
- Loading branch information
1 parent
0339151
commit 669edb5
Showing
2 changed files
with
105 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
... |