blob: 323bb32f3a15505eed7585a94f31c71cb8aab919 [file] [log] [blame]
Ulrich Weigand08bd6152013-05-06 16:18:29 +00001; RUN: llc -mtriple=s390x-linux-gnu -disable-fp-elim < %s | FileCheck %s
David Blaikie2f753512014-05-23 21:11:46 +00002; RUN: llc -mtriple=s390x-linux-gnu -disable-fp-elim -filetype=obj < %s \
3; RUN: | llvm-dwarfdump -debug-dump=info - | FileCheck --check-prefix=DEBUG %s
Ulrich Weigand08bd6152013-05-06 16:18:29 +00004;
5; This is a regression test making sure the location of variables is correct in
6; debugging information, even if they're addressed via the frame pointer.
Richard Sandiford9b9e0572014-01-13 15:42:16 +00007; Originally a copy of the AArch64 test, commandeered for SystemZ.
Ulrich Weigand08bd6152013-05-06 16:18:29 +00008;
9; First make sure main_arr is where we expect it: %r11 + 164
10;
11; CHECK: main:
12; CHECK: aghi %r15, -568
Richard Sandiford891a7e72013-06-27 09:42:10 +000013; CHECK: la %r2, 164(%r11)
Ulrich Weigand08bd6152013-05-06 16:18:29 +000014; CHECK: brasl %r14, populate_array@PLT
David Blaikie2f753512014-05-23 21:11:46 +000015
16; DEBUG: DW_TAG_variable
David Blaikie2f753512014-05-23 21:11:46 +000017; Rather hard-coded, but 0x91 => DW_OP_fbreg and 0xa401 is SLEB128 encoded 164.
18; DEBUG-NOT: DW_TAG
19; DEBUG: DW_AT_location {{.*}}(<0x3> 91 a4 01 )
David Blaikieeb1a2722014-06-13 22:18:23 +000020; DEBUG-NOT: DW_TAG
21; DEBUG: DW_AT_name {{.*}} "main_arr"
Ulrich Weigand08bd6152013-05-06 16:18:29 +000022
23
24@.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 2
25
26declare void @populate_array(i32*, i32) nounwind
27
Adrian Prantl87b7eb92014-10-01 18:55:02 +000028declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone
Ulrich Weigand08bd6152013-05-06 16:18:29 +000029
30declare i32 @sum_array(i32*, i32) nounwind
31
32define i32 @main() nounwind {
33entry:
34 %retval = alloca i32, align 4
35 %main_arr = alloca [100 x i32], align 4
36 %val = alloca i32, align 4
Richard Sandiford9b9e0572014-01-13 15:42:16 +000037 store volatile i32 0, i32* %retval
Adrian Prantl87b7eb92014-10-01 18:55:02 +000038 call void @llvm.dbg.declare(metadata !{[100 x i32]* %main_arr}, metadata !17, metadata !{i32 786690}), !dbg !22
39 call void @llvm.dbg.declare(metadata !{i32* %val}, metadata !23, metadata !{i32 786690}), !dbg !24
Ulrich Weigand08bd6152013-05-06 16:18:29 +000040 %arraydecay = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !25
41 call void @populate_array(i32* %arraydecay, i32 100), !dbg !25
42 %arraydecay1 = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !26
43 %call = call i32 @sum_array(i32* %arraydecay1, i32 100), !dbg !26
44 store i32 %call, i32* %val, align 4, !dbg !26
45 %0 = load i32* %val, align 4, !dbg !27
46 %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !27
47 ret i32 0, !dbg !28
48}
49
50declare i32 @printf(i8*, ...)
51
52!llvm.dbg.cu = !{!0}
Manman Ren409558f2013-11-22 21:49:45 +000053!llvm.module.flags = !{!30}
Ulrich Weigand08bd6152013-05-06 16:18:29 +000054
55!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]
David Blaikie5e390e42014-02-04 01:23:52 +000056!1 = metadata !{}
Ulrich Weigand08bd6152013-05-06 16:18:29 +000057!3 = metadata !{metadata !5, metadata !11, metadata !14}
Manman Rene1fb9432013-07-25 06:43:01 +000058!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]
Ulrich Weigand08bd6152013-05-06 16:18:29 +000059!6 = metadata !{i32 786473, metadata !29} ; [ DW_TAG_file_type ]
Manman Ren7e9448f2013-09-09 00:12:17 +000060!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 ]
Ulrich Weigand08bd6152013-05-06 16:18:29 +000061!8 = metadata !{null, metadata !9, metadata !10}
62!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]
63!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 Rene1fb9432013-07-25 06:43:01 +000064!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 Ren7e9448f2013-09-09 00:12:17 +000065!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 ]
Ulrich Weigand08bd6152013-05-06 16:18:29 +000066!13 = metadata !{metadata !10, metadata !9, metadata !10}
Manman Rene1fb9432013-07-25 06:43:01 +000067!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 Ren7e9448f2013-09-09 00:12:17 +000068!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 ]
Ulrich Weigand08bd6152013-05-06 16:18:29 +000069!16 = metadata !{metadata !10}
70!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 Rene1fb9432013-07-25 06:43:01 +000071!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 Rendeeafd82013-09-06 21:03:58 +000072!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]
Ulrich Weigand08bd6152013-05-06 16:18:29 +000073!20 = metadata !{i32 786465, i64 0, i64 99} ; [ DW_TAG_subrange_type ] [0, 99]
74!22 = metadata !{i32 19, i32 7, metadata !18, null}
75!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]
76!24 = metadata !{i32 20, i32 7, metadata !18, null}
77!25 = metadata !{i32 22, i32 3, metadata !18, null}
78!26 = metadata !{i32 23, i32 9, metadata !18, null}
79!27 = metadata !{i32 24, i32 3, metadata !18, null}
80!28 = metadata !{i32 26, i32 3, metadata !18, null}
81!29 = metadata !{metadata !"simple.c", metadata !"/home/timnor01/a64-trunk/build"}
Manman Ren409558f2013-11-22 21:49:45 +000082!30 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}