xref: /llvm-project/mlir/test/Dialect/Vector/vector-extract-strided-slice-lowering.mlir (revision 9816edc9f3ce198d41e364dd3467caa839a0c220)
1// RUN: mlir-opt -split-input-file -test-vector-extract-strided-slice-lowering %s | FileCheck %s
2
3// CHECK-LABEL: func.func @extract_strided_slice_1D
4//  CHECK-SAME: (%[[INPUT:.+]]: vector<8xf16>)
5func.func @extract_strided_slice_1D(%input: vector<8xf16>) -> vector<4xf16> {
6  %0 = vector.extract_strided_slice %input {offsets = [1], sizes = [4], strides = [1]} : vector<8xf16> to vector<4xf16>
7  return %0: vector<4xf16>
8}
9
10// CHECK: %[[INIT:.+]] = arith.constant dense<0.000000e+00> : vector<4xf16>
11// CHECK: %[[E0:.+]] = vector.extract %[[INPUT]][1] : f16 from vector<8xf16>
12// CHECK: %[[E1:.+]] = vector.extract %[[INPUT]][2] : f16 from vector<8xf16>
13// CHECK: %[[E2:.+]] = vector.extract %[[INPUT]][3] : f16 from vector<8xf16>
14// CHECK: %[[E3:.+]] = vector.extract %[[INPUT]][4] : f16 from vector<8xf16>
15// CHECK: %[[I0:.+]] = vector.insert %[[E0]], %[[INIT]] [0] : f16 into vector<4xf16>
16// CHECK: %[[I1:.+]] = vector.insert %[[E1]], %[[I0]] [1] : f16 into vector<4xf16>
17// CHECK: %[[I2:.+]] = vector.insert %[[E2]], %[[I1]] [2] : f16 into vector<4xf16>
18// CHECK: %[[I3:.+]] = vector.insert %[[E3]], %[[I2]] [3] : f16 into vector<4xf16>
19// CHECK: return %[[I3]]
20
21
22// -----
23
24// CHECK-LABEL: func.func @extract_strided_slice_2D
25func.func @extract_strided_slice_2D(%input: vector<1x8xf16>) -> vector<1x4xf16> {
26  // CHECK: vector.extract_strided_slice
27  %0 = vector.extract_strided_slice %input {offsets = [0, 1], sizes = [1, 4], strides = [1, 1]} : vector<1x8xf16> to vector<1x4xf16>
28  return %0: vector<1x4xf16>
29}
30