Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=s390x-linux-gnu -disable-fp-elim < %s | FileCheck %s |
| 2 | ; |
| 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. |
Richard Sandiford | 9b9e057 | 2014-01-13 15:42:16 +0000 | [diff] [blame] | 5 | ; Originally a copy of the AArch64 test, commandeered for SystemZ. |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 6 | ; |
| 7 | ; First make sure main_arr is where we expect it: %r11 + 164 |
| 8 | ; |
| 9 | ; CHECK: main: |
| 10 | ; CHECK: aghi %r15, -568 |
Richard Sandiford | 891a7e7 | 2013-06-27 09:42:10 +0000 | [diff] [blame] | 11 | ; CHECK: la %r2, 164(%r11) |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 12 | ; CHECK: brasl %r14, populate_array@PLT |
| 13 | ; |
Eric Christopher | 9cd26af | 2013-09-20 23:22:52 +0000 | [diff] [blame] | 14 | ; CHECK: .Linfo_string7: |
| 15 | ; CHECK-NEXT: main_arr |
| 16 | ; |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 17 | ; Now check that the debugging information reflects this: |
| 18 | ; CHECK: DW_TAG_variable |
| 19 | ; CHECK-NEXT: .long .Linfo_string7 |
| 20 | ; |
| 21 | ; Rather hard-coded, but 145 => DW_OP_fbreg and the .ascii is the sleb128 |
| 22 | ; encoding of 164: |
| 23 | ; CHECK: DW_AT_location |
| 24 | ; CHECK-NEXT: .byte 145 |
| 25 | ; CHECK-NEXT: .ascii "\244\001" |
| 26 | ; |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 27 | |
| 28 | |
| 29 | @.str = private unnamed_addr constant [13 x i8] c"Total is %d\0A\00", align 2 |
| 30 | |
| 31 | declare void @populate_array(i32*, i32) nounwind |
| 32 | |
| 33 | declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone |
| 34 | |
| 35 | declare i32 @sum_array(i32*, i32) nounwind |
| 36 | |
| 37 | define i32 @main() nounwind { |
| 38 | entry: |
| 39 | %retval = alloca i32, align 4 |
| 40 | %main_arr = alloca [100 x i32], align 4 |
| 41 | %val = alloca i32, align 4 |
Richard Sandiford | 9b9e057 | 2014-01-13 15:42:16 +0000 | [diff] [blame] | 42 | store volatile i32 0, i32* %retval |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 43 | call void @llvm.dbg.declare(metadata !{[100 x i32]* %main_arr}, metadata !17), !dbg !22 |
| 44 | call void @llvm.dbg.declare(metadata !{i32* %val}, metadata !23), !dbg !24 |
| 45 | %arraydecay = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !25 |
| 46 | call void @populate_array(i32* %arraydecay, i32 100), !dbg !25 |
| 47 | %arraydecay1 = getelementptr inbounds [100 x i32]* %main_arr, i32 0, i32 0, !dbg !26 |
| 48 | %call = call i32 @sum_array(i32* %arraydecay1, i32 100), !dbg !26 |
| 49 | store i32 %call, i32* %val, align 4, !dbg !26 |
| 50 | %0 = load i32* %val, align 4, !dbg !27 |
| 51 | %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0), i32 %0), !dbg !27 |
| 52 | ret i32 0, !dbg !28 |
| 53 | } |
| 54 | |
| 55 | declare i32 @printf(i8*, ...) |
| 56 | |
| 57 | !llvm.dbg.cu = !{!0} |
Manman Ren | 409558f | 2013-11-22 21:49:45 +0000 | [diff] [blame] | 58 | !llvm.module.flags = !{!30} |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 59 | |
| 60 | !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 Blaikie | 5e390e4 | 2014-02-04 01:23:52 +0000 | [diff] [blame^] | 61 | !1 = metadata !{} |
Ulrich Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 62 | !3 = metadata !{metadata !5, metadata !11, metadata !14} |
Manman Ren | e1fb943 | 2013-07-25 06:43:01 +0000 | [diff] [blame] | 63 | !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 Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 64 | !6 = metadata !{i32 786473, metadata !29} ; [ DW_TAG_file_type ] |
Manman Ren | 7e9448f | 2013-09-09 00:12:17 +0000 | [diff] [blame] | 65 | !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 Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 66 | !8 = metadata !{null, metadata !9, metadata !10} |
| 67 | !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] |
| 68 | !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 Ren | e1fb943 | 2013-07-25 06:43:01 +0000 | [diff] [blame] | 69 | !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 Ren | 7e9448f | 2013-09-09 00:12:17 +0000 | [diff] [blame] | 70 | !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 Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 71 | !13 = metadata !{metadata !10, metadata !9, metadata !10} |
Manman Ren | e1fb943 | 2013-07-25 06:43:01 +0000 | [diff] [blame] | 72 | !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 Ren | 7e9448f | 2013-09-09 00:12:17 +0000 | [diff] [blame] | 73 | !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 Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 74 | !16 = metadata !{metadata !10} |
| 75 | !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 Ren | e1fb943 | 2013-07-25 06:43:01 +0000 | [diff] [blame] | 76 | !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 Ren | deeafd8 | 2013-09-06 21:03:58 +0000 | [diff] [blame] | 77 | !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 Weigand | 08bd615 | 2013-05-06 16:18:29 +0000 | [diff] [blame] | 78 | !20 = metadata !{i32 786465, i64 0, i64 99} ; [ DW_TAG_subrange_type ] [0, 99] |
| 79 | !22 = metadata !{i32 19, i32 7, metadata !18, null} |
| 80 | !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] |
| 81 | !24 = metadata !{i32 20, i32 7, metadata !18, null} |
| 82 | !25 = metadata !{i32 22, i32 3, metadata !18, null} |
| 83 | !26 = metadata !{i32 23, i32 9, metadata !18, null} |
| 84 | !27 = metadata !{i32 24, i32 3, metadata !18, null} |
| 85 | !28 = metadata !{i32 26, i32 3, metadata !18, null} |
| 86 | !29 = metadata !{metadata !"simple.c", metadata !"/home/timnor01/a64-trunk/build"} |
Manman Ren | 409558f | 2013-11-22 21:49:45 +0000 | [diff] [blame] | 87 | !30 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} |