brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.8 KiB · 7f90384 Raw
409 lines · plain
1// Test alias analysis queries for host associated accesses.2// RUN: fir-opt %s --test-fir-alias-analysis -split-input-file --mlir-disable-threading 2>&1 | FileCheck %s3 4// subroutine test15//   integer :: x(10)6// contains7//   subroutine inner(y)8//     integer :: y(10)9//     x(1) = y(1)10//   end subroutine inner11// end subroutine test112 13// F18 15.5.2.13 (4):14// CHECK: test1_y(1)#0 <-> test1_x(1)#0: NoAlias15func.func @_QFtest1Pinner(%arg0: !fir.ref<!fir.array<10xi32>> {fir.bindc_name = "y"}, %arg1: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {16  %c0_i32 = arith.constant 0 : i3217  %0 = fir.coordinate_of %arg1, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>18  %1 = fir.load %0 : !fir.ref<!fir.box<!fir.array<10xi32>>>19  %2 = fir.box_addr %1 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>20  %c0 = arith.constant 0 : index21  %3:3 = fir.box_dims %1, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)22  %4 = fir.shape %3#1 : (index) -> !fir.shape<1>23  %5:2 = hlfir.declare %2(%4) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest1Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)24  %c10 = arith.constant 10 : index25  %6 = fir.shape %c10 : (index) -> !fir.shape<1>26  %7:2 = hlfir.declare %arg0(%6) {uniq_name = "_QFtest1FinnerEy"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)27  %c1 = arith.constant 1 : index28  %8 = hlfir.designate %7#0 (%c1) {test.ptr = "test1_y(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>29  %9 = fir.load %8 : !fir.ref<i32>30  %c1_0 = arith.constant 1 : index31  %10 = hlfir.designate %5#0 (%c1_0) {test.ptr = "test1_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>32  hlfir.assign %9 to %10 : i32, !fir.ref<i32>33  return34}35 36// -----37 38// subroutine test239//   integer, target :: x(10)40//   call inner(x)41// contains42//   subroutine inner(y)43//     integer, pointer, intent(in) :: y(:)44//     x(1) = y(1)45//   end subroutine inner46// end subroutine test247 48// F18 15.5.2.13 (4) (a):49// CHECK: test2_y(1)#0 <-> test2_x(1)#0: MayAlias50func.func @_QFtest2Pinner(%arg0: !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>> {fir.bindc_name = "y"}, %arg1: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {51  %c0_i32 = arith.constant 0 : i3252  %0 = fir.coordinate_of %arg1, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>53  %1 = fir.load %0 : !fir.ref<!fir.box<!fir.array<10xi32>>>54  %2 = fir.box_addr %1 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>55  %c0 = arith.constant 0 : index56  %3:3 = fir.box_dims %1, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)57  %4 = fir.shape %3#1 : (index) -> !fir.shape<1>58  %5:2 = hlfir.declare %2(%4) {fortran_attrs = #fir.var_attrs<target, host_assoc>, uniq_name = "_QFtest2Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)59  %6:2 = hlfir.declare %arg0 {fortran_attrs = #fir.var_attrs<intent_in, pointer>, uniq_name = "_QFtest2FinnerEy"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>)60  %7 = fir.load %6#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>61  %c1 = arith.constant 1 : index62  %8 = hlfir.designate %7 (%c1) {test.ptr = "test2_y(1)"} : (!fir.box<!fir.ptr<!fir.array<?xi32>>>, index) -> !fir.ref<i32>63  %9 = fir.load %8 : !fir.ref<i32>64  %c1_0 = arith.constant 1 : index65  %10 = hlfir.designate %5#0 (%c1_0) {test.ptr = "test2_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>66  hlfir.assign %9 to %10 : i32, !fir.ref<i32>67  return68}69 70// -----71 72// subroutine test373//   integer :: x(10)74//   call inner(x)75// contains76//   subroutine inner(y)77//     integer, target :: y(:)78//     x(1) = y(1)79//   end subroutine inner80// end subroutine test381 82// F18 15.5.2.13 (4) (b):83// CHECK: test3_y(1)#0 <-> test3_x(1)#0: MayAlias84func.func @_QFtest3Pinner(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "y", fir.target}, %arg1: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {85  %c0_i32 = arith.constant 0 : i3286  %0 = fir.coordinate_of %arg1, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>87  %1 = fir.load %0 : !fir.ref<!fir.box<!fir.array<10xi32>>>88  %2 = fir.box_addr %1 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>89  %c0 = arith.constant 0 : index90  %3:3 = fir.box_dims %1, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)91  %4 = fir.shape %3#1 : (index) -> !fir.shape<1>92  %5:2 = hlfir.declare %2(%4) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest3Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)93  %6:2 = hlfir.declare %arg0 {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QFtest3FinnerEy"} : (!fir.box<!fir.array<?xi32>>) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)94  %c1 = arith.constant 1 : index95  %7 = hlfir.designate %6#0 (%c1) {test.ptr = "test3_y(1)"} : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>96  %8 = fir.load %7 : !fir.ref<i32>97  %c1_0 = arith.constant 1 : index98  %9 = hlfir.designate %5#0 (%c1_0) {test.ptr = "test3_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>99  hlfir.assign %8 to %9 : i32, !fir.ref<i32>100  return101}102 103// -----104 105// subroutine test4106//   integer :: n(10), m(10)107//   equivalence (n, m)108// contains109//   subroutine inner()110//     n(1) = m(1)111//   end subroutine inner112// end subroutine test4113 114// CHECK: test4_m(1)#0 <-> test4_n(1)#0: MayAlias115func.func @_QFtest4Pinner(%arg0: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>, !fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {116  %c0_i32 = arith.constant 0 : i32117  %0 = fir.coordinate_of %arg0, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>, !fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>118  %1 = fir.load %0 : !fir.ref<!fir.box<!fir.array<10xi32>>>119  %2 = fir.box_addr %1 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>120  %c0 = arith.constant 0 : index121  %3:3 = fir.box_dims %1, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)122  %4 = fir.shape %3#1 : (index) -> !fir.shape<1>123  %5:2 = hlfir.declare %2(%4) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest4En"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)124  %c1_i32 = arith.constant 1 : i32125  %6 = fir.coordinate_of %arg0, %c1_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>, !fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>126  %7 = fir.load %6 : !fir.ref<!fir.box<!fir.array<10xi32>>>127  %8 = fir.box_addr %7 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>128  %c0_0 = arith.constant 0 : index129  %9:3 = fir.box_dims %7, %c0_0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)130  %10 = fir.shape %9#1 : (index) -> !fir.shape<1>131  %11:2 = hlfir.declare %8(%10) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest4Em"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)132  %12 = fir.alloca !fir.array<40xi8> {uniq_name = "_QFtest4Em"}133  %c1 = arith.constant 1 : index134  %13 = hlfir.designate %11#0 (%c1) {test.ptr = "test4_m(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>135  %14 = fir.load %13 : !fir.ref<i32>136  %c1_1 = arith.constant 1 : index137  %15 = hlfir.designate %5#0 (%c1_1) {test.ptr = "test4_n(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>138  hlfir.assign %14 to %15 : i32, !fir.ref<i32>139  return140}141 142// -----143 144// subroutine test5145//   integer, target :: x(10)146// contains147//   subroutine inner(y)148//     integer :: y(10)149//     x(1) = y(1)150//   end subroutine inner151// end subroutine test5152 153// F18 15.5.2.13 (4):154// CHECK: test5_y(1)#0 <-> test5_x(1)#0: NoAlias155func.func @_QFtest5Pinner(%arg0: !fir.ref<!fir.array<10xi32>> {fir.bindc_name = "y"}, %arg1: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {156  %c0_i32 = arith.constant 0 : i32157  %0 = fir.coordinate_of %arg1, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>158  %1 = fir.load %0 : !fir.ref<!fir.box<!fir.array<10xi32>>>159  %2 = fir.box_addr %1 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>160  %c0 = arith.constant 0 : index161  %3:3 = fir.box_dims %1, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)162  %4 = fir.shape %3#1 : (index) -> !fir.shape<1>163  %5:2 = hlfir.declare %2(%4) {fortran_attrs = #fir.var_attrs<target, host_assoc>, uniq_name = "_QFtest5Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)164  %c10 = arith.constant 10 : index165  %6 = fir.shape %c10 : (index) -> !fir.shape<1>166  %7:2 = hlfir.declare %arg0(%6) {uniq_name = "_QFtest5FinnerEy"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)167  %c1 = arith.constant 1 : index168  %8 = hlfir.designate %7#0 (%c1) {test.ptr = "test5_y(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>169  %9 = fir.load %8 : !fir.ref<i32>170  %c1_0 = arith.constant 1 : index171  %10 = hlfir.designate %5#0 (%c1_0) {test.ptr = "test5_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>172  hlfir.assign %9 to %10 : i32, !fir.ref<i32>173  return174}175 176// -----177 178// subroutine test6179//   integer, pointer :: x(:)180// contains181//   subroutine inner(y)182//     integer :: y(10)183//     x(1) = y(1)184//   end subroutine inner185// end subroutine test6186 187// F18 15.5.2.13 (4):188// FIXME: 'x' is classified as Indirect access leading to a conservative reply:189// CHECK: test6_y(1)#0 <-> test6_x(1)#0: MayAlias190func.func @_QFtest6Pinner(%arg0: !fir.ref<!fir.array<10xi32>> {fir.bindc_name = "y"}, %arg1: !fir.ref<tuple<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>> {fir.host_assoc}) attributes {fir.internal_proc} {191  %c0_i32 = arith.constant 0 : i32192  %0 = fir.coordinate_of %arg1, %c0_i32 : (!fir.ref<tuple<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>>, i32) -> !fir.llvm_ptr<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>193  %1 = fir.load %0 : !fir.llvm_ptr<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>194  %2:2 = hlfir.declare %1 {fortran_attrs = #fir.var_attrs<pointer, host_assoc>, uniq_name = "_QFtest6Ex"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>)195  %c10 = arith.constant 10 : index196  %3 = fir.shape %c10 : (index) -> !fir.shape<1>197  %4:2 = hlfir.declare %arg0(%3) {uniq_name = "_QFtest6FinnerEy"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)198  %c1 = arith.constant 1 : index199  %5 = hlfir.designate %4#0 (%c1) {test.ptr = "test6_y(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>200  %6 = fir.load %5 : !fir.ref<i32>201  %7 = fir.load %2#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>202  %c1_0 = arith.constant 1 : index203  %8 = hlfir.designate %7 (%c1_0) {test.ptr = "test6_x(1)"} : (!fir.box<!fir.ptr<!fir.array<?xi32>>>, index) -> !fir.ref<i32>204  hlfir.assign %6 to %8 : i32, !fir.ref<i32>205  return206}207 208// -----209 210// module globals211//   integer :: g(10)212// end module globals213// subroutine test7214//   use globals215//   integer :: x(10)216// contains217//   subroutine inner()218//     x(1) = g(1)219//   end subroutine inner220// end subroutine test7221 222// CHECK: test7_g(1)#0 <-> test7_x(1)#0: NoAlias223func.func @_QFtest7Pinner(%arg0: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {224  %0 = fir.address_of(@_QMglobalsEg) : !fir.ref<!fir.array<10xi32>>225  %c10 = arith.constant 10 : index226  %1 = fir.shape %c10 : (index) -> !fir.shape<1>227  %2:2 = hlfir.declare %0(%1) {uniq_name = "_QMglobalsEg"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)228  %c0_i32 = arith.constant 0 : i32229  %3 = fir.coordinate_of %arg0, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>230  %4 = fir.load %3 : !fir.ref<!fir.box<!fir.array<10xi32>>>231  %5 = fir.box_addr %4 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>232  %c0 = arith.constant 0 : index233  %6:3 = fir.box_dims %4, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)234  %7 = fir.shape %6#1 : (index) -> !fir.shape<1>235  %8:2 = hlfir.declare %5(%7) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest7Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)236  %c1 = arith.constant 1 : index237  %9 = hlfir.designate %2#0 (%c1) {test.ptr = "test7_g(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>238  %10 = fir.load %9 : !fir.ref<i32>239  %c1_0 = arith.constant 1 : index240  %11 = hlfir.designate %8#0 (%c1_0) {test.ptr = "test7_x(1)"}  : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>241  hlfir.assign %10 to %11 : i32, !fir.ref<i32>242  return243}244fir.global @_QMglobalsEg : !fir.array<10xi32> {245  %0 = fir.undefined !fir.array<10xi32>246  fir.has_value %0 : !fir.array<10xi32>247}248 249// -----250 251// module globals252//   integer, target :: g(10)253// end module globals254// subroutine test8255//   use globals256//   integer :: x(10)257// contains258//   subroutine inner()259//     x(1) = g(1)260//   end subroutine inner261// end subroutine test8262 263// CHECK: test8_g(1)#0 <-> test8_x(1)#0: NoAlias264func.func @_QFtest8Pinner(%arg0: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {265  %0 = fir.address_of(@_QMglobalsEg) : !fir.ref<!fir.array<10xi32>>266  %c10 = arith.constant 10 : index267  %1 = fir.shape %c10 : (index) -> !fir.shape<1>268  %2:2 = hlfir.declare %0(%1) {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QMglobalsEg"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)269  %c0_i32 = arith.constant 0 : i32270  %3 = fir.coordinate_of %arg0, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>271  %4 = fir.load %3 : !fir.ref<!fir.box<!fir.array<10xi32>>>272  %5 = fir.box_addr %4 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>273  %c0 = arith.constant 0 : index274  %6:3 = fir.box_dims %4, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)275  %7 = fir.shape %6#1 : (index) -> !fir.shape<1>276  %8:2 = hlfir.declare %5(%7) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest8Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)277  %c1 = arith.constant 1 : index278  %9 = hlfir.designate %2#0 (%c1) {test.ptr = "test8_g(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>279  %10 = fir.load %9 : !fir.ref<i32>280  %c1_0 = arith.constant 1 : index281  %11 = hlfir.designate %8#0 (%c1_0) {test.ptr = "test8_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>282  hlfir.assign %10 to %11 : i32, !fir.ref<i32>283  return284}285 286// -----287 288// module globals289//   integer, pointer :: g(:)290// end module globals291// subroutine test9292//   use globals293//   integer :: x(10)294// contains295//   subroutine inner()296//     x(1) = g(1)297//   end subroutine inner298// end subroutine test9299 300// CHECK: test9_g(1)#0 <-> test9_x(1)#0: NoAlias301func.func @_QFtest9Pinner(%arg0: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {302  %0 = fir.address_of(@_QMglobalsEg) : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>303  %1:2 = hlfir.declare %0 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QMglobalsEg"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>)304  %c0_i32 = arith.constant 0 : i32305  %2 = fir.coordinate_of %arg0, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>306  %3 = fir.load %2 : !fir.ref<!fir.box<!fir.array<10xi32>>>307  %4 = fir.box_addr %3 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>308  %c0 = arith.constant 0 : index309  %5:3 = fir.box_dims %3, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)310  %6 = fir.shape %5#1 : (index) -> !fir.shape<1>311  %7:2 = hlfir.declare %4(%6) {fortran_attrs = #fir.var_attrs<host_assoc>, uniq_name = "_QFtest9Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)312  %8 = fir.load %1#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>313  %c1 = arith.constant 1 : index314  %9 = hlfir.designate %8 (%c1) {test.ptr = "test9_g(1)"} : (!fir.box<!fir.ptr<!fir.array<?xi32>>>, index) -> !fir.ref<i32>315  %10 = fir.load %9 : !fir.ref<i32>316  %c1_0 = arith.constant 1 : index317  %11 = hlfir.designate %7#0 (%c1_0) {test.ptr = "test9_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>318  hlfir.assign %10 to %11 : i32, !fir.ref<i32>319  return320}321fir.global @_QMglobalsEg : !fir.box<!fir.ptr<!fir.array<?xi32>>> {322  %0 = fir.zero_bits !fir.ptr<!fir.array<?xi32>>323  %c0 = arith.constant 0 : index324  %1 = fir.shape %c0 : (index) -> !fir.shape<1>325  %2 = fir.embox %0(%1) : (!fir.ptr<!fir.array<?xi32>>, !fir.shape<1>) -> !fir.box<!fir.ptr<!fir.array<?xi32>>>326  fir.has_value %2 : !fir.box<!fir.ptr<!fir.array<?xi32>>>327}328 329// -----330 331// module globals332//   integer, pointer :: g(:)333// end module globals334// subroutine test10335//   use globals336//   integer, target :: x(10)337// contains338//   subroutine inner()339//     x(1) = g(1)340//   end subroutine inner341// end subroutine test10342 343// CHECK: test10_g(1)#0 <-> test10_x(1)#0: MayAlias344func.func @_QFtest10Pinner(%arg0: !fir.ref<tuple<!fir.box<!fir.array<10xi32>>>> {fir.host_assoc}) attributes {fir.internal_proc} {345  %0 = fir.address_of(@_QMglobalsEg) : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>346  %1:2 = hlfir.declare %0 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QMglobalsEg"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>)347  %c0_i32 = arith.constant 0 : i32348  %2 = fir.coordinate_of %arg0, %c0_i32 : (!fir.ref<tuple<!fir.box<!fir.array<10xi32>>>>, i32) -> !fir.ref<!fir.box<!fir.array<10xi32>>>349  %3 = fir.load %2 : !fir.ref<!fir.box<!fir.array<10xi32>>>350  %4 = fir.box_addr %3 : (!fir.box<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>>351  %c0 = arith.constant 0 : index352  %5:3 = fir.box_dims %3, %c0 : (!fir.box<!fir.array<10xi32>>, index) -> (index, index, index)353  %6 = fir.shape %5#1 : (index) -> !fir.shape<1>354  %7:2 = hlfir.declare %4(%6) {fortran_attrs = #fir.var_attrs<target, host_assoc>, uniq_name = "_QFtest10Ex"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)355  %8 = fir.load %1#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>356  %c1 = arith.constant 1 : index357  %9 = hlfir.designate %8 (%c1) {test.ptr = "test10_g(1)"} : (!fir.box<!fir.ptr<!fir.array<?xi32>>>, index) -> !fir.ref<i32>358  %10 = fir.load %9 : !fir.ref<i32>359  %c1_0 = arith.constant 1 : index360  %11 = hlfir.designate %7#0 (%c1_0) {test.ptr = "test10_x(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>361  hlfir.assign %10 to %11 : i32, !fir.ref<i32>362  return363}364fir.global @_QMglobalsEg : !fir.box<!fir.ptr<!fir.array<?xi32>>> {365  %0 = fir.zero_bits !fir.ptr<!fir.array<?xi32>>366  %c0 = arith.constant 0 : index367  %1 = fir.shape %c0 : (index) -> !fir.shape<1>368  %2 = fir.embox %0(%1) : (!fir.ptr<!fir.array<?xi32>>, !fir.shape<1>) -> !fir.box<!fir.ptr<!fir.array<?xi32>>>369  fir.has_value %2 : !fir.box<!fir.ptr<!fir.array<?xi32>>>370}371 372// -----373 374// module globals375//   integer, target :: g(10)376// end module globals377// subroutine test11378//   use globals379//   integer, pointer :: x(:)380// contains381//   subroutine inner()382//     x(1) = g(1)383//   end subroutine inner384// end subroutine test11385 386// CHECK: test11_g(1)#0 <-> test11_x(1)#0: MayAlias387func.func @_QFtest11Pinner(%arg0: !fir.ref<tuple<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>> {fir.host_assoc}) attributes {fir.internal_proc} {388  %0 = fir.address_of(@_QMglobalsEg) : !fir.ref<!fir.array<10xi32>>389  %c10 = arith.constant 10 : index390  %1 = fir.shape %c10 : (index) -> !fir.shape<1>391  %2:2 = hlfir.declare %0(%1) {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QMglobalsEg"} : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>>, !fir.ref<!fir.array<10xi32>>)392  %c0_i32 = arith.constant 0 : i32393  %3 = fir.coordinate_of %arg0, %c0_i32 : (!fir.ref<tuple<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>>, i32) -> !fir.llvm_ptr<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>394  %4 = fir.load %3 : !fir.llvm_ptr<!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>>395  %5:2 = hlfir.declare %4 {fortran_attrs = #fir.var_attrs<pointer, host_assoc>, uniq_name = "_QFtest11Ex"} : (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>) -> (!fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>, !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>)396  %c1 = arith.constant 1 : index397  %6 = hlfir.designate %2#0 (%c1) {test.ptr = "test11_g(1)"} : (!fir.ref<!fir.array<10xi32>>, index) -> !fir.ref<i32>398  %7 = fir.load %6 : !fir.ref<i32>399  %8 = fir.load %5#0 : !fir.ref<!fir.box<!fir.ptr<!fir.array<?xi32>>>>400  %c1_0 = arith.constant 1 : index401  %9 = hlfir.designate %8 (%c1_0) {test.ptr = "test11_x(1)"} : (!fir.box<!fir.ptr<!fir.array<?xi32>>>, index) -> !fir.ref<i32>402  hlfir.assign %7 to %9 : i32, !fir.ref<i32>403  return404}405fir.global @_QMglobalsEg target : !fir.array<10xi32> {406  %0 = fir.undefined !fir.array<10xi32>407  fir.has_value %0 : !fir.array<10xi32>408}409