blob: 6ec9ee4d462ec7bbd6aa293ed7b7cf6a1551c2cb [file] [log] [blame]
func.func @extract_slice_strided() {
%0 = tensor.empty() : tensor<500x750xi32>
%1 = linalg.generic {
indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>],
iterator_types = ["parallel", "parallel"]}
outs(%0 : tensor<500x750xi32>) {
^bb0(%arg0 : i32):
%2 = linalg.index 0 : index
%3 = linalg.index 1 : index
%4 = arith.index_cast %2 : index to i32
%c750_i32 = arith.constant 750 : i32
%5 = arith.muli %4, %c750_i32 : i32
%6 = arith.index_cast %3 : index to i32
%7 = arith.addi %5, %6 : i32
linalg.yield %7 : i32
} -> tensor<500x750xi32>
%2 = tensor.extract_slice %1[20, 30] [50, 75] [2, 3]
: tensor<500x750xi32> to tensor<50x75xi32>
%3 = tensor.empty() : tensor<50x75xi32>
%4 = linalg.generic {
indexing_maps = [affine_map<(d0, d1) -> (d0, d1)>],
iterator_types = ["parallel", "parallel"]}
outs(%3 : tensor<50x75xi32>) {
^bb0(%arg0 : i32) :
%5 = linalg.index 0 : index
%6 = linalg.index 1 : index
%c20_i32 = arith.constant 20 : i32
%c30_i32 = arith.constant 30 : i32
%c2_i32 = arith.constant 2 : i32
%c3_i32 = arith.constant 3 : i32
%7 = arith.index_cast %6 : index to i32
%8 = arith.muli %7, %c3_i32 : i32
%9 = arith.addi %c30_i32, %8 : i32
%10 = arith.index_cast %5 : index to i32
%11 = arith.muli %10, %c2_i32 : i32
%12 = arith.addi %c20_i32, %11 : i32
%c750_i32 = arith.constant 750 : i32
%13 = arith.muli %12, %c750_i32 : i32
%14 = arith.addi %13, %9 : i32
linalg.yield %14 : i32
} -> tensor<50x75xi32>
check.expect_eq(%2, %4) : tensor<50x75xi32>
return
}