Changeset View
Changeset View
Standalone View
Standalone View
test/DebugInfo/X86/pieces-1.ll
- This file was added.
; RUN: llc -O0 %s -filetype=obj -o %t.o | |||||
; RUN: llvm-dwarfdump -debug-dump=loc %t.o | FileCheck --check-prefix=CHECK-DWARF %s | |||||
echristo: Not llc -O0? Or do we need things to be optimized by llc? | |||||
; | |||||
; rdar://problem/15928306 | |||||
; | |||||
; Test that we can emit debug info for aggregate values that are split | |||||
; up across multiple registers by SROA. | |||||
; | |||||
; // Compile with -O1. | |||||
; typedef struct { long int a; int b;} S; | |||||
; | |||||
; int foo(S s) { | |||||
; return s.b; | |||||
; } | |||||
; | |||||
; | |||||
; CHECK-DWARF: .debug_loc contents: | |||||
; | |||||
; 0x0000000000000000 - 0x0000000000000006: rdi, piece 0x00000008, rsi, piece 0x00000004 | |||||
; CHECK-DWARF: Beginning address offset: 0x0000000000000000 | |||||
; CHECK-DWARF: Ending address offset: [[LTMP3:.*]] | |||||
; CHECK-DWARF: Location description: 55 93 08 54 93 04 | |||||
; 0x0000000000000006 - 0x0000000000000008: rbp-8, piece 0x00000008, rax, piece 0x00000004 ) | |||||
; CHECK-DWARF: Beginning address offset: [[LTMP3]] | |||||
; CHECK-DWARF: Ending address offset: [[END:.*]] | |||||
; CHECK-DWARF: Location description: 76 78 93 08 54 93 04 | |||||
; Function Attrs: nounwind ssp uwtable | |||||
define i32 @foo(i64 %s.coerce0, i32 %s.coerce1) #0 { | |||||
entry: | |||||
Not Done ReplyInline ActionsDuplicate label adding? echristo: Duplicate label adding? | |||||
call void @llvm.dbg.value(metadata !{i64 %s.coerce0}, i64 0, metadata !20), !dbg !21 | |||||
call void @llvm.dbg.value(metadata !{i32 %s.coerce1}, i64 0, metadata !22), !dbg !21 | |||||
ret i32 %s.coerce1, !dbg !23 | |||||
} | |||||
Not Done ReplyInline ActionsIf you're going to leave this in then my personal preference would be to use -mtriple above. Is it possible this works for just "any x86 with dwarf" though? echristo: If you're going to leave this in then my personal preference would be to use -mtriple above. Is… | |||||
; Function Attrs: nounwind readnone | |||||
declare void @llvm.dbg.declare(metadata, metadata) #1 | |||||
; Function Attrs: nounwind readnone | |||||
declare void @llvm.dbg.value(metadata, i64, metadata) #1 | |||||
attributes #0 = { nounwind ssp uwtable "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" } | |||||
attributes #1 = { nounwind readnone } | |||||
!llvm.dbg.cu = !{!0} | |||||
!llvm.module.flags = !{!17, !18} | |||||
!llvm.ident = !{!19} | |||||
!0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5 ", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !""} | |||||
!1 = metadata !{metadata !"pieces.c", metadata !""} | |||||
!2 = metadata !{} | |||||
!3 = metadata !{metadata !4} | |||||
!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"foo", metadata !"foo", metadata !"", i32 3, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 true, i32 (i64, i32)* @foo, null, null, metadata !15, i32 3} ; [ DW_TAG_subprogram ] [line 3] [def] [foo] | |||||
!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [/pieces.c] | |||||
!6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] | |||||
!7 = metadata !{metadata !8, metadata !9} | |||||
!8 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] | |||||
!9 = metadata !{i32 786454, metadata !1, null, metadata !"S", i32 1, i64 0, i64 0, i64 0, i32 0, metadata !10} ; [ DW_TAG_typedef ] [S] [line 1, size 0, align 0, offset 0] [from ] | |||||
!10 = metadata !{i32 786451, metadata !1, null, metadata !"", i32 1, i64 128, i64 64, i32 0, i32 0, null, metadata !11, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [line 1, size 128, align 64, offset 0] [def] [from ] | |||||
!11 = metadata !{metadata !12, metadata !14} | |||||
!12 = metadata !{i32 786445, metadata !1, metadata !10, metadata !"a", i32 1, i64 64, i64 64, i64 0, i32 0, metadata !13} ; [ DW_TAG_member ] [a] [line 1, size 64, align 64, offset 0] [from long int] | |||||
!13 = metadata !{i32 786468, null, null, metadata !"long int", i32 0, i64 64, i64 64, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [long int] [line 0, size 64, align 64, offset 0, enc DW_ATE_signed] | |||||
!14 = metadata !{i32 786445, metadata !1, metadata !10, metadata !"b", i32 1, i64 32, i64 32, i64 64, i32 0, metadata !8} ; [ DW_TAG_member ] [b] [line 1, size 32, align 32, offset 64] [from int] | |||||
!15 = metadata !{metadata !16} | |||||
!16 = metadata !{i32 786689, metadata !4, metadata !"s", metadata !5, i32 16777219, metadata !9, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [s] [line 3] | |||||
!17 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} | |||||
!18 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} | |||||
!19 = metadata !{metadata !"clang version 3.5 "} | |||||
!20 = metadata !{i32 786689, metadata !4, metadata !"s", metadata !5, i32 16777219, metadata !9, i32 0, i32 0, i64 3, i64 0, i64 8} ; [ DW_TAG_arg_variable ] [s] [line 3] [piece, size 8, offset 0] | |||||
!21 = metadata !{i32 3, i32 0, metadata !4, null} | |||||
!22 = metadata !{i32 786689, metadata !4, metadata !"s", metadata !5, i32 16777219, metadata !9, i32 0, i32 0, i64 3, i64 8, i64 4} ; [ DW_TAG_arg_variable ] [s] [line 3] [piece, size 4, offset 8] | |||||
!23 = metadata !{i32 4, i32 0, metadata !4, null} | |||||
!25 = metadata !{} |
Not llc -O0? Or do we need things to be optimized by llc?