diff options
Diffstat (limited to 'test/DebugInfo/AArch64')
| -rw-r--r-- | test/DebugInfo/AArch64/cfi-frame.ll | 58 | ||||
| -rw-r--r-- | test/DebugInfo/AArch64/dwarfdump.ll | 10 | ||||
| -rw-r--r-- | test/DebugInfo/AArch64/eh_frame.s | 4 | ||||
| -rw-r--r-- | test/DebugInfo/AArch64/eh_frame_personality.ll | 4 | ||||
| -rw-r--r-- | test/DebugInfo/AArch64/lit.local.cfg | 3 | ||||
| -rw-r--r-- | test/DebugInfo/AArch64/struct_by_value.ll | 70 | ||||
| -rw-r--r-- | test/DebugInfo/AArch64/variable-loc.ll | 101 |
7 files changed, 82 insertions, 168 deletions
diff --git a/test/DebugInfo/AArch64/cfi-frame.ll b/test/DebugInfo/AArch64/cfi-frame.ll deleted file mode 100644 index 7290ddf357c1..000000000000 --- a/test/DebugInfo/AArch64/cfi-frame.ll +++ /dev/null @@ -1,58 +0,0 @@ -; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s -; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -disable-fp-elim < %s | FileCheck %s --check-prefix=CHECK-WITH-FP - -@bigspace = global [8 x i64] zeroinitializer - -declare void @use_addr(i8*) - -define void @test_frame([8 x i64] %val) { -; CHECK: test_frame: -; CHECK: .cfi_startproc - - %var = alloca i8, i32 1000000 -; CHECK: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]] -; CHECK-NEXT: .Ltmp -; CHECK-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]] - -; Make sure the prologue is reasonably efficient -; CHECK-NEXT: stp x29, x30, [sp, -; CHECK-NEXT: stp x25, x26, [sp, -; CHECK-NEXT: stp x23, x24, [sp, -; CHECK-NEXT: stp x21, x22, [sp, -; CHECK-NEXT: stp x19, x20, [sp, -; CHECK-NEXT: sub sp, sp, #160 -; CHECK-NEXT: sub sp, sp, #244, lsl #12 -; CHECK-NEXT: .Ltmp -; CHECK-NEXT: .cfi_def_cfa sp, 1000080 -; CHECK-NEXT: .Ltmp -; CHECK-NEXT: .cfi_offset x30, -8 -; CHECK-NEXT: .Ltmp -; CHECK-NEXT: .cfi_offset x29, -16 -; [...] -; CHECK: .cfi_offset x19, -80 - -; CHECK: bl use_addr - call void @use_addr(i8* %var) - - store [8 x i64] %val, [8 x i64]* @bigspace - ret void -; CHECK: ret -; CHECK: .cfi_endproc -} - -; CHECK-WITH-FP: test_frame: - -; CHECK-WITH-FP: sub sp, sp, #[[SP_INIT_ADJ:[0-9]+]] -; CHECK-WITH-FP-NEXT: .Ltmp -; CHECK-WITH-FP-NEXT: .cfi_def_cfa sp, [[SP_INIT_ADJ]] - -; CHECK-WITH-FP: stp x29, x30, [sp, [[OFFSET:#[0-9]+]]] -; CHECK-WITH-FP-NEXT: add x29, sp, [[OFFSET]] -; CHECK-WITH-FP-NEXT: .Ltmp -; CHECK-WITH-FP-NEXT: .cfi_def_cfa x29, 16 - - ; We shouldn't emit any kind of update for the second stack adjustment if the - ; FP is in use. -; CHECK-WITH-FP-NOT: .cfi_def_cfa_offset - -; CHECK-WITH-FP: bl use_addr diff --git a/test/DebugInfo/AArch64/dwarfdump.ll b/test/DebugInfo/AArch64/dwarfdump.ll index 4c205077e6d8..98e863dbb4b5 100644 --- a/test/DebugInfo/AArch64/dwarfdump.ll +++ b/test/DebugInfo/AArch64/dwarfdump.ll @@ -1,4 +1,7 @@ -; RUN: llc -mtriple=aarch64-non-linux-gnu < %s -filetype=obj | llvm-dwarfdump - | FileCheck %s +; RUN: llc -mtriple=aarch64-non-linux-gnu -dwarf-version=4 < %s -filetype=obj \ +; RUN: | llvm-dwarfdump - | FileCheck -check-prefix=CHECK -check-prefix=CHECK-4 %s +; RUN: llc -mtriple=aarch64-non-linux-gnu -dwarf-version=3 < %s -filetype=obj \ +; RUN: | llvm-dwarfdump - | FileCheck -check-prefix=CHECK -check-prefix=CHECK-3 %s ; We're mostly checking that relocations are applied correctly ; here. Currently R_AARCH64_ABS32 is used for references to debug data @@ -12,7 +15,8 @@ ; A couple of ABS64s similarly: ; CHECK: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) -; CHECK: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000008) +; CHECK-4: DW_AT_high_pc [DW_FORM_data4] (0x00000008) +; CHECK-3: DW_AT_high_pc [DW_FORM_addr] (0x0000000000000008) define i32 @main() nounwind { ret i32 0, !dbg !8 @@ -24,7 +28,7 @@ attributes #0 = { nounwind } !llvm.module.flags = !{!10} !0 = metadata !{i32 786449, metadata !9, i32 12, metadata !"clang version 3.3 ", i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !2, metadata !1, metadata !1, metadata !""} ; [ DW_TAG_compile_unit ] [/home/timnor01/llvm/build/tmp.c] [DW_LANG_C99] -!1 = metadata !{i32 0} +!1 = metadata !{} !2 = metadata !{metadata !3} !3 = metadata !{i32 786478, metadata !9, metadata !4, metadata !"main", metadata !"main", metadata !"", i32 1, metadata !5, i1 false, i1 true, i32 0, i32 0, null, i32 0, i1 false, i32 ()* @main, null, null, metadata !1, i32 1} ; [ DW_TAG_subprogram ] [line 1] [def] [main] !4 = metadata !{i32 786473, metadata !9} ; [ DW_TAG_file_type ] diff --git a/test/DebugInfo/AArch64/eh_frame.s b/test/DebugInfo/AArch64/eh_frame.s index d8d6b6d9325f..12a58961d717 100644 --- a/test/DebugInfo/AArch64/eh_frame.s +++ b/test/DebugInfo/AArch64/eh_frame.s @@ -17,7 +17,7 @@ foo: // Output is: // CHECK: Contents of section .eh_frame: -// CHECK-NEXT: 0000 10000000 00000000 017a5200 017c1e01 .........zR..|.. +// CHECK-NEXT: 0000 10000000 00000000 037a5200 017c1e01 .........zR..|.. // CHECK-NEXT: 0010 1b0c1f00 10000000 18000000 00000000 ................ @@ -30,7 +30,7 @@ foo: // ------------------- // 10000000: length of first CIE = 0x10 // 00000000: This is a CIE -// 01: version = 0x1 +// 03: version = 0x3 // 7a 52 00: augmentation string "zR" -- pointer format is specified // 01: code alignment factor 1 // 7c: data alignment factor -4 diff --git a/test/DebugInfo/AArch64/eh_frame_personality.ll b/test/DebugInfo/AArch64/eh_frame_personality.ll index d35f2a2fcafb..51d6bf80b950 100644 --- a/test/DebugInfo/AArch64/eh_frame_personality.ll +++ b/test/DebugInfo/AArch64/eh_frame_personality.ll @@ -16,7 +16,7 @@ clean: } ; CHECK: Contents of section .eh_frame: -; CHECK: 0000 1c000000 00000000 017a504c 5200017c .........zPLR..| +; CHECK: 0000 1c000000 00000000 037a504c 5200017c .........zPLR..| ; CHECK: 0010 1e0b0000 00000000 00000000 1b0c1f00 ................ ; Don't really care about the rest: @@ -33,7 +33,7 @@ clean: ; ---------- ; 1c000000: Length = 0x1c ; 00000000: This is a CIE -; 01: Version 1 +; 03: Version 3 ; 7a 50 4c 52 00: Augmentation string "zPLR" (personality routine, language-specific data, pointer format) ; 01: Code alignment factor 1 ; 78: Data alignment factor: -8 diff --git a/test/DebugInfo/AArch64/lit.local.cfg b/test/DebugInfo/AArch64/lit.local.cfg index 9a66a00189ea..cec29af5bbe4 100644 --- a/test/DebugInfo/AArch64/lit.local.cfg +++ b/test/DebugInfo/AArch64/lit.local.cfg @@ -1,4 +1,3 @@ -targets = set(config.root.targets_to_build.split()) -if not 'AArch64' in targets: +if not 'AArch64' in config.root.targets: config.unsupported = True diff --git a/test/DebugInfo/AArch64/struct_by_value.ll b/test/DebugInfo/AArch64/struct_by_value.ll new file mode 100644 index 000000000000..0e336f799c54 --- /dev/null +++ b/test/DebugInfo/AArch64/struct_by_value.ll @@ -0,0 +1,70 @@ +; A by-value struct is a register-indirect value (breg). +; RUN: llc %s -filetype=asm -o - | FileCheck %s + +; CHECK: DW_AT_location +; CHECK-NEXT: .byte 112 +; 112 = 0x70 = DW_OP_breg0 + +; rdar://problem/13658587 +; +; Generated from +; +; struct five +; { +; int a; +; int b; +; int c; +; int d; +; int e; +; }; +; +; int +; return_five_int (struct five f) +; { +; return f.a; +; } + +target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-n32:64-S128" +target triple = "arm64-apple-ios3.0.0" + +%struct.five = type { i32, i32, i32, i32, i32 } + +; Function Attrs: nounwind ssp +define i32 @return_five_int(%struct.five* %f) #0 { +entry: + call void @llvm.dbg.declare(metadata !{%struct.five* %f}, metadata !17), !dbg !18 + %a = getelementptr inbounds %struct.five* %f, i32 0, i32 0, !dbg !19 + %0 = load i32* %a, align 4, !dbg !19 + ret i32 %0, !dbg !19 +} + +; Function Attrs: nounwind readnone +declare void @llvm.dbg.declare(metadata, metadata) #1 + +attributes #0 = { nounwind ssp } +attributes #1 = { nounwind readnone } + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!16, !20} + +!0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"LLVM version 3.4 ", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [struct_by_value.c] [DW_LANG_C99] +!1 = metadata !{metadata !"struct_by_value.c", metadata !""} +!2 = metadata !{} +!3 = metadata !{metadata !4} +!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"return_five_int", metadata !"return_five_int", metadata !"", i32 13, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (%struct.five*)* @return_five_int, null, null, metadata !2, i32 14} ; [ DW_TAG_subprogram ] [line 13] [def] [scope 14] [return_five_int] +!5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [struct_by_value.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 786451, metadata !1, null, metadata !"five", i32 1, i64 160, i64 32, i32 0, i32 0, null, metadata !10, i32 0, null, null, null} ; [ DW_TAG_structure_type ] [five] [line 1, size 160, align 32, offset 0] [def] [from ] +!10 = metadata !{metadata !11, metadata !12, metadata !13, metadata !14, metadata !15} +!11 = metadata !{i32 786445, metadata !1, metadata !9, metadata !"a", i32 3, i64 32, i64 32, i64 0, i32 0, metadata !8} ; [ DW_TAG_member ] [a] [line 3, size 32, align 32, offset 0] [from int] +!12 = metadata !{i32 786445, metadata !1, metadata !9, metadata !"b", i32 4, i64 32, i64 32, i64 32, i32 0, metadata !8} ; [ DW_TAG_member ] [b] [line 4, size 32, align 32, offset 32] [from int] +!13 = metadata !{i32 786445, metadata !1, metadata !9, metadata !"c", i32 5, i64 32, i64 32, i64 64, i32 0, metadata !8} ; [ DW_TAG_member ] [c] [line 5, size 32, align 32, offset 64] [from int] +!14 = metadata !{i32 786445, metadata !1, metadata !9, metadata !"d", i32 6, i64 32, i64 32, i64 96, i32 0, metadata !8} ; [ DW_TAG_member ] [d] [line 6, size 32, align 32, offset 96] [from int] +!15 = metadata !{i32 786445, metadata !1, metadata !9, metadata !"e", i32 7, i64 32, i64 32, i64 128, i32 0, metadata !8} ; [ DW_TAG_member ] [e] [line 7, size 32, align 32, offset 128] [from int] +!16 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} +!17 = metadata !{i32 786689, metadata !4, metadata !"f", metadata !5, i32 16777229, metadata !9, i32 8192, i32 0} ; [ DW_TAG_arg_variable ] [f] [line 13] +!18 = metadata !{i32 13, i32 0, metadata !4, null} +!19 = metadata !{i32 16, i32 0, metadata !4, null} +!20 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} diff --git a/test/DebugInfo/AArch64/variable-loc.ll b/test/DebugInfo/AArch64/variable-loc.ll deleted file mode 100644 index f42cb746480b..000000000000 --- a/test/DebugInfo/AArch64/variable-loc.ll +++ /dev/null @@ -1,101 +0,0 @@ -; RUN: llc -mtriple=aarch64-none-linux-gnu -disable-fp-elim < %s | FileCheck %s - -; This is a regression test making sure the location of variables is correct in -; debugging information, even if they're addressed via the frame pointer. - -; In case it needs, regenerating, the following suffices: -; int printf(const char *, ...); -; void populate_array(int *, int); -; int sum_array(int *, int); - -; int main() { -; int main_arr[100], val; -; populate_array(main_arr, 100); -; val = sum_array(main_arr, 100); -; printf("Total is %d\n", val); -; return 0; -; } - - ; First make sure main_arr is where we expect it: sp + 4 == x29 - 412: -; CHECK: main: -; CHECK: sub sp, sp, #432 -; CHECK: stp x29, x30, [sp, #416] -; CHECK: add x29, sp, #416 -; CHECK: add {{x[0-9]+}}, sp, #4 - -; CHECK: .Linfo_string7: -; CHECK-NEXT: main_arr - -; Now check the debugging information reflects this: -; CHECK: DW_TAG_variable -; CHECK-NEXT: .word .Linfo_string7 - - ; Rather hard-coded, but 145 => DW_OP_fbreg and the .ascii is LEB128 encoded -412. -; CHECK: DW_AT_location -; CHECK-NEXT: .byte 145 -; CHECK-NEXT: .ascii "\344|" - - - -target datalayout = "e-p:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-i128:128:128-f32:32:32-f64:64:64-f128:128:128-n32:64-S128" -target triple = "aarch64-none-linux-gnu" - -@.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 1 - -declare void @populate_array(i32*, i32) nounwind - -declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone - -declare i32 @sum_array(i32*, i32) nounwind - -define i32 @main() nounwind { -entry: - %retval = alloca i32, align 4 - %main_arr = alloca [100 x i32], align 4 - %val = alloca i32, align 4 - store i32 0, i32* %retval - call void @llvm.dbg.declare(metadata !{[100 x i32]* %main_arr}, metadata !17), !dbg !22 - call void @llvm.dbg.declare(metadata !{i32* %val}, metadata !23), !dbg !24 - %arraydecay = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !25 - call void @populate_array(i32* %arraydecay, i32 100), !dbg !25 - %arraydecay1 = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !26 - %call = call i32 @sum_array(i32* %arraydecay1, i32 100), !dbg !26 - store i32 %call, i32* %val, align 4, !dbg !26 - %0 = load i32* %val, align 4, !dbg !27 - %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !27 - ret i32 0, !dbg !28 -} - -declare i32 @printf(i8*, ...) - -!llvm.dbg.cu = !{!0} -!llvm.module.flags = !{!30} - -!0 = metadata !{i32 786449, metadata !29, i32 12, metadata !"clang version 3.2 ", i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !1, metadata !1, metadata !""} ; [ DW_TAG_compile_unit ] [/home/timnor01/a64-trunk/build/simple.c] [DW_LANG_C99] -!1 = metadata !{i32 0} -!3 = metadata !{metadata !5, metadata !11, metadata !14} -!5 = metadata !{i32 786478, metadata !29, metadata !6, metadata !"populate_array", metadata !"populate_array", metadata !"", i32 4, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void (i32*, i32)* @populate_array, null, null, metadata !1, i32 4} ; [ DW_TAG_subprogram ] [line 4] [def] [populate_array] -!6 = metadata !{i32 786473, metadata !29} ; [ DW_TAG_file_type ] -!7 = metadata !{i32 786453, i32 0, null, i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{null, metadata !9, metadata !10} -!9 = metadata !{i32 786447, null, null, metadata !"", i32 0, i64 64, i64 64, i64 0, i32 0, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from int] -!10 = 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] -!11 = metadata !{i32 786478, metadata !29, metadata !6, metadata !"sum_array", metadata !"sum_array", metadata !"", i32 9, metadata !12, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32*, i32)* @sum_array, null, null, metadata !1, i32 9} ; [ DW_TAG_subprogram ] [line 9] [def] [sum_array] -!12 = metadata !{i32 786453, i32 0, null, i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !13, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!13 = metadata !{metadata !10, metadata !9, metadata !10} -!14 = metadata !{i32 786478, metadata !29, metadata !6, metadata !"main", metadata !"main", metadata !"", i32 18, metadata !15, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @main, null, null, metadata !1, i32 18} ; [ DW_TAG_subprogram ] [line 18] [def] [main] -!15 = metadata !{i32 786453, i32 0, null, i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !16, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!16 = metadata !{metadata !10} -!17 = metadata !{i32 786688, metadata !18, metadata !"main_arr", metadata !6, i32 19, metadata !19, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [main_arr] [line 19] -!18 = metadata !{i32 786443, metadata !29, metadata !14, i32 18, i32 16, i32 4} ; [ DW_TAG_lexical_block ] [/home/timnor01/a64-trunk/build/simple.c] -!19 = metadata !{i32 786433, null, null, metadata !"", i32 0, i64 3200, i64 32, i32 0, i32 0, metadata !10, metadata !20, i32 0, null, null, null} ; [ DW_TAG_array_type ] [line 0, size 3200, align 32, offset 0] [from int] -!20 = metadata !{i32 786465, i64 0, i64 99} ; [ DW_TAG_subrange_type ] [0, 99] -!22 = metadata !{i32 19, i32 7, metadata !18, null} -!23 = metadata !{i32 786688, metadata !18, metadata !"val", metadata !6, i32 20, metadata !10, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [val] [line 20] -!24 = metadata !{i32 20, i32 7, metadata !18, null} -!25 = metadata !{i32 22, i32 3, metadata !18, null} -!26 = metadata !{i32 23, i32 9, metadata !18, null} -!27 = metadata !{i32 24, i32 3, metadata !18, null} -!28 = metadata !{i32 26, i32 3, metadata !18, null} -!29 = metadata !{metadata !"simple.c", metadata !"/home/timnor01/a64-trunk/build"} -!30 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} |
