1- // RUN: mlir-opt %s -split-input-file -test-vector-linearize -verify-diagnostics | FileCheck %s
1+ // RUN: mlir-opt %s -split-input-file -test-vector-linearize -verify-diagnostics | FileCheck %s
22
33// CHECK-LABEL: test_linearize
44// CHECK-SAME: (%[[ORIG_ARG:.*]]: vector<2x2xf32>)
@@ -153,7 +153,7 @@ func.func @test_extract_strided_slice_2D_scalable(%arg0: vector<4x[8]xf32>) -> v
153153
154154 // CHECK-NOT: vector.shuffle
155155 // CHECK-NOT: vector.shape_cast
156- // CHECK: %[[RES:.*]] = vector.extract_strided_slice %[[VAL_0]]
156+ // CHECK: %[[RES:.*]] = vector.extract_strided_slice %[[VAL_0]]
157157 %0 = vector.extract_strided_slice %arg0 { sizes = [2 , 8 ], strides = [1 , 1 ], offsets = [1 , 0 ] } : vector <4 x[8 ]xf32 > to vector <2 x[8 ]xf32 >
158158
159159 // CHECK: return %[[RES]] : vector<2x[8]xf32>
@@ -179,7 +179,7 @@ func.func @test_extract_strided_slice_3D(%arg0 : vector<2x8x2xf32>) -> vector<1x
179179// -----
180180
181181// Test of insert_strided_slice -> shuffle.
182- // This is a contiguous insertion of 4 elements at offset 6 into a vector of 12 elements.
182+ // This is a contiguous insertion of 4 elements at offset 6 into a vector of 12 elements.
183183// CHECK-LABEL: insert_strided_slice_2D_into_4D
184184func.func @insert_strided_slice_2D_into_4D (%arg0 : vector <2 x2 xi8 >, %arg1 : vector <2 x1 x3 x2 xi8 >) -> vector <2 x1 x3 x2 xi8 > {
185185
@@ -196,19 +196,19 @@ func.func @insert_strided_slice_2D_into_4D(%arg0 : vector<2x2xi8>, %arg1 : vecto
196196
197197// -----
198198
199- // Test of insert_strided_slice -> shuffle.
199+ // Test of insert_strided_slice -> shuffle.
200200// [[[0, 1], [2, 3], [4, 5]], [[6, 7], [8, 9], [10, 11]], [[12, 13], [14, 15]], [[16, 17]]]
201201// ^ ^
202202// | |
203203// where the 2 elements are inserted into the 3x3x2 vector
204204// CHECK-LABEL: insert_strided_slice_3D
205- func.func @insert_strided_slice_3D (%arg0 : vector <1 x2 x1 xi8 >, %arg2 : vector <3 x3 x2 xi8 >) -> vector <3 x3 x2 xi8 > {
205+ func.func @insert_strided_slice_3D (%arg0 : vector <1 x2 x1 xi8 >, %arg1 : vector <3 x3 x2 xi8 >) -> vector <3 x3 x2 xi8 > {
206206
207207// CHECK-DAG: %[[ARG0:.*]] = vector.shape_cast {{.*}} to vector<2xi8>
208208// CHECK-DAG: %[[ARG1:.*]] = vector.shape_cast {{.*}} to vector<18xi8>
209209// CHECK: vector.shuffle %[[ARG1]], %[[ARG0]]
210210// CHECK-SAME: [0, 1, 2, 3, 4, 5, 6, 7, 8, 18, 10, 19, 12, 13, 14, 15, 16, 17] : vector<18xi8>, vector<2xi8>
211- %0 = vector.insert_strided_slice %arg0 , %arg2 {offsets = [1 , 1 , 1 ], sizes = [1 , 2 , 1 ], strides = [1 , 1 , 1 ]} : vector <1 x2 x1 xi8 > into vector <3 x3 x2 xi8 >
211+ %0 = vector.insert_strided_slice %arg0 , %arg1 {offsets = [1 , 1 , 1 ], sizes = [1 , 2 , 1 ], strides = [1 , 1 , 1 ]} : vector <1 x2 x1 xi8 > into vector <3 x3 x2 xi8 >
212212
213213// CHECK: %[[RES:.*]] = vector.shape_cast {{.*}} to vector<3x3x2xi8>
214214// CHECK: return %[[RES]] : vector<3x3x2xi8>
@@ -217,6 +217,37 @@ func.func @insert_strided_slice_3D(%arg0 : vector<1x2x1xi8>, %arg2 : vector<3x3x
217217
218218// -----
219219
220+ // CHECK-LABEL: insert_strided_slice_2D_higher_offsets
221+ func.func @insert_strided_slice_2D_higher_offsets (%arg0 : vector <2 x1 xi8 >, %arg1 : vector <2 x2 xi8 >, %arg2 : vector <5 x2 xi8 >) -> vector <5 x2 xi8 > {
222+
223+ // CHECK: [0, 1, 2, 3, 10, 11, 12, 13, 8, 9]
224+ // ^^^ ^^^ ^^^ ^^^
225+ // insertion indices
226+ %0 = vector.insert_strided_slice %arg1 , %arg2 {offsets = [2 , 0 ], sizes = [2 , 2 ], strides = [1 , 1 ]} : vector <2 x2 xi8 > into vector <5 x2 xi8 >
227+
228+ // CHECK: [0, 1, 2, 3, 10, 5, 11, 7, 8, 9]
229+ // ^^^ ^^^
230+ %1 = vector.insert_strided_slice %arg0 , %0 {offsets = [2 , 0 ], sizes = [2 , 1 ], strides = [1 , 1 ]} : vector <2 x1 xi8 > into vector <5 x2 xi8 >
231+
232+ // CHECK: [0, 1, 2, 3, 4, 5, 6, 10, 8, 11]
233+ // ^^^ ^^^
234+ %2 = vector.insert_strided_slice %arg0 , %1 {offsets = [3 , 1 ], sizes = [2 , 1 ], strides = [1 , 1 ]} : vector <2 x1 xi8 > into vector <5 x2 xi8 >
235+
236+ return %2 : vector <5 x2 xi8 >
237+ }
238+
239+ // -----
240+
241+ // CHECK-LABEL: negative_insert_strided_slice_scalable
242+ // CHECK-NOT: vector.shuffle
243+ // CHECK: return
244+ func.func @negative_insert_strided_slice_scalable (%arg0 : vector <1 x[2 ]xi8 >, %arg1 : vector <2 x[2 ]xi8 >) -> vector <2 x[2 ]xi8 > {
245+ %0 = vector.insert_strided_slice %arg0 , %arg1 {offsets = [0 , 0 ], strides = [1 ,1 ]} : vector <1 x[2 ]xi8 > into vector <2 x[2 ]xi8 >
246+ return %0 : vector <2 x[2 ]xi8 >
247+ }
248+
249+ // -----
250+
220251// CHECK-LABEL: test_vector_shuffle
221252// CHECK-SAME: (%[[ORIG_ARG0:.*]]: vector<4x2xf32>, %[[ORIG_ARG1:.*]]: vector<4x2xf32>) -> vector<8x2xf32> {
222253func.func @test_vector_shuffle (%arg0: vector <4 x2 xf32 >, %arg1: vector <4 x2 xf32 >) -> vector <8 x2 xf32 > {
0 commit comments