@@ -192,7 +192,7 @@ func.func @subview_const_stride(%0 : memref<64x4xf32, strided<[4, 1], offset: 0>
192192
193193// CHECK-LABEL: func @subview_const_stride_and_offset(
194194// CHECK-SAME: %[[MEM:.*]]: memref<{{.*}}>
195- func.func @subview_const_stride_and_offset (%0 : memref <64 x 4 x f32 , strided <[4 , 1 ], offset : 0 >>) -> memref <62 x3 xf32 , strided <[4 , 1 ], offset : 1 >> {
195+ func.func @subview_const_stride_and_offset (%0 : memref <64 x 8 x f32 , strided <[8 , 1 ], offset : 0 >>) -> memref <62 x3 xf32 , strided <[8 , 1 ], offset : 2 >> {
196196 // The last "insertvalue" that populates the memref descriptor from the function arguments.
197197 // CHECK: %[[MEMREF:.*]] = builtin.unrealized_conversion_cast %[[MEM]]
198198
@@ -201,20 +201,21 @@ func.func @subview_const_stride_and_offset(%0 : memref<64x4xf32, strided<[4, 1],
201201 // CHECK: %[[DESC:.*]] = llvm.mlir.poison : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
202202 // CHECK: %[[DESC0:.*]] = llvm.insertvalue %[[BASE]], %[[DESC]][0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
203203 // CHECK: %[[DESC1:.*]] = llvm.insertvalue %[[BASE_ALIGNED]], %[[DESC0]][1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
204- // CHECK: %[[C1 :.*]] = llvm.mlir.constant(1 : index) : i64
205- // CHECK: %[[DESC2:.*]] = llvm.insertvalue %[[C1 ]], %[[DESC1]][2] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
204+ // CHECK: %[[CST_OFF :.*]] = llvm.mlir.constant(2 : index) : i64
205+ // CHECK: %[[DESC2:.*]] = llvm.insertvalue %[[CST_OFF ]], %[[DESC1]][2] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
206206 // CHECK: %[[CST_SIZE0:.*]] = llvm.mlir.constant(62 : index) : i64
207207 // CHECK: %[[DESC3:.*]] = llvm.insertvalue %[[CST_SIZE0]], %[[DESC2]][3, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
208- // CHECK: %[[CST_STRIDE0:.*]] = llvm.mlir.constant(4 : index) : i64
208+ // CHECK: %[[CST_STRIDE0:.*]] = llvm.mlir.constant(8 : index) : i64
209209 // CHECK: %[[DESC4:.*]] = llvm.insertvalue %[[CST_STRIDE0]], %[[DESC3]][4, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
210210 // CHECK: %[[CST_SIZE1:.*]] = llvm.mlir.constant(3 : index) : i64
211211 // CHECK: %[[DESC5:.*]] = llvm.insertvalue %[[CST_SIZE1]], %[[DESC4]][3, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
212- // CHECK: %[[DESC6:.*]] = llvm.insertvalue %[[C1]], %[[DESC5]][4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
212+ // CHECK: %[[CST_STRIDE1:.*]] = llvm.mlir.constant(1 : index) : i64
213+ // CHECK: %[[DESC6:.*]] = llvm.insertvalue %[[CST_STRIDE1]], %[[DESC5]][4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
213214
214- %1 = memref.subview %0 [0 , 1 ][62 , 3 ][1 , 1 ] :
215- memref <64 x 4 x f32 , strided <[4 , 1 ], offset : 0 >>
216- to memref <62 x3 xf32 , strided <[4 , 1 ], offset : 1 >>
217- return %1 : memref <62 x3 xf32 , strided <[4 , 1 ], offset : 1 >>
215+ %1 = memref.subview %0 [0 , 2 ][62 , 3 ][1 , 1 ] :
216+ memref <64 x 8 x f32 , strided <[8 , 1 ], offset : 0 >>
217+ to memref <62 x3 xf32 , strided <[8 , 1 ], offset : 2 >>
218+ return %1 : memref <62 x3 xf32 , strided <[8 , 1 ], offset : 2 >>
218219}
219220
220221// -----
@@ -237,8 +238,8 @@ func.func @subview_mixed_static_dynamic(%0 : memref<64x4xf32, strided<[4, 1], of
237238 // CHECK: %[[TMP:.*]] = builtin.unrealized_conversion_cast %[[DESCSTRIDE0]] : i64 to index
238239 // CHECK: %[[DESCSTRIDE0_V2:.*]] = builtin.unrealized_conversion_cast %[[TMP]] : index to i64
239240 // CHECK: %[[OFF0:.*]] = llvm.mul %[[ARG1]], %[[STRIDE0]] overflow<nsw> : i64
240- // CHECK: %[[C1 :.*]] = llvm.mlir.constant(1 : index) : i64
241- // CHECK: %[[OFF2:.*]] = llvm.add %[[OFF0]], %[[C1 ]] : i64
241+ // CHECK: %[[BASE_OFF :.*]] = llvm.mlir.constant(2 : index) : i64
242+ // CHECK: %[[OFF2:.*]] = llvm.add %[[OFF0]], %[[BASE_OFF ]] : i64
242243 // CHECK: %[[TMP:.*]] = builtin.unrealized_conversion_cast %[[OFF2]] : i64 to index
243244 // CHECK: %[[OFF2:.*]] = builtin.unrealized_conversion_cast %[[TMP]] : index to i64
244245 // CHECK: %[[DESC:.*]] = llvm.mlir.poison : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
@@ -249,9 +250,10 @@ func.func @subview_mixed_static_dynamic(%0 : memref<64x4xf32, strided<[4, 1], of
249250 // CHECK: %[[DESC3:.*]] = llvm.insertvalue %[[CST_SIZE0]], %[[DESC2]][3, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
250251 // CHECK: %[[DESC4:.*]] = llvm.insertvalue %[[DESCSTRIDE0_V2]], %[[DESC3]][4, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
251252 // CHECK: %[[DESC5:.*]] = llvm.insertvalue %[[ARG2]], %[[DESC4]][3, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
252- // CHECK: %[[DESC6:.*]] = llvm.insertvalue %[[C1]], %[[DESC5]][4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
253+ // CHECK: %[[CST_STRIDE1:.*]] = llvm.mlir.constant(1 : index) : i64
254+ // CHECK: %[[DESC6:.*]] = llvm.insertvalue %[[CST_STRIDE1]], %[[DESC5]][4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
253255
254- %1 = memref.subview %0 [%arg1 , 1 ][62 , %arg2 ][%arg0 , 1 ] :
256+ %1 = memref.subview %0 [%arg1 , 2 ][62 , %arg2 ][%arg0 , 1 ] :
255257 memref <64 x4 xf32 , strided <[4 , 1 ], offset : 0 >>
256258 to memref <62 x?xf32 , strided <[?, 1 ], offset : ?>>
257259 return %1 : memref <62 x?xf32 , strided <[?, 1 ], offset : ?>>
0 commit comments