brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.3 KiB · da356b3 Raw
262 lines · plain
1// Test code generation of hlfir.region_assign where the left-hand2// side terminator is an hlfir.elemental_addr (Fortran assignments to3// vector subscripted designators).4// RUN: fir-opt %s --lower-hlfir-ordered-assignments | FileCheck %s5 6func.func @simple(%arg0: !fir.ref<!fir.array<100xf32>> , %arg1: !fir.ref<!fir.array<10xi64>> , %arg2: !fir.ref<!fir.array<10xf32>> ) {7  %c10 = arith.constant 10 : index8  %c100 = arith.constant 100 : index9  %0 = fir.shape %c100 : (index) -> !fir.shape<1>10  %1:2 = hlfir.declare %arg0(%0) {uniq_name = "_QFsimpleEx"} : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<100xf32>>, !fir.ref<!fir.array<100xf32>>)11  %2 = fir.shape %c10 : (index) -> !fir.shape<1>12  %3:2 = hlfir.declare %arg1(%2) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)13  %4:2 = hlfir.declare %arg2(%2) {uniq_name = "z"} : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>)14  hlfir.region_assign {15    hlfir.yield %4#0 : !fir.ref<!fir.array<10xf32>>16  } to {17    hlfir.elemental_addr %2 : !fir.shape<1> {18    ^bb0(%arg3: index):19      %5 = hlfir.designate %3#0 (%arg3)  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>20      %6 = fir.load %5 : !fir.ref<i64>21      %7 = hlfir.designate %1#0 (%6)  : (!fir.ref<!fir.array<100xf32>>, i64) -> !fir.ref<f32>22      hlfir.yield %7 : !fir.ref<f32>23    }24  }25  return26}27// CHECK-LABEL:   func.func @simple(28// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<100xf32>>,29// CHECK-SAME:                      %[[VAL_1:.*]]: !fir.ref<!fir.array<10xi64>>,30// CHECK-SAME:                      %[[VAL_2:.*]]: !fir.ref<!fir.array<10xf32>>) {31// CHECK:           %[[VAL_3:.*]] = arith.constant 10 : index32// CHECK:           %[[VAL_4:.*]] = arith.constant 100 : index33// CHECK:           %[[VAL_5:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>34// CHECK:           %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_5]]) {uniq_name = "_QFsimpleEx"} : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<100xf32>>, !fir.ref<!fir.array<100xf32>>)35// CHECK:           %[[VAL_7:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>36// CHECK:           %[[VAL_8:.*]]:2 = hlfir.declare %[[VAL_1]](%[[VAL_7]]) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)37// CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_2]](%[[VAL_7]]) {uniq_name = "z"} : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>)38// CHECK:           %[[VAL_10:.*]] = arith.constant 1 : index39// CHECK:           fir.do_loop %[[VAL_11:.*]] = %[[VAL_10]] to %[[VAL_3]] step %[[VAL_10]] {40// CHECK:             %[[VAL_12:.*]] = hlfir.designate %[[VAL_8]]#0 (%[[VAL_11]])  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>41// CHECK:             %[[VAL_13:.*]] = fir.load %[[VAL_12]] : !fir.ref<i64>42// CHECK:             %[[VAL_14:.*]] = hlfir.designate %[[VAL_6]]#0 (%[[VAL_13]])  : (!fir.ref<!fir.array<100xf32>>, i64) -> !fir.ref<f32>43// CHECK:             %[[VAL_15:.*]] = hlfir.designate %[[VAL_9]]#0 (%[[VAL_11]])  : (!fir.ref<!fir.array<10xf32>>, index) -> !fir.ref<f32>44// CHECK:             hlfir.assign %[[VAL_15]] to %[[VAL_14]] : !fir.ref<f32>, !fir.ref<f32>45// CHECK:           }46 47func.func @forall_vector_lhs(%arg0: !fir.ref<!fir.array<100x20xf32>> , %arg1: !fir.ref<!fir.array<10xi64>> ) {48  %c20_i32 = arith.constant 20 : i3249  %c1_i32 = arith.constant 1 : i3250  %c10 = arith.constant 10 : index51  %c100 = arith.constant 100 : index52  %c20 = arith.constant 20 : index53  %0 = fir.shape %c100, %c20 : (index, index) -> !fir.shape<2>54  %1:2 = hlfir.declare %arg0(%0) {uniq_name = "x"} : (!fir.ref<!fir.array<100x20xf32>>, !fir.shape<2>) -> (!fir.ref<!fir.array<100x20xf32>>, !fir.ref<!fir.array<100x20xf32>>)55  %2 = fir.shape %c10 : (index) -> !fir.shape<1>56  %3:2 = hlfir.declare %arg1(%2) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)57  hlfir.forall lb {58    hlfir.yield %c1_i32 : i3259  } ub {60    hlfir.yield %c20_i32 : i3261  }  (%arg2: i32) {62    hlfir.region_assign {63      %4 = hlfir.elemental %2 : (!fir.shape<1>) -> !hlfir.expr<10xf32> {64      ^bb0(%arg3: index):65        %5 = hlfir.designate %3#0 (%arg3)  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>66        %6 = fir.load %5 : !fir.ref<i64>67        %7 = fir.convert %6 : (i64) -> f3268        hlfir.yield_element %7 : f3269      }70      hlfir.yield %4 : !hlfir.expr<10xf32> cleanup {71        hlfir.destroy %4 : !hlfir.expr<10xf32>72      }73    } to {74      %4 = fir.convert %arg2 : (i32) -> i6475      hlfir.elemental_addr %2 : !fir.shape<1> {76      ^bb0(%arg3: index):77        %5 = hlfir.designate %3#0 (%arg3)  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>78        %6 = fir.load %5 : !fir.ref<i64>79        %7 = hlfir.designate %1#0 (%6, %4)  : (!fir.ref<!fir.array<100x20xf32>>, i64, i64) -> !fir.ref<f32>80        hlfir.yield %7 : !fir.ref<f32>81      }82    }83  }84  return85}86// CHECK-LABEL:   func.func @forall_vector_lhs(87// CHECK-SAME:                                 %[[VAL_0:.*]]: !fir.ref<!fir.array<100x20xf32>>,88// CHECK-SAME:                                 %[[VAL_1:.*]]: !fir.ref<!fir.array<10xi64>>) {89// CHECK:           %[[VAL_2:.*]] = arith.constant 20 : i3290// CHECK:           %[[VAL_3:.*]] = arith.constant 1 : i3291// CHECK:           %[[VAL_4:.*]] = arith.constant 10 : index92// CHECK:           %[[VAL_5:.*]] = arith.constant 100 : index93// CHECK:           %[[VAL_6:.*]] = arith.constant 20 : index94// CHECK:           %[[VAL_7:.*]] = fir.shape %[[VAL_5]], %[[VAL_6]] : (index, index) -> !fir.shape<2>95// CHECK:           %[[VAL_8:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_7]]) {uniq_name = "x"} : (!fir.ref<!fir.array<100x20xf32>>, !fir.shape<2>) -> (!fir.ref<!fir.array<100x20xf32>>, !fir.ref<!fir.array<100x20xf32>>)96// CHECK:           %[[VAL_9:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>97// CHECK:           %[[VAL_10:.*]]:2 = hlfir.declare %[[VAL_1]](%[[VAL_9]]) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)98// CHECK:           %[[VAL_11:.*]] = fir.convert %[[VAL_3]] : (i32) -> index99// CHECK:           %[[VAL_12:.*]] = fir.convert %[[VAL_2]] : (i32) -> index100// CHECK:           %[[VAL_13:.*]] = arith.constant 1 : index101// CHECK:           fir.do_loop %[[VAL_14:.*]] = %[[VAL_11]] to %[[VAL_12]] step %[[VAL_13]] {102// CHECK:             %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (index) -> i32103// CHECK:             %[[VAL_16:.*]] = hlfir.elemental %[[VAL_9]] : (!fir.shape<1>) -> !hlfir.expr<10xf32> {104// CHECK:             ^bb0(%[[VAL_17:.*]]: index):105// CHECK:               %[[VAL_18:.*]] = hlfir.designate %[[VAL_10]]#0 (%[[VAL_17]])  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>106// CHECK:               %[[VAL_19:.*]] = fir.load %[[VAL_18]] : !fir.ref<i64>107// CHECK:               %[[VAL_20:.*]] = fir.convert %[[VAL_19]] : (i64) -> f32108// CHECK:               hlfir.yield_element %[[VAL_20]] : f32109// CHECK:             }110// CHECK:             %[[VAL_21:.*]] = fir.convert %[[VAL_15]] : (i32) -> i64111// CHECK:             %[[VAL_22:.*]] = arith.constant 1 : index112// CHECK:             fir.do_loop %[[VAL_23:.*]] = %[[VAL_22]] to %[[VAL_4]] step %[[VAL_22]] {113// CHECK:               %[[VAL_24:.*]] = hlfir.designate %[[VAL_10]]#0 (%[[VAL_23]])  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>114// CHECK:               %[[VAL_25:.*]] = fir.load %[[VAL_24]] : !fir.ref<i64>115// CHECK:               %[[VAL_26:.*]] = hlfir.designate %[[VAL_8]]#0 (%[[VAL_25]], %[[VAL_21]])  : (!fir.ref<!fir.array<100x20xf32>>, i64, i64) -> !fir.ref<f32>116// CHECK:               %[[VAL_27:.*]] = hlfir.apply %[[VAL_28:.*]], %[[VAL_23]] : (!hlfir.expr<10xf32>, index) -> f32117// CHECK:               hlfir.assign %[[VAL_27]] to %[[VAL_26]] : f32, !fir.ref<f32>118// CHECK:             }119// CHECK:             hlfir.destroy %[[VAL_16]] : !hlfir.expr<10xf32>120// CHECK:           }121 122func.func @where_vector_subscripts(%arg0: !fir.ref<!fir.array<10x!fir.logical<4>>> , %arg1: !fir.ref<!fir.array<100xf32>> , %arg2: !fir.ref<!fir.array<10xi64>> ) {123  %cst = arith.constant 0.000000e+00 : f32124  %c100 = arith.constant 100 : index125  %c10 = arith.constant 10 : index126  %0 = fir.shape %c10 : (index) -> !fir.shape<1>127  %1:2 = hlfir.declare %arg0(%0) {uniq_name = "l"} : (!fir.ref<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10x!fir.logical<4>>>, !fir.ref<!fir.array<10x!fir.logical<4>>>)128  %2 = fir.shape %c100 : (index) -> !fir.shape<1>129  %3:2 = hlfir.declare %arg1(%2) {uniq_name = "x"} : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<100xf32>>, !fir.ref<!fir.array<100xf32>>)130  %4:2 = hlfir.declare %arg2(%0) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)131  hlfir.where {132    hlfir.yield %1#0 : !fir.ref<!fir.array<10x!fir.logical<4>>>133  } do {134    hlfir.region_assign {135      hlfir.yield %cst : f32136    } to {137      hlfir.elemental_addr %0 : !fir.shape<1> {138      ^bb0(%arg3: index):139        %5 = hlfir.designate %4#0 (%arg3)  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>140        %6 = fir.load %5 : !fir.ref<i64>141        %7 = hlfir.designate %3#0 (%6)  : (!fir.ref<!fir.array<100xf32>>, i64) -> !fir.ref<f32>142        hlfir.yield %7 : !fir.ref<f32>143      }144    }145  }146  return147}148// CHECK-LABEL:   func.func @where_vector_subscripts(149// CHECK-SAME:                                       %[[VAL_0:.*]]: !fir.ref<!fir.array<10x!fir.logical<4>>>,150// CHECK-SAME:                                       %[[VAL_1:.*]]: !fir.ref<!fir.array<100xf32>>,151// CHECK-SAME:                                       %[[VAL_2:.*]]: !fir.ref<!fir.array<10xi64>>) {152// CHECK:           %[[VAL_3:.*]] = arith.constant 0.000000e+00 : f32153// CHECK:           %[[VAL_4:.*]] = arith.constant 100 : index154// CHECK:           %[[VAL_5:.*]] = arith.constant 10 : index155// CHECK:           %[[VAL_6:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>156// CHECK:           %[[VAL_7:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_6]]) {uniq_name = "l"} : (!fir.ref<!fir.array<10x!fir.logical<4>>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10x!fir.logical<4>>>, !fir.ref<!fir.array<10x!fir.logical<4>>>)157// CHECK:           %[[VAL_8:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>158// CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_1]](%[[VAL_8]]) {uniq_name = "x"} : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<100xf32>>, !fir.ref<!fir.array<100xf32>>)159// CHECK:           %[[VAL_10:.*]]:2 = hlfir.declare %[[VAL_2]](%[[VAL_6]]) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)160// CHECK:           %[[VAL_11:.*]] = arith.constant 1 : index161// CHECK:           fir.do_loop %[[VAL_12:.*]] = %[[VAL_11]] to %[[VAL_5]] step %[[VAL_11]] {162// CHECK:             %[[VAL_13:.*]] = hlfir.designate %[[VAL_7]]#0 (%[[VAL_12]])  : (!fir.ref<!fir.array<10x!fir.logical<4>>>, index) -> !fir.ref<!fir.logical<4>>163// CHECK:             %[[VAL_14:.*]] = fir.load %[[VAL_13]] : !fir.ref<!fir.logical<4>>164// CHECK:             %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (!fir.logical<4>) -> i1165// CHECK:             fir.if %[[VAL_15]] {166// CHECK:               %[[VAL_16:.*]] = hlfir.designate %[[VAL_10]]#0 (%[[VAL_12]])  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>167// CHECK:               %[[VAL_17:.*]] = fir.load %[[VAL_16]] : !fir.ref<i64>168// CHECK:               %[[VAL_18:.*]] = hlfir.designate %[[VAL_9]]#0 (%[[VAL_17]])  : (!fir.ref<!fir.array<100xf32>>, i64) -> !fir.ref<f32>169// CHECK:               hlfir.assign %[[VAL_3]] to %[[VAL_18]] : f32, !fir.ref<f32>170// CHECK:             }171// CHECK:           }172 173func.func @unordered(%arg0: !fir.ref<!fir.array<100xf32>> , %arg1: !fir.ref<!fir.array<10xi64>> , %arg2: !fir.ref<!fir.array<10xf32>> ) {174  %c10 = arith.constant 10 : index175  %c100 = arith.constant 100 : index176  %0 = fir.shape %c100 : (index) -> !fir.shape<1>177  %1:2 = hlfir.declare %arg0(%0) {uniq_name = "_QFsimpleEx"} : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<100xf32>>, !fir.ref<!fir.array<100xf32>>)178  %2 = fir.shape %c10 : (index) -> !fir.shape<1>179  %3:2 = hlfir.declare %arg1(%2) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)180  %4:2 = hlfir.declare %arg2(%2) {uniq_name = "z"} : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>)181  hlfir.region_assign {182    hlfir.yield %4#0 : !fir.ref<!fir.array<10xf32>>183  } to {184    hlfir.elemental_addr %2 unordered : !fir.shape<1> {185    ^bb0(%arg3: index):186      %5 = hlfir.designate %3#0 (%arg3)  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>187      %6 = fir.load %5 : !fir.ref<i64>188      %7 = hlfir.designate %1#0 (%6)  : (!fir.ref<!fir.array<100xf32>>, i64) -> !fir.ref<f32>189      hlfir.yield %7 : !fir.ref<f32>190    }191  }192  return193}194// CHECK-LABEL:   func.func @unordered(195// CHECK-SAME:      %[[VAL_0:.*]]: !fir.ref<!fir.array<100xf32>>,196// CHECK-SAME:      %[[VAL_1:.*]]: !fir.ref<!fir.array<10xi64>>,197// CHECK-SAME:      %[[VAL_2:.*]]: !fir.ref<!fir.array<10xf32>>) {198// CHECK:           %[[VAL_3:.*]] = arith.constant 10 : index199// CHECK:           %[[VAL_4:.*]] = arith.constant 100 : index200// CHECK:           %[[VAL_5:.*]] = fir.shape %[[VAL_4]] : (index) -> !fir.shape<1>201// CHECK:           %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_0]](%[[VAL_5]]) {uniq_name = "_QFsimpleEx"} : (!fir.ref<!fir.array<100xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<100xf32>>, !fir.ref<!fir.array<100xf32>>)202// CHECK:           %[[VAL_7:.*]] = fir.shape %[[VAL_3]] : (index) -> !fir.shape<1>203// CHECK:           %[[VAL_8:.*]]:2 = hlfir.declare %[[VAL_1]](%[[VAL_7]]) {uniq_name = "y"} : (!fir.ref<!fir.array<10xi64>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi64>>, !fir.ref<!fir.array<10xi64>>)204// CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_2]](%[[VAL_7]]) {uniq_name = "z"} : (!fir.ref<!fir.array<10xf32>>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xf32>>, !fir.ref<!fir.array<10xf32>>)205// CHECK:           %[[VAL_10:.*]] = arith.constant 1 : index206// CHECK:           fir.do_loop %[[VAL_11:.*]] = %[[VAL_10]] to %[[VAL_3]] step %[[VAL_10]] unordered {207// CHECK:             %[[VAL_12:.*]] = hlfir.designate %[[VAL_8]]#0 (%[[VAL_11]])  : (!fir.ref<!fir.array<10xi64>>, index) -> !fir.ref<i64>208// CHECK:             %[[VAL_13:.*]] = fir.load %[[VAL_12]] : !fir.ref<i64>209// CHECK:             %[[VAL_14:.*]] = hlfir.designate %[[VAL_6]]#0 (%[[VAL_13]])  : (!fir.ref<!fir.array<100xf32>>, i64) -> !fir.ref<f32>210// CHECK:             %[[VAL_15:.*]] = hlfir.designate %[[VAL_9]]#0 (%[[VAL_11]])  : (!fir.ref<!fir.array<10xf32>>, index) -> !fir.ref<f32>211// CHECK:             hlfir.assign %[[VAL_15]] to %[[VAL_14]] : !fir.ref<f32>, !fir.ref<f32>212// CHECK:           }213// CHECK:           return214// CHECK:         }215 216// Test vector saving subscripted LHS inside WHERE.217!t=!fir.type<_QFwhere_vec_subscriptsTt{x:f32,vec:!fir.array<4xi64>}>218func.func @_QPwhere_vec_subscripts(%arg0: !fir.ref<!fir.array<4x!fir.logical<4>>>, %arg1: !fir.box<!fir.array<?x!t>>) {219  %0 = fir.dummy_scope : !fir.dscope220  %1:2 = hlfir.declare %arg1 dummy_scope %0 {uniq_name = "_QFwhere_vec_subscriptsEa"} : (!fir.box<!fir.array<?x!t>>, !fir.dscope) -> (!fir.box<!fir.array<?x!t>>, !fir.box<!fir.array<?x!t>>)221  %c4 = arith.constant 4 : index222  %2 = fir.shape %c4 : (index) -> !fir.shape<1>223  %3:2 = hlfir.declare %arg0(%2) dummy_scope %0 {uniq_name = "_QFwhere_vec_subscriptsEmask"} : (!fir.ref<!fir.array<4x!fir.logical<4>>>, !fir.shape<1>, !fir.dscope) -> (!fir.ref<!fir.array<4x!fir.logical<4>>>, !fir.ref<!fir.array<4x!fir.logical<4>>>)224  hlfir.where {225    hlfir.yield %3#0 : !fir.ref<!fir.array<4x!fir.logical<4>>>226  } do {227    hlfir.region_assign {228      %cst = arith.constant 0.000000e+00 : f32229      hlfir.yield %cst : f32230    } to {231      %c1 = arith.constant 1 : index232      %4 = hlfir.designate %1#0 (%c1)  : (!fir.box<!fir.array<?x!t>>, index) -> !fir.ref<!t>233      %6 = hlfir.designate %4{"vec"}   shape %2 : (!fir.ref<!t>, !fir.shape<1>) -> !fir.ref<!fir.array<4xi64>>234      hlfir.elemental_addr %2 unordered : !fir.shape<1> {235      ^bb0(%arg2: index):236        %8 = hlfir.designate %6 (%arg2)  : (!fir.ref<!fir.array<4xi64>>, index) -> !fir.ref<i64>237        %9 = fir.load %8 : !fir.ref<i64>238        %10 = hlfir.designate %1#0 (%9)  : (!fir.box<!fir.array<?x!t>>, i64) -> !fir.ref<!t>239        %11 = hlfir.designate %10{"x"}   : (!fir.ref<!t>) -> !fir.ref<f32>240        hlfir.yield %11 : !fir.ref<f32>241      }242    }243  }244  return245}246// CHECK-LABEL:   func.func @_QPwhere_vec_subscripts(247// CHECK:           %[[VAL_16:.*]] = fir.call @_FortranACreateDescriptorStack(248// CHECK:           fir.do_loop {{.*}}249// CHECK:             fir.if %{{.*}} {250// CHECK:               fir.call @_FortranAPushDescriptor(251// CHECK:             }252// CHECK:           }253// CHECK:           fir.do_loop {{.*}}254// CHECK:             fir.if %{{.*}} {255// CHECK:               fir.call @_FortranADescriptorAt(256// CHECK:               hlfir.assign257// CHECK:             }258// CHECK:           }259// CHECK:           fir.call @_FortranADestroyDescriptorStack(260// CHECK:           return261// CHECK:         }262