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