brintos

brintos / llvm-project-archived public Read only

0
0
Text · 36.6 KiB · bc58347 Raw
593 lines · plain
1// RUN: fir-opt --canonicalize %s | FileCheck %s2 3// CHECK-LABEL:   func.func @_QPtest1(4// CHECK-SAME:                        %[[VAL_0:.*]]: !fir.ref<!fir.array<120x2xi32>> {fir.bindc_name = "u"}) {5// CHECK:           %[[VAL_6:.*]] = fir.shape6// CHECK:           %[[VAL_7:.*]] = fir.declare %[[VAL_0]](%[[VAL_6]])7// CHECK:           %[[VAL_8:.*]] = fir.slice8// CHECK:           fir.do_loop9// CHECK:             fir.do_loop10// CHECK:               %[[VAL_11:.*]] = fir.array_coor %[[VAL_7]](%[[VAL_6]]) {{\[}}%[[VAL_8]]]11func.func @_QPtest1(%arg0: !fir.ref<!fir.array<120x2xi32>> {fir.bindc_name = "u"}) {12  %c1 = arith.constant 1 : index13  %c2_i32 = arith.constant 2 : i3214  %c2 = arith.constant 2 : index15  %c120 = arith.constant 120 : index16  %0 = fir.dummy_scope : !fir.dscope17  %1 = fir.shape %c120, %c2 : (index, index) -> !fir.shape<2>18  %2 = fir.declare %arg0(%1) dummy_scope %0 {uniq_name = "_QFtest1Eu"} : (!fir.ref<!fir.array<120x2xi32>>, !fir.shape<2>, !fir.dscope) -> !fir.ref<!fir.array<120x2xi32>>19  %3 = fir.slice %c1, %c120, %c1, %c1, %c2, %c1 : (index, index, index, index, index, index) -> !fir.slice<2>20  %4 = fir.embox %2(%1) [%3] : (!fir.ref<!fir.array<120x2xi32>>, !fir.shape<2>, !fir.slice<2>) -> !fir.box<!fir.array<120x2xi32>>21  fir.do_loop %arg1 = %c1 to %c2 step %c1 unordered {22    fir.do_loop %arg2 = %c1 to %c120 step %c1 unordered {23      %5 = fir.array_coor %4 %arg2, %arg1 : (!fir.box<!fir.array<120x2xi32>>, index, index) -> !fir.ref<i32>24      fir.store %c2_i32 to %5 : !fir.ref<i32>25    }26  }27  return28}29 30// CHECK-LABEL:   func.func @_QPtest2(31// CHECK-SAME:                        %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "u"}) {32// CHECK:           %[[VAL_8:.*]] = fir.shift33// CHECK:           %[[VAL_9:.*]] = fir.declare %[[VAL_0]](%[[VAL_8]])34// CHECK:           fir.do_loop35// CHECK:             fir.do_loop36// CHECK:               %[[VAL_17:.*]] = fir.array_coor %[[VAL_9]](%[[VAL_8]])37func.func @_QPtest2(%arg0: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "u"}) {38  %c9 = arith.constant 9 : index39  %c1 = arith.constant 1 : index40  %c0 = arith.constant 0 : index41  %c11 = arith.constant 11 : index42  %c10 = arith.constant 10 : index43  %c2_i32 = arith.constant 2 : i3244  %0 = fir.dummy_scope : !fir.dscope45  %1 = fir.shift %c10, %c11 : (index, index) -> !fir.shift<2>46  %2 = fir.declare %arg0(%1) dummy_scope %0 {uniq_name = "_QFtest2Eu"} : (!fir.box<!fir.array<?x?xi32>>, !fir.shift<2>, !fir.dscope) -> !fir.box<!fir.array<?x?xi32>>47  %3 = fir.rebox %2(%1) : (!fir.box<!fir.array<?x?xi32>>, !fir.shift<2>) -> !fir.box<!fir.array<?x?xi32>>48  %4:3 = fir.box_dims %3, %c0 : (!fir.box<!fir.array<?x?xi32>>, index) -> (index, index, index)49  %5:3 = fir.box_dims %3, %c1 : (!fir.box<!fir.array<?x?xi32>>, index) -> (index, index, index)50  fir.do_loop %arg1 = %c1 to %5#1 step %c1 unordered {51    fir.do_loop %arg2 = %c1 to %4#1 step %c1 unordered {52      %6 = arith.addi %arg2, %c9 : index53      %7 = arith.addi %arg1, %c10 : index54      %8 = fir.array_coor %3(%1) %6, %7 : (!fir.box<!fir.array<?x?xi32>>, !fir.shift<2>, index, index) -> !fir.ref<i32>55      fir.store %c2_i32 to %8 : !fir.ref<i32>56    }57  }58  return59}60 61// CHECK-LABEL:   func.func @_QPtest3(62// CHECK-SAME:                        %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "u"}) {63// CHECK:           %[[VAL_10:.*]] = fir.shift64// CHECK:           %[[VAL_11:.*]] = fir.declare %[[VAL_0]](%[[VAL_10]])65// CHECK:           %[[VAL_12:.*]] = fir.slice66// CHECK:           fir.do_loop67// CHECK:             fir.do_loop68// CHECK:               %[[VAL_15:.*]] = fir.array_coor %[[VAL_11]](%[[VAL_10]]) {{\[}}%[[VAL_12]]]69func.func @_QPtest3(%arg0: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "u"}) {70  %c2 = arith.constant 2 : index71  %c12 = arith.constant 12 : index72  %c11 = arith.constant 11 : index73  %c111 = arith.constant 111 : index74  %c1 = arith.constant 1 : index75  %c120 = arith.constant 120 : index76  %c10 = arith.constant 10 : index77  %c2_i32 = arith.constant 2 : i3278  %0 = fir.dummy_scope : !fir.dscope79  %1 = fir.shift %c10, %c11 : (index, index) -> !fir.shift<2>80  %2 = fir.declare %arg0(%1) dummy_scope %0 {uniq_name = "_QFtest3Eu"} : (!fir.box<!fir.array<?x?xi32>>, !fir.shift<2>, !fir.dscope) -> !fir.box<!fir.array<?x?xi32>>81  %3 = fir.rebox %2(%1) : (!fir.box<!fir.array<?x?xi32>>, !fir.shift<2>) -> !fir.box<!fir.array<?x?xi32>>82  %4 = fir.slice %c10, %c120, %c1, %c11, %c12, %c1 : (index, index, index, index, index, index) -> !fir.slice<2>83  %5 = fir.rebox %3(%1) [%4] : (!fir.box<!fir.array<?x?xi32>>, !fir.shift<2>, !fir.slice<2>) -> !fir.box<!fir.array<111x2xi32>>84  fir.do_loop %arg1 = %c1 to %c2 step %c1 unordered {85    fir.do_loop %arg2 = %c1 to %c111 step %c1 unordered {86      %6 = fir.array_coor %5 %arg2, %arg1 : (!fir.box<!fir.array<111x2xi32>>, index, index) -> !fir.ref<i32>87      fir.store %c2_i32 to %6 : !fir.ref<i32>88    }89  }90  return91}92 93// TODO: fir.array_coor with slices changing the number of dimensions94// is not supported yet.95// CHECK-LABEL:   func.func @_QPtest4() {96// CHECK:           %[[VAL_3:.*]] = fir.alloca !fir.array<100x100x100xi32> {bindc_name = "u", uniq_name = "_QFtest4Eu"}97// CHECK:           %[[VAL_4:.*]] = fir.shape98// CHECK:           %[[VAL_5:.*]] = fir.declare %[[VAL_3]](%[[VAL_4]]) {uniq_name = "_QFtest4Eu"} : (!fir.ref<!fir.array<100x100x100xi32>>, !fir.shape<3>) -> !fir.ref<!fir.array<100x100x100xi32>>99// CHECK:           %[[VAL_7:.*]] = fir.slice100// CHECK:           %[[VAL_8:.*]] = fir.embox %[[VAL_5]](%[[VAL_4]]) {{\[}}%[[VAL_7]]] : (!fir.ref<!fir.array<100x100x100xi32>>, !fir.shape<3>, !fir.slice<3>) -> !fir.box<!fir.array<100x100xi32>>101// CHECK:           fir.do_loop102// CHECK:             fir.do_loop103// CHECK:               %[[VAL_11:.*]] = fir.array_coor %[[VAL_8]]104func.func @_QPtest4() {105  %c1 = arith.constant 1 : index106  %c2_i32 = arith.constant 2 : i32107  %c100 = arith.constant 100 : index108  %0 = fir.alloca !fir.array<100x100x100xi32> {bindc_name = "u", uniq_name = "_QFtest4Eu"}109  %1 = fir.shape %c100, %c100, %c100 : (index, index, index) -> !fir.shape<3>110  %2 = fir.declare %0(%1) {uniq_name = "_QFtest4Eu"} : (!fir.ref<!fir.array<100x100x100xi32>>, !fir.shape<3>) -> !fir.ref<!fir.array<100x100x100xi32>>111  %3 = fir.undefined index112  %4 = fir.slice %c1, %c100, %c1, %c1, %3, %3, %c1, %c100, %c1 : (index, index, index, index, index, index, index, index, index) -> !fir.slice<3>113  %5 = fir.embox %2(%1) [%4] : (!fir.ref<!fir.array<100x100x100xi32>>, !fir.shape<3>, !fir.slice<3>) -> !fir.box<!fir.array<100x100xi32>>114  fir.do_loop %arg0 = %c1 to %c100 step %c1 unordered {115    fir.do_loop %arg1 = %c1 to %c100 step %c1 unordered {116      %6 = fir.array_coor %5 %arg1, %arg0 : (!fir.box<!fir.array<100x100xi32>>, index, index) -> !fir.ref<i32>117      fir.store %c2_i32 to %6 : !fir.ref<i32>118    }119  }120  return121}122 123// CHECK-LABEL:   func.func @test5_1(124// CHECK-SAME:                       %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {125// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index126// CHECK:           %[[VAL_2:.*]] = arith.constant 9 : index127// CHECK:           %[[VAL_3:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>128// CHECK:           %[[VAL_4:.*]] = fir.array_coor %[[VAL_0]] {{\[}}%[[VAL_3]]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>129// CHECK:           return %[[VAL_4]] : !fir.ref<i32>130// CHECK:         }131func.func @test5_1(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {132  %c1 = arith.constant 1 : index133  %c10 = arith.constant 10 : index134  %c9 = arith.constant 9 : index135  %sh = fir.shift %c10 : (index) -> !fir.shift<1>136  %2 = fir.rebox %arg0(%sh) : (!fir.box<!fir.array<?xi32>>, !fir.shift<1>) -> !fir.box<!fir.array<?xi32>>137  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>138  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>139  return %3 : !fir.ref<i32>140}141 142// CHECK-LABEL:   func.func @test5_2(143// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {144// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index145// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index146// CHECK:           %[[VAL_3:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>147// CHECK:           %[[VAL_4:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>148// CHECK:           %[[VAL_5:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_3]]) {{\[}}%[[VAL_4]]] %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<i32>149// CHECK:           return %[[VAL_5]] : !fir.ref<i32>150// CHECK:         }151func.func @test5_2(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {152  %c1 = arith.constant 1 : index153  %c10 = arith.constant 10 : index154  %1 = fir.shape %c10 : (index) -> !fir.shape<1>155  %s = fir.slice %c1, %c10, %c1 : (index, index, index) -> !fir.slice<1>156  %2 = fir.embox %arg0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.box<!fir.array<10xi32>>157  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>158  return %3 : !fir.ref<i32>159}160 161// CHECK-LABEL:   func.func @test5_3(162// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {163// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index164// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index165// CHECK:           %[[VAL_3:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>166// CHECK:           %[[VAL_4:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>167// CHECK:           %[[VAL_5:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_3]]) {{\[}}%[[VAL_4]]] %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<i32>168// CHECK:           return %[[VAL_5]] : !fir.ref<i32>169// CHECK:         }170func.func @test5_3(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {171  %c1 = arith.constant 1 : index172  %c10 = arith.constant 10 : index173  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>174  %s = fir.slice %c1, %c10, %c1 : (index, index, index) -> !fir.slice<1>175  %2 = fir.embox %arg0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>) -> !fir.box<!fir.array<10xi32>>176  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>177  return %3 : !fir.ref<i32>178}179 180// CHECK-LABEL:   func.func @test6_1(181// CHECK-SAME:                       %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {182// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index183// CHECK:           %[[VAL_2:.*]] = arith.constant 9 : index184// CHECK:           %[[VAL_3:.*]] = fir.shift %[[VAL_1]] : (index) -> !fir.shift<1>185// CHECK:           %[[VAL_4:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>186// CHECK:           %[[VAL_5:.*]] = fir.rebox %[[VAL_0]](%[[VAL_3]]) {{\[}}%[[VAL_4]]] : (!fir.box<!fir.array<?xi32>>, !fir.shift<1>, !fir.slice<1>) -> !fir.box<!fir.array<?xi32>>187// CHECK:           %[[VAL_6:.*]] = fir.array_coor %[[VAL_5]] {{\[}}%[[VAL_4]]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>188// CHECK:           return %[[VAL_6]] : !fir.ref<i32>189// CHECK:         }190func.func @test6_1(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {191  %c1 = arith.constant 1 : index192  %c10 = arith.constant 10 : index193  %c9 = arith.constant 9 : index194  %sh = fir.shift %c1 : (index) -> !fir.shift<1>195  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>196  %2 = fir.rebox %arg0(%sh) [%s] : (!fir.box<!fir.array<?xi32>>, !fir.shift<1>, !fir.slice<1>) -> !fir.box<!fir.array<?xi32>>197  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>198  return %3 : !fir.ref<i32>199}200 201// CHECK-LABEL:   func.func @test6_2(202// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {203// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index204// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index205// CHECK:           %[[VAL_3:.*]] = arith.constant 19 : index206// CHECK:           %[[VAL_4:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>207// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_2]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>208// CHECK:           %[[VAL_6:.*]] = fir.embox %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>209// CHECK:           %[[VAL_7:.*]] = fir.array_coor %[[VAL_6]] {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.box<!fir.array<10xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>210// CHECK:           return %[[VAL_7]] : !fir.ref<i32>211// CHECK:         }212func.func @test6_2(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {213  %c1 = arith.constant 1 : index214  %c10 = arith.constant 10 : index215  %c19 = arith.constant 19 : index216  %1 = fir.shape %c10 : (index) -> !fir.shape<1>217  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>218  %2 = fir.embox %arg0(%1) [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>219  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>220  return %3 : !fir.ref<i32>221}222 223// CHECK-LABEL:   func.func @test6_3(224// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {225// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index226// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index227// CHECK:           %[[VAL_3:.*]] = arith.constant 19 : index228// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_2]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>229// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_2]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>230// CHECK:           %[[VAL_6:.*]] = fir.embox %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>231// CHECK:           %[[VAL_7:.*]] = fir.array_coor %[[VAL_6]] {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.box<!fir.array<10xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>232// CHECK:           return %[[VAL_7]] : !fir.ref<i32>233// CHECK:         }234func.func @test6_3(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {235  %c1 = arith.constant 1 : index236  %c10 = arith.constant 10 : index237  %c19 = arith.constant 19 : index238  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>239  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>240  %2 = fir.embox %arg0(%1) [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>241  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>242  return %3 : !fir.ref<i32>243}244 245// CHECK-LABEL:   func.func @test7_1(246// CHECK-SAME:                       %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {247// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index248// CHECK:           %[[VAL_2:.*]] = fir.array_coor %[[VAL_0]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>249// CHECK:           return %[[VAL_2]] : !fir.ref<i32>250// CHECK:         }251func.func @test7_1(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {252  %c1 = arith.constant 1 : index253  %c10 = arith.constant 10 : index254  %c9 = arith.constant 9 : index255  %sh = fir.shift %c10 : (index) -> !fir.shift<1>256  %2 = fir.rebox %arg0(%sh) : (!fir.box<!fir.array<?xi32>>, !fir.shift<1>) -> !fir.box<!fir.array<?xi32>>257  %3 = fir.array_coor %2 %c1 : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>258  return %3 : !fir.ref<i32>259}260 261// CHECK-LABEL:   func.func @test7_2(262// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {263// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index264// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index265// CHECK:           %[[VAL_3:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>266// CHECK:           %[[VAL_4:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_3]]) %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, index) -> !fir.ref<i32>267// CHECK:           return %[[VAL_4]] : !fir.ref<i32>268// CHECK:         }269func.func @test7_2(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {270  %c1 = arith.constant 1 : index271  %c10 = arith.constant 10 : index272  %1 = fir.shape %c10 : (index) -> !fir.shape<1>273  %2 = fir.embox %arg0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>) -> !fir.box<!fir.array<10xi32>>274  %3 = fir.array_coor %2 %c1 : (!fir.box<!fir.array<10xi32>>, index) -> !fir.ref<i32>275  return %3 : !fir.ref<i32>276}277 278// CHECK-LABEL:   func.func @test7_3(279// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {280// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index281// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index282// CHECK:           %[[VAL_3:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>283// CHECK:           %[[VAL_4:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_3]]) %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, index) -> !fir.ref<i32>284// CHECK:           return %[[VAL_4]] : !fir.ref<i32>285// CHECK:         }286func.func @test7_3(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {287  %c1 = arith.constant 1 : index288  %c10 = arith.constant 10 : index289  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>290  %2 = fir.embox %arg0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>) -> !fir.box<!fir.array<10xi32>>291  %3 = fir.array_coor %2 %c1 : (!fir.box<!fir.array<10xi32>>, index) -> !fir.ref<i32>292  return %3 : !fir.ref<i32>293}294 295// CHECK-LABEL:   func.func @test8_1(296// CHECK-SAME:                       %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>,297// CHECK-SAME:                       %[[VAL_1:.*]]: index,298// CHECK-SAME:                       %[[VAL_2:.*]]: index) -> !fir.ref<i32> {299// CHECK:           %[[VAL_3:.*]] = arith.constant 1 : index300// CHECK:           %[[VAL_4:.*]] = arith.constant 10 : index301// CHECK:           %[[VAL_5:.*]] = arith.constant 19 : index302// CHECK:           %[[VAL_6:.*]] = fir.shift %[[VAL_1]] : (index) -> !fir.shift<1>303// CHECK:           %[[VAL_7:.*]] = fir.slice %[[VAL_4]], %[[VAL_5]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1>304// CHECK:           %[[VAL_8:.*]] = arith.addi %[[VAL_2]], %[[VAL_1]] overflow<nsw> : index305// CHECK:           %[[VAL_9:.*]] = arith.subi %[[VAL_8]], %[[VAL_3]] overflow<nsw> : index306// CHECK:           %[[VAL_10:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_6]]) {{\[}}%[[VAL_7]]] %[[VAL_9]] : (!fir.box<!fir.array<?xi32>>, !fir.shift<1>, !fir.slice<1>, index) -> !fir.ref<i32>307// CHECK:           return %[[VAL_10]] : !fir.ref<i32>308// CHECK:         }309func.func @test8_1(%arg0: !fir.box<!fir.array<?xi32>>, %lb: index, %idx: index) -> !fir.ref<i32> {310  %c1 = arith.constant 1 : index311  %c10 = arith.constant 10 : index312  %c19 = arith.constant 19 : index313  %sh = fir.shift %lb : (index) -> !fir.shift<1>314  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>315  %2 = fir.rebox %arg0(%sh) [%s] : (!fir.box<!fir.array<?xi32>>, !fir.shift<1>, !fir.slice<1>) -> !fir.box<!fir.array<?xi32>>316  %3 = fir.array_coor %2 %idx : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>317  return %3 : !fir.ref<i32>318}319 320// CHECK-LABEL:   func.func @test8_2(321// CHECK-SAME:                       %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {322// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index323// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index324// CHECK:           %[[VAL_3:.*]] = arith.constant 9 : index325// CHECK:           %[[VAL_4:.*]] = fir.shape %[[VAL_2]] : (index) -> !fir.shape<1>326// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_1]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>327// CHECK:           %[[VAL_6:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>, index) -> !fir.ref<i32>328// CHECK:           return %[[VAL_6]] : !fir.ref<i32>329// CHECK:         }330func.func @test8_2(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {331  %c1 = arith.constant 1 : index332  %c10 = arith.constant 10 : index333  %c9 = arith.constant 9 : index334  %1 = fir.shape %c10 : (index) -> !fir.shape<1>335  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>336  %2 = fir.embox %arg0(%1) [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.shape<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>337  %3 = fir.array_coor %2 %c1 : (!fir.box<!fir.array<10xi32>>, index) -> !fir.ref<i32>338  return %3 : !fir.ref<i32>339}340 341// CHECK-LABEL:   func.func @test8_3(342// CHECK-SAME:                       %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>,343// CHECK-SAME:                       %[[VAL_1:.*]]: index,344// CHECK-SAME:                       %[[VAL_2:.*]]: index) -> !fir.ref<i32> {345// CHECK:           %[[VAL_3:.*]] = arith.constant 1 : index346// CHECK:           %[[VAL_4:.*]] = arith.constant 10 : index347// CHECK:           %[[VAL_5:.*]] = arith.constant 19 : index348// CHECK:           %[[VAL_6:.*]] = fir.shape_shift %[[VAL_1]], %[[VAL_4]] : (index, index) -> !fir.shapeshift<1>349// CHECK:           %[[VAL_7:.*]] = fir.slice %[[VAL_4]], %[[VAL_5]], %[[VAL_3]] : (index, index, index) -> !fir.slice<1>350// CHECK:           %[[VAL_8:.*]] = arith.addi %[[VAL_2]], %[[VAL_1]] overflow<nsw> : index351// CHECK:           %[[VAL_9:.*]] = arith.subi %[[VAL_8]], %[[VAL_3]] overflow<nsw> : index352// CHECK:           %[[VAL_10:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_6]]) {{\[}}%[[VAL_7]]] %[[VAL_9]] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>353// CHECK:           return %[[VAL_10]] : !fir.ref<i32>354// CHECK:         }355func.func @test8_3(%arg0: !fir.ref<!fir.array<10xi32>>, %lb: index, %idx: index) -> !fir.ref<i32> {356  %c1 = arith.constant 1 : index357  %c10 = arith.constant 10 : index358  %c19 = arith.constant 19 : index359  %1 = fir.shape_shift %lb, %c10 : (index, index) -> !fir.shapeshift<1>360  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>361  %2 = fir.embox %arg0(%1) [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>362  %3 = fir.array_coor %2 %idx : (!fir.box<!fir.array<10xi32>>, index) -> !fir.ref<i32>363  return %3 : !fir.ref<i32>364}365 366// CHECK-LABEL:   func.func @test9(367// CHECK-SAME:                     %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {368// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index369// CHECK:           %[[VAL_2:.*]] = arith.constant 9 : index370// CHECK:           %[[VAL_3:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>371// CHECK:           %[[VAL_4:.*]] = fir.array_coor %[[VAL_0]] {{\[}}%[[VAL_3]]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>372// CHECK:           return %[[VAL_4]] : !fir.ref<i32>373// CHECK:         }374func.func @test9(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {375  %c1 = arith.constant 1 : index376  %c10 = arith.constant 10 : index377  %c9 = arith.constant 9 : index378  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>379  %2 = fir.rebox %arg0 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<!fir.array<?xi32>>380  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>381  return %3 : !fir.ref<i32>382}383 384// CHECK-LABEL:   func.func @test10(385// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {386// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index387// CHECK:           %[[VAL_2:.*]] = arith.constant 9 : index388// CHECK:           %[[VAL_3:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>389// CHECK:           %[[VAL_4:.*]] = fir.array_coor %[[VAL_0]] {{\[}}%[[VAL_3]]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>390// CHECK:           return %[[VAL_4]] : !fir.ref<i32>391// CHECK:         }392func.func @test10(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {393  %c1 = arith.constant 1 : index394  %c10 = arith.constant 10 : index395  %c9 = arith.constant 9 : index396  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>397  %2 = fir.rebox %arg0[%s] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>) -> !fir.box<!fir.array<?xi32>>398  %3 = fir.array_coor %2 [%s] %c1 : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>399  return %3 : !fir.ref<i32>400}401 402// CHECK-LABEL:   func.func @test11(403// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {404// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index405// CHECK:           %[[VAL_2:.*]] = fir.array_coor %[[VAL_0]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>406// CHECK:           return %[[VAL_2]] : !fir.ref<i32>407// CHECK:         }408func.func @test11(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {409  %c1 = arith.constant 1 : index410  %2 = fir.rebox %arg0 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<!fir.array<?xi32>>411  %3 = fir.array_coor %2 %c1 : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>412  return %3 : !fir.ref<i32>413}414 415// CHECK-LABEL:   func.func @test12(416// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {417// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index418// CHECK:           %[[VAL_2:.*]] = arith.constant 9 : index419// CHECK:           %[[VAL_3:.*]] = fir.slice %[[VAL_1]], %[[VAL_2]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>420// CHECK:           %[[VAL_4:.*]] = fir.array_coor %[[VAL_0]] {{\[}}%[[VAL_3]]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>, index) -> !fir.ref<i32>421// CHECK:           return %[[VAL_4]] : !fir.ref<i32>422// CHECK:         }423func.func @test12(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {424  %c1 = arith.constant 1 : index425  %c10 = arith.constant 10 : index426  %c9 = arith.constant 9 : index427  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>428  %2 = fir.rebox %arg0[%s] : (!fir.box<!fir.array<?xi32>>, !fir.slice<1>) -> !fir.box<!fir.array<?xi32>>429  %3 = fir.array_coor %2 %c1 : (!fir.box<!fir.array<?xi32>>, index) -> !fir.ref<i32>430  return %3 : !fir.ref<i32>431}432 433// CHECK-LABEL:   func.func @test13(434// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {435// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index436// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index437// CHECK:           %[[VAL_3:.*]] = arith.constant 19 : index438// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_2]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>439// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_2]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>440// CHECK:           %[[VAL_6:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>441// CHECK:           return %[[VAL_6]] : !fir.ref<i32>442// CHECK:         }443func.func @test13(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {444  %c1 = arith.constant 1 : index445  %c10 = arith.constant 10 : index446  %c19 = arith.constant 19 : index447  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>448  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>449  %2 = fir.embox %arg0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>) -> !fir.box<!fir.array<10xi32>>450  %3 = fir.array_coor %2(%1) [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>451  return %3 : !fir.ref<i32>452}453 454// CHECK-LABEL:   func.func @test14(455// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {456// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index457// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index458// CHECK:           %[[VAL_3:.*]] = arith.constant 19 : index459// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_2]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>460// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_2]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>461// CHECK:           %[[VAL_6:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>462// CHECK:           return %[[VAL_6]] : !fir.ref<i32>463// CHECK:         }464func.func @test14(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {465  %c1 = arith.constant 1 : index466  %c10 = arith.constant 10 : index467  %c19 = arith.constant 19 : index468  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>469  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>470  %2 = fir.embox %arg0(%1) [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>471  %3 = fir.array_coor %2(%1) [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>472  return %3 : !fir.ref<i32>473}474 475// CHECK-LABEL:   func.func @test15(476// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {477// CHECK:           %[[VAL_1:.*]] = arith.constant 10 : index478// CHECK:           %[[VAL_2:.*]] = fir.shape_shift %[[VAL_1]], %[[VAL_1]] : (index, index) -> !fir.shapeshift<1>479// CHECK:           %[[VAL_3:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_2]]) %[[VAL_1]] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>480// CHECK:           return %[[VAL_3]] : !fir.ref<i32>481// CHECK:         }482func.func @test15(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {483  %c10 = arith.constant 10 : index484  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>485  %2 = fir.embox %arg0(%1) : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>) -> !fir.box<!fir.array<10xi32>>486  %3 = fir.array_coor %2(%1) %c10 : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>487  return %3 : !fir.ref<i32>488}489 490// CHECK-LABEL:   func.func @test16(491// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {492// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index493// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index494// CHECK:           %[[VAL_3:.*]] = arith.constant 19 : index495// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_2]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>496// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_2]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>497// CHECK:           %[[VAL_6:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] %[[VAL_2]] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>498// CHECK:           return %[[VAL_6]] : !fir.ref<i32>499// CHECK:         }500func.func @test16(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {501  %c1 = arith.constant 1 : index502  %c10 = arith.constant 10 : index503  %c19 = arith.constant 19 : index504  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>505  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>506  %2 = fir.embox %arg0(%1) [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>507  %3 = fir.array_coor %2(%1) %c10 : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>508  return %3 : !fir.ref<i32>509}510 511// CHECK-LABEL:   func.func @test17(512// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {513// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index514// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index515// CHECK:           %[[VAL_3:.*]] = arith.constant 19 : index516// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_2]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>517// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_2]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>518// CHECK:           %[[VAL_6:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>519// CHECK:           return %[[VAL_6]] : !fir.ref<i32>520// CHECK:         }521func.func @test17(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {522  %c1 = arith.constant 1 : index523  %c10 = arith.constant 10 : index524  %c19 = arith.constant 19 : index525  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>526  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>527  %2 = fir.rebox %arg0 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<!fir.array<?xi32>>528  %3 = fir.array_coor %2(%1) [%s] %c1 : (!fir.box<!fir.array<?xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>529  return %3 : !fir.ref<i32>530}531 532// CHECK-LABEL:   func.func @test18(533// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {534// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index535// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index536// CHECK:           %[[VAL_3:.*]] = arith.constant 9 : index537// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_1]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>538// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_1]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>539// CHECK:           %[[VAL_6:.*]] = fir.embox %[[VAL_0]] {{\[}}%[[VAL_5]]] : (!fir.ref<!fir.array<10xi32>>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>540// CHECK:           %[[VAL_7:.*]] = fir.array_coor %[[VAL_6]](%[[VAL_4]]) {{\[}}%[[VAL_5]]] %[[VAL_1]] : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>541// CHECK:           return %[[VAL_7]] : !fir.ref<i32>542// CHECK:         }543func.func @test18(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {544  %c1 = arith.constant 1 : index545  %c10 = arith.constant 10 : index546  %c9 = arith.constant 9 : index547  %1 = fir.shape_shift %c1, %c10 : (index, index) -> !fir.shapeshift<1>548  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>549  %2 = fir.embox %arg0 [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>550  %3 = fir.array_coor %2(%1) [%s] %c1 : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, !fir.slice<1>, index) -> !fir.ref<i32>551  return %3 : !fir.ref<i32>552}553 554// CHECK-LABEL:   func.func @test19(555// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {556// CHECK:           %[[VAL_1:.*]] = arith.constant 10 : index557// CHECK:           %[[VAL_2:.*]] = fir.shape_shift %[[VAL_1]], %[[VAL_1]] : (index, index) -> !fir.shapeshift<1>558// CHECK:           %[[VAL_3:.*]] = fir.array_coor %[[VAL_0]](%[[VAL_2]]) %[[VAL_1]] : (!fir.box<!fir.array<?xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>559// CHECK:           return %[[VAL_3]] : !fir.ref<i32>560// CHECK:         }561func.func @test19(%arg0: !fir.box<!fir.array<?xi32>>) -> !fir.ref<i32> {562  %c1 = arith.constant 1 : index563  %c10 = arith.constant 10 : index564  %c19 = arith.constant 19 : index565  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>566  %s = fir.slice %c10, %c19, %c1 : (index, index, index) -> !fir.slice<1>567  %2 = fir.rebox %arg0 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<!fir.array<?xi32>>568  %3 = fir.array_coor %2(%1) %c10 : (!fir.box<!fir.array<?xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>569  return %3 : !fir.ref<i32>570}571 572// CHECK-LABEL:   func.func @test20(573// CHECK-SAME:                      %[[VAL_0:.*]]: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {574// CHECK:           %[[VAL_1:.*]] = arith.constant 1 : index575// CHECK:           %[[VAL_2:.*]] = arith.constant 10 : index576// CHECK:           %[[VAL_3:.*]] = arith.constant 9 : index577// CHECK:           %[[VAL_4:.*]] = fir.shape_shift %[[VAL_2]], %[[VAL_2]] : (index, index) -> !fir.shapeshift<1>578// CHECK:           %[[VAL_5:.*]] = fir.slice %[[VAL_1]], %[[VAL_3]], %[[VAL_1]] : (index, index, index) -> !fir.slice<1>579// CHECK:           %[[VAL_6:.*]] = fir.embox %[[VAL_0]] {{\[}}%[[VAL_5]]] : (!fir.ref<!fir.array<10xi32>>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>580// CHECK:           %[[VAL_7:.*]] = fir.array_coor %[[VAL_6]](%[[VAL_4]]) %[[VAL_2]] : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>581// CHECK:           return %[[VAL_7]] : !fir.ref<i32>582// CHECK:         }583func.func @test20(%arg0: !fir.ref<!fir.array<10xi32>>) -> !fir.ref<i32> {584  %c1 = arith.constant 1 : index585  %c10 = arith.constant 10 : index586  %c9 = arith.constant 9 : index587  %1 = fir.shape_shift %c10, %c10 : (index, index) -> !fir.shapeshift<1>588  %s = fir.slice %c1, %c9, %c1 : (index, index, index) -> !fir.slice<1>589  %2 = fir.embox %arg0 [%s] : (!fir.ref<!fir.array<10xi32>>, !fir.slice<1>) -> !fir.box<!fir.array<10xi32>>590  %3 = fir.array_coor %2(%1) %c10 : (!fir.box<!fir.array<10xi32>>, !fir.shapeshift<1>, index) -> !fir.ref<i32>591  return %3 : !fir.ref<i32>592}593