1// RUN: fir-opt --add-debug-info --mlir-print-debuginfo %s | FileCheck %s 2 3module attributes {dlti.dl_spec = #dlti.dl_spec<>} { 4 fir.global @__BLNK__ {alignment = 4 : i64} : tuple<i32, !fir.array<8xi8>> {} loc(#loc1) 5 fir.global @a_ {alignment = 4 : i64} : tuple<i32, !fir.array<8xi8>> {} loc(#loc2) 6 func.func @f1() { 7 %c9_i32 = arith.constant 9 : i32 8 %c6_i32 = arith.constant 6 : i32 9 %cst = arith.constant 4.400000e+00 : f32 10 %cst_0 = arith.constant 3.300000e+00 : f32 11 %cst_1 = arith.constant 2.200000e+00 : f32 12 %cst_2 = arith.constant 1.100000e+00 : f32 13 %c4 = arith.constant 4 : index 14 %c0 = arith.constant 0 : index 15 %0 = fir.address_of(@__BLNK__) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 16 %1 = fir.convert %0 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 17 %2 = fir.coordinate_of %1, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 18 %3 = fir.convert %2 : (!fir.ref<i8>) -> !fir.ref<f32> 19 %4 = fircg.ext_declare %3 {uniq_name = "_QFf1Ex"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc4) 20 %5 = fir.address_of(@a_) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 21 %6 = fir.convert %5 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 22 %7 = fir.coordinate_of %6, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 23 %8 = fir.convert %7 : (!fir.ref<i8>) -> !fir.ref<f32> 24 %9 = fircg.ext_declare %8 {uniq_name = "_QFf1Exa"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc5) 25 %10 = fir.coordinate_of %1, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 26 %11 = fir.convert %10 : (!fir.ref<i8>) -> !fir.ref<f32> 27 %12 = fircg.ext_declare %11 {uniq_name = "_QFf1Ey"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc6) 28 %13 = fir.coordinate_of %6, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 29 %14 = fir.convert %13 : (!fir.ref<i8>) -> !fir.ref<f32> 30 %15 = fircg.ext_declare %14 {uniq_name = "_QFf1Eya"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc7) 31 return 32 } loc(#loc3) 33 func.func @f2() { 34 %c16_i32 = arith.constant 16 : i32 35 %c6_i32 = arith.constant 6 : i32 36 %c8 = arith.constant 8 : index 37 %c4 = arith.constant 4 : index 38 %c0 = arith.constant 0 : index 39 %0 = fir.address_of(@__BLNK__) : !fir.ref<tuple<i32, !fir.array<8xi8>>> loc(#loc19) 40 %1 = fir.convert %0 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 41 %2 = fir.coordinate_of %1, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 42 %3 = fir.convert %2 : (!fir.ref<i8>) -> !fir.ref<f32> 43 %4 = fircg.ext_declare %3 {uniq_name = "_QFf2Ex"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc9) 44 %5 = fir.address_of(@a_) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 45 %6 = fir.convert %5 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 46 %7 = fir.coordinate_of %6, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 47 %8 = fir.convert %7 : (!fir.ref<i8>) -> !fir.ref<f32> 48 %9 = fircg.ext_declare %8 {uniq_name = "_QFf2Exa"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc10) 49 %10 = fir.coordinate_of %1, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 50 %11 = fir.convert %10 : (!fir.ref<i8>) -> !fir.ref<f32> 51 %12 = fircg.ext_declare %11 {uniq_name = "_QFf2Ey"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc11) 52 %13 = fir.coordinate_of %6, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 53 %14 = fir.convert %13 : (!fir.ref<i8>) -> !fir.ref<f32> 54 %15 = fircg.ext_declare %14 {uniq_name = "_QFf2Eya"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc12) 55 %16 = fir.coordinate_of %1, %c8 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 56 %17 = fir.convert %16 : (!fir.ref<i8>) -> !fir.ref<f32> 57 %18 = fircg.ext_declare %17 {uniq_name = "_QFf2Ez"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc13) 58 %19 = fir.coordinate_of %6, %c8 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 59 %20 = fir.convert %19 : (!fir.ref<i8>) -> !fir.ref<f32> 60 %21 = fircg.ext_declare %20 {uniq_name = "_QFf2Eza"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc14) 61 return 62 } loc(#loc8) 63 func.func @f3() { 64 %c24_i32 = arith.constant 24 : i32 65 %c23_i32 = arith.constant 23 : i32 66 %c6_i32 = arith.constant 6 : i32 67 %c0 = arith.constant 0 : index 68 %0 = fir.address_of(@__BLNK__) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 69 %1 = fir.convert %0 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 70 %2 = fir.coordinate_of %1, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 71 %3 = fir.convert %2 : (!fir.ref<i8>) -> !fir.ref<i32> 72 %4 = fircg.ext_declare %3 {uniq_name = "_QFf3Ex"} : (!fir.ref<i32>) -> !fir.ref<i32> loc(#loc16) 73 %5 = fir.address_of(@a_) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 74 %6 = fir.convert %5 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 75 %7 = fir.coordinate_of %6, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 76 %8 = fir.convert %7 : (!fir.ref<i8>) -> !fir.ref<i32> 77 %9 = fircg.ext_declare %8 {uniq_name = "_QFf3Exa"} : (!fir.ref<i32>) -> !fir.ref<i32> loc(#loc17) 78 return 79 } loc(#loc15) 80 func.func @test() { 81 %c34_i32 = arith.constant 34 : i32 82 %c6_i32 = arith.constant 6 : i32 83 %c8 = arith.constant 8 : index 84 %c4 = arith.constant 4 : index 85 %c0 = arith.constant 0 : index 86 %0 = fir.address_of(@__BLNK__) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 87 %1 = fir.convert %0 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 88 %2 = fir.coordinate_of %1, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 89 %3 = fir.convert %2 : (!fir.ref<i8>) -> !fir.ref<f32> 90 %4 = fircg.ext_declare %3 {uniq_name = "_QFEv1"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc19) 91 %5 = fir.coordinate_of %1, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 92 %6 = fir.convert %5 : (!fir.ref<i8>) -> !fir.ref<f32> 93 %7 = fircg.ext_declare %6 {uniq_name = "_QFEv2"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc20) 94 %8 = fir.coordinate_of %1, %c8 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 95 %9 = fir.convert %8 : (!fir.ref<i8>) -> !fir.ref<f32> 96 %10 = fircg.ext_declare %9 {uniq_name = "_QFEv3"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc21) 97 %11 = fir.address_of(@a_) : !fir.ref<tuple<i32, !fir.array<8xi8>>> 98 %12 = fir.convert %11 : (!fir.ref<tuple<i32, !fir.array<8xi8>>>) -> !fir.ref<!fir.array<?xi8>> 99 %13 = fir.coordinate_of %12, %c0 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 100 %14 = fir.convert %13 : (!fir.ref<i8>) -> !fir.ref<f32> 101 %15 = fircg.ext_declare %14 {uniq_name = "_QFEva1"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc22) 102 %16 = fir.coordinate_of %12, %c4 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 103 %17 = fir.convert %16 : (!fir.ref<i8>) -> !fir.ref<f32> 104 %18 = fircg.ext_declare %17 {uniq_name = "_QFEva2"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc23) 105 %19 = fir.coordinate_of %12, %c8 : (!fir.ref<!fir.array<?xi8>>, index) -> !fir.ref<i8> 106 %20 = fir.convert %19 : (!fir.ref<i8>) -> !fir.ref<f32> 107 %21 = fircg.ext_declare %20 {uniq_name = "_QFEva3"} : (!fir.ref<f32>) -> !fir.ref<f32> loc(#loc24) 108 return 109 } loc(#loc18) 110} 111 112#loc1 = loc(unknown) 113#loc2 = loc(unknown) 114#loc3 = loc("common.f90":10:1) 115#loc4 = loc("common.f90":12:19) 116#loc5 = loc("common.f90":12:25) 117#loc6 = loc("common.f90":12:22) 118#loc7 = loc("common.f90":12:29) 119#loc8 = loc("common.f90":20:3) 120#loc9 = loc("common.f90":22:3) 121#loc10 = loc("common.f90":22:6) 122#loc11 = loc("common.f90":22:9) 123#loc12 = loc("common.f90":22:13) 124#loc13 = loc("common.f90":22:16) 125#loc14 = loc("common.f90":22:19) 126#loc15 = loc("common.f90":32:18) 127#loc16 = loc("common.f90":35:7) 128#loc17 = loc("common.f90":35:10) 129#loc18 = loc("common.f90":40:1) 130#loc19 = loc("common.f90":43:19) 131#loc20 = loc("common.f90":43:28) 132#loc21 = loc("common.f90":43:22) 133#loc22 = loc("common.f90":43:32) 134#loc23 = loc("common.f90":43:25) 135#loc24 = loc("common.f90":43:36) 136 137 138// CHECK-DAG: #[[XF1:.*]] = #llvm.di_global_variable<scope = #[[CBF1:.+]], name = "x", linkageName = "_QFf1Ex"{{.*}}> 139// CHECK-DAG: #[[YF1:.*]] = #llvm.di_global_variable<scope = #[[CBF1]], name = "y", linkageName = "_QFf1Ey"{{.*}}> 140// CHECK-DAG: #[[EXPXF1:.*]] = #llvm.di_global_variable_expression<var = #[[XF1]]> 141// CHECK-DAG: #[[EXPYF1:.*]] = #llvm.di_global_variable_expression<var = #[[YF1]], expr = <[DW_OP_plus_uconst(4)]>> 142// CHECK-DAG: #[[XAF1:.*]] = #llvm.di_global_variable<scope = #[[CBAF1:.+]], name = "xa", linkageName = "_QFf1Exa"{{.*}}> 143// CHECK-DAG: #[[YAF1:.*]] = #llvm.di_global_variable<scope = #[[CBAF1]], name = "ya", linkageName = "_QFf1Eya"{{.*}}> 144// CHECK-DAG: #[[EXPXAF1:.*]] = #llvm.di_global_variable_expression<var = #[[XAF1]]> 145// CHECK-DAG: #[[EXPYAF1:.*]] = #llvm.di_global_variable_expression<var = #[[YAF1]], expr = <[DW_OP_plus_uconst(4)]>> 146 147// CHECK-DAG: #[[XF2:.*]] = #llvm.di_global_variable<scope = #[[CBF2:.+]], name = "x", linkageName = "_QFf2Ex"{{.*}}> 148// CHECK-DAG: #[[YF2:.*]] = #llvm.di_global_variable<scope = #[[CBF2]], name = "y", linkageName = "_QFf2Ey"{{.*}}> 149// CHECK-DAG: #[[ZF2:.*]] = #llvm.di_global_variable<scope = #[[CBF2]], name = "z", linkageName = "_QFf2Ez"{{.*}}> 150// CHECK-DAG: #[[EXPXF2:.*]] = #llvm.di_global_variable_expression<var = #[[XF2]]> 151// CHECK-DAG: #[[EXPYF2:.*]] = #llvm.di_global_variable_expression<var = #[[YF2]], expr = <[DW_OP_plus_uconst(4)]>> 152// CHECK-DAG: #[[EXPZF2:.*]] = #llvm.di_global_variable_expression<var = #[[ZF2]], expr = <[DW_OP_plus_uconst(8)]>> 153// CHECK-DAG: #[[XAF2:.*]] = #llvm.di_global_variable<scope = #[[CBAF2:.+]], name = "xa", linkageName = "_QFf2Exa"{{.*}}> 154// CHECK-DAG: #[[YAF2:.*]] = #llvm.di_global_variable<scope = #[[CBAF2]], name = "ya", linkageName = "_QFf2Eya"{{.*}}> 155// CHECK-DAG: #[[ZAF2:.*]] = #llvm.di_global_variable<scope = #[[CBAF2]], name = "za", linkageName = "_QFf2Eza"{{.*}}> 156// CHECK-DAG: #[[EXPXAF2:.*]] = #llvm.di_global_variable_expression<var = #[[XAF2]]> 157// CHECK-DAG: #[[EXPYAF2:.*]] = #llvm.di_global_variable_expression<var = #[[YAF2]], expr = <[DW_OP_plus_uconst(4)]>> 158// CHECK-DAG: #[[EXPZAF2:.*]] = #llvm.di_global_variable_expression<var = #[[ZAF2]], expr = <[DW_OP_plus_uconst(8)]>> 159 160// CHECK-DAG: #[[XF3:.*]] = #llvm.di_global_variable<scope = #[[CBF3:.+]], name = "x", linkageName = "_QFf3Ex"{{.*}}> 161// CHECK-DAG: #[[EXPXF3:.*]] = #llvm.di_global_variable_expression<var = #[[XF3]]> 162// CHECK-DAG: #[[XAF3:.*]] = #llvm.di_global_variable<scope = #[[CBAF3:.+]], name = "xa", linkageName = "_QFf3Exa"{{.*}}> 163// CHECK-DAG: #[[EXPXAF3:.*]] = #llvm.di_global_variable_expression<var = #[[XAF3]]> 164 165// CHECK-DAG: #[[V1:.*]] = #llvm.di_global_variable<scope = #[[CBM:.+]], name = "v1", linkageName = "_QFEv1"{{.*}}> 166// CHECK-DAG: #[[EXPV1:.*]] = #llvm.di_global_variable_expression<var = #[[V1]]> 167// CHECK-DAG: #[[V2:.*]] = #llvm.di_global_variable<scope = #[[CBM]], name = "v2", linkageName = "_QFEv2"{{.*}}> 168// CHECK-DAG: #[[EXPV2:.*]] = #llvm.di_global_variable_expression<var = #[[V2]], expr = <[DW_OP_plus_uconst(4)]>> 169// CHECK-DAG: #[[V3:.*]] = #llvm.di_global_variable<scope = #[[CBM]], name = "v3", linkageName = "_QFEv3"{{.*}}> 170// CHECK-DAG: #[[EXPV3:.*]] = #llvm.di_global_variable_expression<var = #[[V3]], expr = <[DW_OP_plus_uconst(8)]>> 171// CHECK-DAG: #[[VA1:.*]] = #llvm.di_global_variable<scope = #[[CBAM:.+]], name = "va1", linkageName = "_QFEva1"{{.*}}> 172// CHECK-DAG: #[[EXPVA1:.*]] = #llvm.di_global_variable_expression<var = #[[VA1]]> 173// CHECK-DAG: #[[VA2:.*]] = #llvm.di_global_variable<scope = #[[CBAM]], name = "va2", linkageName = "_QFEva2"{{.*}}> 174// CHECK-DAG: #[[EXPVA2:.*]] = #llvm.di_global_variable_expression<var = #[[VA2]], expr = <[DW_OP_plus_uconst(4)]>> 175// CHECK-DAG: #[[VA3:.*]] = #llvm.di_global_variable<scope = #[[CBAM]], name = "va3", linkageName = "_QFEva3"{{.*}}> 176// CHECK-DAG: #[[EXPVA3:.*]] = #llvm.di_global_variable_expression<var = #[[VA3]], expr = <[DW_OP_plus_uconst(8)]>> 177 178// CHECK-DAG: #[[F1:.*]] = #llvm.di_subprogram<{{.*}}name = "f1"{{.*}}> 179// CHECK-DAG: #[[F2:.*]] = #llvm.di_subprogram<{{.*}}name = "f2"{{.*}}> 180// CHECK-DAG: #[[F3:.*]] = #llvm.di_subprogram<{{.*}}name = "f3"{{.*}}> 181// CHECK-DAG: #[[TEST:.*]] = #llvm.di_subprogram<{{.*}}name = "test"{{.*}}> 182 183// CHECK-DAG: #[[CBF1]] = #llvm.di_common_block<scope = #[[F1]], name = "__BLNK__"{{.*}}> 184// CHECK-DAG: #[[CBF2]] = #llvm.di_common_block<scope = #[[F2]], name = "__BLNK__"{{.*}}> 185// CHECK-DAG: #[[CBF3]] = #llvm.di_common_block<scope = #[[F3]], name = "__BLNK__"{{.*}}> 186// CHECK-DAG: #[[CBM]] = #llvm.di_common_block<scope = #[[TEST]], name = "__BLNK__"{{.*}}> 187// CHECK-DAG: #[[CBAF1]] = #llvm.di_common_block<scope = #[[F1]], name = "a"{{.*}}> 188// CHECK-DAG: #[[CBAF2]] = #llvm.di_common_block<scope = #[[F2]], name = "a"{{.*}}> 189// CHECK-DAG: #[[CBAF3]] = #llvm.di_common_block<scope = #[[F3]], name = "a"{{.*}}> 190// CHECK-DAG: #[[CBAM]] = #llvm.di_common_block<scope = #[[TEST]], name = "a"{{.*}}> 191 192// CHECK-DAG: fir.global @__BLNK__ {{.*}} loc(#[[LOC1:.*]]) 193// CHECK-DAG: fir.global @a_ {{.*}} loc(#[[LOC2:.*]]) 194// CHECK-DAG: #[[LOC1]] 195// CHECK-DAG-SAME: #[[EXPXF1]] 196// CHECK-DAG-SAME: #[[EXPYF1]] 197// CHECK-DAG-SAME: #[[EXPXF2]] 198// CHECK-DAG-SAME: #[[EXPYF2]] 199// CHECK-DAG-SAME: #[[EXPZF2]] 200// CHECK-DAG-SAME: #[[EXPXF3]] 201// CHECK-DAG-SAME: #[[EXPV1]] 202// CHECK-DAG-SAME: #[[EXPV2]] 203// CHECK-DAG-SAME: #[[EXPV3]] 204// CHECK-DAG: #[[LOC2]] 205// CHECK-DAG-SAME: #[[EXPXAF1]] 206// CHECK-DAG-SAME: #[[EXPYAF1]] 207// CHECK-DAG-SAME: #[[EXPXAF2]] 208// CHECK-DAG-SAME: #[[EXPYAF2]] 209// CHECK-DAG-SAME: #[[EXPZAF2]] 210// CHECK-DAG-SAME: #[[EXPXAF3]] 211// CHECK-DAG-SAME: #[[EXPVA1]] 212// CHECK-DAG-SAME: #[[EXPVA2]] 213// CHECK-DAG-SAME: #[[EXPVA3]] 214