blob: f28ee76ebfa3857e5de3c0b1fcf29f4ab374c390 [file] [log] [blame]
Tim Northover7bc84142013-02-01 11:40:47 +00001; RUN: llc -mtriple=aarch64-none-linux-gnu -disable-fp-elim < %s | FileCheck %s
Tim Northover72062f52013-01-31 12:12:40 +00002
3; This is a regression test making sure the location of variables is correct in
4; debugging information, even if they're addressed via the frame pointer.
5
Tim Northover4f12e532013-02-04 12:15:00 +00006; In case it needs, regenerating, the following suffices:
7; int printf(const char *, ...);
8; void populate_array(int *, int);
9; int sum_array(int *, int);
10
11; int main() {
12; int main_arr[100], val;
13; populate_array(main_arr, 100);
14; val = sum_array(main_arr, 100);
15; printf("Total is %d\n", val);
16; return 0;
17; }
18
Tim Northoveraae0fa92013-05-29 19:32:06 +000019 ; First make sure main_arr is where we expect it: sp + 4 == x29 - 412:
Tim Northover72062f52013-01-31 12:12:40 +000020; CHECK: main:
Tim Northoveraae0fa92013-05-29 19:32:06 +000021; CHECK: sub sp, sp, #432
22; CHECK: stp x29, x30, [sp, #416]
23; CHECK: add x29, sp, #416
24; CHECK: add {{x[0-9]+}}, sp, #4
Tim Northover72062f52013-01-31 12:12:40 +000025
Eric Christopher9e0b08d2013-09-20 23:22:52 +000026; CHECK: .Linfo_string7:
27; CHECK-NEXT: main_arr
28
29; Now check the debugging information reflects this:
Tim Northover72062f52013-01-31 12:12:40 +000030; CHECK: DW_TAG_variable
31; CHECK-NEXT: .word .Linfo_string7
32
Tim Northoveraae0fa92013-05-29 19:32:06 +000033 ; Rather hard-coded, but 145 => DW_OP_fbreg and the .ascii is LEB128 encoded -412.
Tim Northover72062f52013-01-31 12:12:40 +000034; CHECK: DW_AT_location
35; CHECK-NEXT: .byte 145
Tim Northoveraae0fa92013-05-29 19:32:06 +000036; CHECK-NEXT: .ascii "\344|"
Tim Northover72062f52013-01-31 12:12:40 +000037
Tim Northover72062f52013-01-31 12:12:40 +000038
39
40target 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"
41target triple = "aarch64-none-linux-gnu"
42
43@.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 1
44
45declare void @populate_array(i32*, i32) nounwind
46
47declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
48
49declare i32 @sum_array(i32*, i32) nounwind
50
51define i32 @main() nounwind {
52entry:
53 %retval = alloca i32, align 4
54 %main_arr = alloca [100 x i32], align 4
55 %val = alloca i32, align 4
56 store i32 0, i32* %retval
57 call void @llvm.dbg.declare(metadata !{[100 x i32]* %main_arr}, metadata !17), !dbg !22
58 call void @llvm.dbg.declare(metadata !{i32* %val}, metadata !23), !dbg !24
59 %arraydecay = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !25
60 call void @populate_array(i32* %arraydecay, i32 100), !dbg !25
61 %arraydecay1 = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !26
62 %call = call i32 @sum_array(i32* %arraydecay1, i32 100), !dbg !26
63 store i32 %call, i32* %val, align 4, !dbg !26
64 %0 = load i32* %val, align 4, !dbg !27
65 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !27
66 ret i32 0, !dbg !28
67}
68
69declare i32 @printf(i8*, ...)
70
71!llvm.dbg.cu = !{!0}
Manman Ren41245b42013-12-09 20:58:24 +000072!llvm.module.flags = !{!30}
Tim Northover72062f52013-01-31 12:12:40 +000073
David Blaikiec462db62013-04-22 06:12:31 +000074!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]
Stephen Hines36b56882014-04-23 16:57:46 -070075!1 = metadata !{}
Tim Northover4f12e532013-02-04 12:15:00 +000076!3 = metadata !{metadata !5, metadata !11, metadata !14}
Manman Ren27ce44d2013-07-25 06:43:01 +000077!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]
David Blaikie72dfb052013-03-28 02:44:59 +000078!6 = metadata !{i32 786473, metadata !29} ; [ DW_TAG_file_type ]
Manman Ren56736c12013-09-09 00:12:17 +000079!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 ]
Tim Northover72062f52013-01-31 12:12:40 +000080!8 = metadata !{null, metadata !9, metadata !10}
David Blaikie72dfb052013-03-28 02:44:59 +000081!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]
82!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]
Manman Ren27ce44d2013-07-25 06:43:01 +000083!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]
Manman Ren56736c12013-09-09 00:12:17 +000084!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 ]
Tim Northover72062f52013-01-31 12:12:40 +000085!13 = metadata !{metadata !10, metadata !9, metadata !10}
Manman Ren27ce44d2013-07-25 06:43:01 +000086!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]
Manman Ren56736c12013-09-09 00:12:17 +000087!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 ]
Tim Northover72062f52013-01-31 12:12:40 +000088!16 = metadata !{metadata !10}
89!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]
Manman Ren27ce44d2013-07-25 06:43:01 +000090!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]
Manman Ren13071032013-09-06 21:03:58 +000091!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]
Tim Northover4f12e532013-02-04 12:15:00 +000092!20 = metadata !{i32 786465, i64 0, i64 99} ; [ DW_TAG_subrange_type ] [0, 99]
Tim Northover72062f52013-01-31 12:12:40 +000093!22 = metadata !{i32 19, i32 7, metadata !18, null}
94!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]
95!24 = metadata !{i32 20, i32 7, metadata !18, null}
96!25 = metadata !{i32 22, i32 3, metadata !18, null}
97!26 = metadata !{i32 23, i32 9, metadata !18, null}
98!27 = metadata !{i32 24, i32 3, metadata !18, null}
99!28 = metadata !{i32 26, i32 3, metadata !18, null}
David Blaikieb4cf0ab2013-03-17 21:13:55 +0000100!29 = metadata !{metadata !"simple.c", metadata !"/home/timnor01/a64-trunk/build"}
Manman Ren41245b42013-12-09 20:58:24 +0000101!30 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}