Skip to content

Commit c854059

Browse files
committed
Feedback
1 parent 8192475 commit c854059

File tree

4 files changed

+142
-25
lines changed

4 files changed

+142
-25
lines changed

mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,38 @@ func.func @extract_scalar_from_vec_1d_f32(%arg0: vector<16xf32>) -> f32 {
11191119
// CHECK: llvm.extractelement {{.*}}[{{.*}} : i64] : vector<16xf32>
11201120
// CHECK: return {{.*}} : f32
11211121

1122+
// -----
1123+
1124+
func.func @extract_i32_index(%arg0: vector<16xf32>, %arg1: i32) -> f32 {
1125+
%0 = vector.extract %arg0[%arg1 : i32]: f32 from vector<16xf32>
1126+
return %0 : f32
1127+
}
1128+
// CHECK-LABEL: @extract_i32_index
1129+
// CHECK: llvm.extractelement {{.*}}[{{.*}} : i32] : vector<16xf32>
1130+
// CHECK: return {{.*}} : f32
1131+
1132+
// -----
1133+
1134+
func.func @extract_i8_index(%arg0: vector<16xf32>, %arg1: i8) -> f32 {
1135+
%0 = vector.extract %arg0[%arg1 : i8]: f32 from vector<16xf32>
1136+
return %0 : f32
1137+
}
1138+
// CHECK-LABEL: @extract_i8_index
1139+
// CHECK: llvm.extractelement {{.*}}[{{.*}} : i8] : vector<16xf32>
1140+
// CHECK: return {{.*}} : f32
1141+
1142+
// -----
1143+
1144+
func.func @extract_i1_index(%arg0: vector<16xf32>, %arg1: i1) -> f32 {
1145+
%0 = vector.extract %arg0[%arg1 : i1]: f32 from vector<16xf32>
1146+
return %0 : f32
1147+
}
1148+
// CHECK-LABEL: @extract_i1_index
1149+
// CHECK: llvm.extractelement {{.*}}[{{.*}} : i1] : vector<16xf32>
1150+
// CHECK: return {{.*}} : f32
1151+
1152+
// -----
1153+
11221154
func.func @extract_scalar_from_vec_1d_f32_scalable(%arg0: vector<[16]xf32>) -> f32 {
11231155
%0 = vector.extract %arg0[15]: f32 from vector<[16]xf32>
11241156
return %0 : f32
@@ -1247,6 +1279,8 @@ func.func @extract_scalar_from_vec_1d_f32_dynamic_idx(%arg0: vector<16xf32>, %ar
12471279
// CHECK: %[[UC:.+]] = builtin.unrealized_conversion_cast %[[INDEX]] : index to i64
12481280
// CHECK: llvm.extractelement %[[VEC]][%[[UC]] : i64] : vector<16xf32>
12491281

1282+
// -----
1283+
12501284
func.func @extract_scalar_from_vec_1d_f32_dynamic_idx_scalable(%arg0: vector<[16]xf32>, %arg1: index) -> f32 {
12511285
%0 = vector.extract %arg0[%arg1 : index] : f32 from vector<[16]xf32>
12521286
return %0 : f32
@@ -1268,6 +1302,8 @@ func.func @extract_scalar_from_vec_2d_f32_dynamic_idx(%arg0: vector<1x16xf32>, %
12681302
// CHECK-LABEL: @extract_scalar_from_vec_2d_f32_dynamic_idx(
12691303
// CHECK: vector.extract
12701304

1305+
// -----
1306+
12711307
func.func @extract_scalar_from_vec_2d_f32_dynamic_idx_scalable(%arg0: vector<1x[16]xf32>, %arg1: index) -> f32 {
12721308
%0 = vector.extract %arg0[0, %arg1 : index] : f32 from vector<1x[16]xf32>
12731309
return %0 : f32
@@ -1356,6 +1392,38 @@ func.func @insert_scalar_into_vec_1d_f32(%arg0: f32, %arg1: vector<4xf32>) -> ve
13561392
// CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i64] : vector<4xf32>
13571393
// CHECK: return {{.*}} : vector<4xf32>
13581394

1395+
// -----
1396+
1397+
func.func @insert_i32_index(%arg0: f32, %arg1: vector<4xf32>, %arg2: i32) -> vector<4xf32> {
1398+
%0 = vector.insert %arg0, %arg1[%arg2 : i32] : f32 into vector<4xf32>
1399+
return %0 : vector<4xf32>
1400+
}
1401+
// CHECK-LABEL: @insert_i32_index
1402+
// CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i32] : vector<4xf32>
1403+
// CHECK: return {{.*}} : vector<4xf32>
1404+
1405+
// -----
1406+
1407+
func.func @insert_i8_index(%arg0: f32, %arg1: vector<4xf32>, %arg2: i8) -> vector<4xf32> {
1408+
%0 = vector.insert %arg0, %arg1[%arg2 : i8] : f32 into vector<4xf32>
1409+
return %0 : vector<4xf32>
1410+
}
1411+
// CHECK-LABEL: @insert_i8_index
1412+
// CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i8] : vector<4xf32>
1413+
// CHECK: return {{.*}} : vector<4xf32>
1414+
1415+
// -----
1416+
1417+
func.func @insert_i1_index(%arg0: f32, %arg1: vector<4xf32>, %arg2: i1) -> vector<4xf32> {
1418+
%0 = vector.insert %arg0, %arg1[%arg2 : i1] : f32 into vector<4xf32>
1419+
return %0 : vector<4xf32>
1420+
}
1421+
// CHECK-LABEL: @insert_i1_index
1422+
// CHECK: llvm.insertelement {{.*}}, {{.*}}[{{.*}} : i1] : vector<4xf32>
1423+
// CHECK: return {{.*}} : vector<4xf32>
1424+
1425+
// -----
1426+
13591427
func.func @insert_scalar_into_vec_1d_f32_scalable(%arg0: f32, %arg1: vector<[4]xf32>) -> vector<[4]xf32> {
13601428
%0 = vector.insert %arg0, %arg1[3] : f32 into vector<[4]xf32>
13611429
return %0 : vector<[4]xf32>

mlir/test/Conversion/VectorToSPIRV/vector-to-spirv.mlir

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,28 @@ func.func @extract_dynamic(%arg0 : vector<4xf32>, %id : index) -> f32 {
206206
return %0: f32
207207
}
208208

209+
// -----
210+
211+
// CHECK-LABEL: @extract_i32_index
212+
// CHECK-SAME: %[[V:.*]]: vector<4xf32>, %[[ID:.*]]: i32
213+
// CHECK: spirv.VectorExtractDynamic %[[V]][%[[ID]]] : vector<4xf32>, i32
214+
func.func @extract_i32_index(%arg0 : vector<4xf32>, %id : i32) -> f32 {
215+
%0 = vector.extract %arg0[%id : i32] : f32 from vector<4xf32>
216+
return %0: f32
217+
}
218+
219+
// -----
220+
221+
// CHECK-LABEL: @extract_i8_index
222+
// CHECK-SAME: %[[V:.*]]: vector<4xf32>, %[[ID:.*]]: i8
223+
// CHECK: spirv.VectorExtractDynamic %[[V]][%[[ID]]] : vector<4xf32>, i8
224+
func.func @extract_i8_index(%arg0 : vector<4xf32>, %id : i8) -> f32 {
225+
%0 = vector.extract %arg0[%id : i8] : f32 from vector<4xf32>
226+
return %0: f32
227+
}
228+
229+
// -----
230+
209231
// CHECK-LABEL: @extract_dynamic_cst
210232
// CHECK-SAME: %[[V:.*]]: vector<4xf32>
211233
// CHECK: spirv.CompositeExtract %[[V]][1 : i32] : vector<4xf32>
@@ -269,6 +291,28 @@ func.func @insert_dynamic(%val: f32, %arg0 : vector<4xf32>, %id : index) -> vect
269291

270292
// -----
271293

294+
// CHECK-LABEL: @insert_i32_index
295+
// CHECK-SAME: %[[VAL:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[ARG2:.*]]: i32
296+
// CHECK: %[[ID:.+]] = builtin.unrealized_conversion_cast %[[ARG2]] : index to i32
297+
// CHECK: spirv.VectorInsertDynamic %[[VAL]], %[[V]][%[[ID]]] : vector<4xf32>, i32
298+
func.func @insert_dynamic(%val: f32, %arg0 : vector<4xf32>, %id : i32) -> vector<4xf32> {
299+
%0 = vector.insert %val, %arg0[%id : i32] : f32 into vector<4xf32>
300+
return %0: vector<4xf32>
301+
}
302+
303+
// -----
304+
305+
// CHECK-LABEL: @insert_i8_index
306+
// CHECK-SAME: %[[VAL:.*]]: f32, %[[V:.*]]: vector<4xf32>, %[[ARG2:.*]]: i8
307+
// CHECK: %[[ID:.+]] = builtin.unrealized_conversion_cast %[[ARG2]] : index to i8
308+
// CHECK: spirv.VectorInsertDynamic %[[VAL]], %[[V]][%[[ID]]] : vector<4xf32>, i8
309+
func.func @insert_dynamic(%val: f32, %arg0 : vector<4xf32>, %id : i8) -> vector<4xf32> {
310+
%0 = vector.insert %val, %arg0[%id : i8] : f32 into vector<4xf32>
311+
return %0: vector<4xf32>
312+
}
313+
314+
// -----
315+
272316
// CHECK-LABEL: @insert_dynamic_cst
273317
// CHECK-SAME: %[[VAL:.*]]: f32, %[[V:.*]]: vector<4xf32>
274318
// CHECK: spirv.CompositeInsert %[[VAL]], %[[V]][2 : i32] : f32 into vector<4xf32>

mlir/test/Dialect/Vector/invalid.mlir

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,23 +149,23 @@ func.func @extract_vector_type(%arg0: index) {
149149
}
150150

151151
// -----
152-
func.func @extract_vector_mixed_index_types(%arg0 : vector<8x16xf32>,
152+
func.func @extract_mixed_index_types(%arg0 : vector<8x16xf32>,
153153
%i32_idx: i32, %i8_idx: i8) {
154154
// expected-error@+2 {{use of value '%i32_idx' expects different type than prior uses: 'i8' vs 'i32'}}
155155
// expected-note@-2 {{prior use here}}
156156
%1 = vector.extract %arg0[%i32_idx, %i8_idx : i8] : f32 from vector<8x16xf32>
157157
}
158158

159159
// -----
160-
func.func @extract_vector_index_vals_no_type(%arg0 : vector<8xf32>,
160+
func.func @extract_index_vals_no_type(%arg0 : vector<8xf32>,
161161
%i32_idx: i32) {
162162
// expected-error@+2 {{expected a type for dynamic indices}}
163163
// expected-error@+1 {{expected a valid list of SSA values or integers}}
164164
%1 = vector.extract %arg0[%i32_idx] : f32 from vector<8x16xf32>
165165
}
166166

167167
// -----
168-
func.func @extract_vector_index_vals_multiple_types(%arg0 : vector<8xf32>,
168+
func.func @extract_index_vals_multiple_types(%arg0 : vector<8xf32>,
169169
%i8_idx : i8,
170170
%i32_idx : i32) {
171171
// expected-error@+2 {{expected single type}}
@@ -174,7 +174,7 @@ func.func @extract_vector_index_vals_multiple_types(%arg0 : vector<8xf32>,
174174
}
175175

176176
// -----
177-
func.func @extract_vector_index_consts_type(%arg0 : vector<8x16xf32>,
177+
func.func @extract_index_consts_type(%arg0 : vector<8x16xf32>,
178178
%i32_idx: i32, %i8_idx: i8) {
179179
// expected-error@+2 {{'vector.extract' expected no type for constant indices}}
180180
// expected-error@+1 {{expected a valid list of SSA values or integers}}
@@ -305,32 +305,32 @@ func.func @insert_0d(%a: f32, %b: vector<f32>) {
305305
}
306306

307307
// -----
308-
func.func @extract_vector_mixed_index_types(%arg0 : f32, %arg1 : vector<8x16xf32>,
309-
%i32_idx: i32, %i8_idx: i8) {
308+
func.func @insert_mixed_index_types(%arg0 : f32, %arg1 : vector<8x16xf32>,
309+
%i32_idx: i32, %i8_idx: i8) {
310310
// expected-error@+2 {{use of value '%i32_idx' expects different type than prior uses: 'i8' vs 'i32'}}
311311
// expected-note@-2 {{prior use here}}
312312
%1 = vector.insert %arg0, %arg1[%i32_idx, %i8_idx : i8] : f32 into vector<8x16xf32>
313313
}
314314

315315
// -----
316-
func.func @extract_vector_index_vals_no_type(%arg0 : f32, %arg1 : vector<8xf32>,
317-
%i32_idx: i32) {
316+
func.func @insert_index_vals_no_type(%arg0 : f32, %arg1 : vector<8xf32>,
317+
%i32_idx: i32) {
318318
// expected-error@+2 {{expected a type for dynamic indices}}
319319
// expected-error@+1 {{expected a valid list of SSA values or integers}}
320320
%1 = vector.insert %arg0, %arg1[%i32_idx] : f32 into vector<8x16xf32>
321321
}
322322

323323
// -----
324-
func.func @extract_vector_index_vals_multiple_types(%arg0 : f32, %arg1 : vector<8xf32>,
325-
%i8_idx : i8, %i32_idx : i32) {
324+
func.func @insert_index_vals_multiple_types(%arg0 : f32, %arg1 : vector<8xf32>,
325+
%i8_idx : i8, %i32_idx : i32) {
326326
// expected-error@+2 {{expected single type}}
327327
// expected-error@+1 {{expected a valid list of SSA values or integers}}
328328
%1 = vector.insert %arg0, %arg1[%i8_idx, %i32_idx : i8, i32] : f32 into vector<8x16xf32>
329329
}
330330

331331
// -----
332-
func.func @extract_vector_index_consts_type(%arg0 : f32, %arg1 : vector<8x16xf32>,
333-
%i32_idx: i32, %i8_idx: i8) {
332+
func.func @insert_index_consts_type(%arg0 : f32, %arg1 : vector<8x16xf32>,
333+
%i32_idx: i32, %i8_idx: i8) {
334334
// expected-error@+2 {{'vector.insert' expected no type for constant indices}}
335335
// expected-error@+1 {{expected a valid list of SSA values or integers}}
336336
%1 = vector.insert %arg0, %arg1[5, 3 : index] : f32 into vector<8x16xf32>

mlir/test/Dialect/Vector/ops.mlir

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ func.func @extract_const_idx(%arg0: vector<4x8x16xf32>)
222222

223223
// CHECK-LABEL: @extract_val_idx
224224
// CHECK-SAME: %[[VEC:.+]]: vector<4x8x16xf32>, %[[IDX:.+]]: index
225-
func.func @extract_val_idx(%arg0: vector<4x8x16xf32>, %idx: index)
226-
-> (vector<8x16xf32>, vector<16xf32>, f32) {
225+
func.func @extract_index_as_index(%arg0: vector<4x8x16xf32>, %idx: index)
226+
-> (vector<8x16xf32>, vector<16xf32>, f32) {
227227
// CHECK: vector.extract %[[VEC]][%[[IDX]] : index] : vector<8x16xf32> from vector<4x8x16xf32>
228228
%0 = vector.extract %arg0[%idx : index] : vector<8x16xf32> from vector<4x8x16xf32>
229229
// CHECK-NEXT: vector.extract %[[VEC]][%[[IDX]], %[[IDX]] : index] : vector<16xf32> from vector<4x8x16xf32>
@@ -234,17 +234,19 @@ func.func @extract_val_idx(%arg0: vector<4x8x16xf32>, %idx: index)
234234
}
235235

236236
// CHECK-LABEL: @extract_val_int
237-
// CHECK-SAME: %[[VEC:.+]]: vector<4x8x16xf32>, %[[I32_IDX:.+]]: i32, %[[I8_IDX:.+]]: i8
238-
func.func @extract_val_int(%arg0: vector<4x8x16xf32>, %i32_idx: i32,
239-
%i8_idx: i8)
240-
-> (vector<8x16xf32>, vector<16xf32>, f32) {
237+
// CHECK-SAME: %[[VEC:.+]]: vector<4x8x16xf32>, %[[I32_IDX:.+]]: i32, %[[I8_IDX:.+]]: i8, %[[I1_IDX:.+]]: i1
238+
func.func @extract_index_as_int(%arg0: vector<4x8x16xf32>, %i32_idx: i32,
239+
%i8_idx: i8, %i1_idx: i1)
240+
-> (vector<8x16xf32>, vector<16xf32>, f32, vector<16xf32>) {
241241
// CHECK: vector.extract %[[VEC]][%[[I32_IDX]] : i32] : vector<8x16xf32> from vector<4x8x16xf32>
242242
%0 = vector.extract %arg0[%i32_idx : i32] : vector<8x16xf32> from vector<4x8x16xf32>
243243
// CHECK-NEXT: vector.extract %[[VEC]][%[[I8_IDX]], %[[I8_IDX]] : i8] : vector<16xf32> from vector<4x8x16xf32>
244244
%1 = vector.extract %arg0[%i8_idx, %i8_idx : i8] : vector<16xf32> from vector<4x8x16xf32>
245245
// CHECK-NEXT: vector.extract %[[VEC]][%[[I8_IDX]], 5, %[[I8_IDX]] : i8] : f32 from vector<4x8x16xf32>
246246
%2 = vector.extract %arg0[%i8_idx, 5, %i8_idx : i8] : f32 from vector<4x8x16xf32>
247-
return %0, %1, %2 : vector<8x16xf32>, vector<16xf32>, f32
247+
// CHECK-NEXT: vector.extract %[[VEC]][%[[I1_IDX]], 2 : i1] : vector<16xf32> from vector<4x8x16xf32>
248+
%3 = vector.extract %arg0[%i1_idx, 2 : i1] : vector<16xf32> from vector<4x8x16xf32>
249+
return %0, %1, %2, %3 : vector<8x16xf32>, vector<16xf32>, f32, vector<16xf32>
248250
}
249251

250252
// CHECK-LABEL: @extract_0d
@@ -286,8 +288,8 @@ func.func @insert_const_idx(%a: f32, %b: vector<16xf32>, %c: vector<8x16xf32>,
286288

287289
// CHECK-LABEL: @insert_val_idx
288290
// CHECK-SAME: %[[A:.+]]: f32, %[[B:.+]]: vector<16xf32>, %[[C:.+]]: vector<8x16xf32>, %[[IDX:.+]]: index
289-
func.func @insert_val_idx(%a: f32, %b: vector<16xf32>, %c: vector<8x16xf32>,
290-
%idx: index, %res: vector<4x8x16xf32>) -> vector<4x8x16xf32> {
291+
func.func @insert_index_as_index(%a: f32, %b: vector<16xf32>, %c: vector<8x16xf32>,
292+
%idx: index, %res: vector<4x8x16xf32>) -> vector<4x8x16xf32> {
291293
// CHECK: vector.insert %[[C]], %{{.*}}[%[[IDX]] : index] : vector<8x16xf32> into vector<4x8x16xf32>
292294
%0 = vector.insert %c, %res[%idx : index] : vector<8x16xf32> into vector<4x8x16xf32>
293295
// CHECK: vector.insert %[[B]], %{{.*}}[%[[IDX]], %[[IDX]] : index] : vector<16xf32> into vector<4x8x16xf32>
@@ -298,16 +300,19 @@ func.func @insert_val_idx(%a: f32, %b: vector<16xf32>, %c: vector<8x16xf32>,
298300
}
299301

300302
// CHECK-LABEL: @insert_val_int
301-
// CHECK-SAME: %[[A:.+]]: f32, %[[B:.+]]: vector<16xf32>, %[[C:.+]]: vector<8x16xf32>, %[[I32_IDX:.+]]: i32, %[[I8_IDX:.+]]: i8
302-
func.func @insert_val_int(%a: f32, %b: vector<16xf32>, %c: vector<8x16xf32>,
303-
%i32_idx: i32, %i8_idx: i8, %res: vector<4x8x16xf32>) -> vector<4x8x16xf32> {
303+
// CHECK-SAME: %[[A:.+]]: f32, %[[B:.+]]: vector<16xf32>, %[[C:.+]]: vector<8x16xf32>, %[[I32_IDX:.+]]: i32, %[[I8_IDX:.+]]: i8, %[[I1_IDX:.+]]: i1
304+
func.func @insert_index_as_int(%a: f32, %b: vector<16xf32>, %c: vector<8x16xf32>,
305+
%i32_idx: i32, %i8_idx: i8, %i1_idx: i1, %res: vector<4x8x16xf32>)
306+
-> (vector<4x8x16xf32>, vector<4x8x16xf32>, vector<4x8x16xf32>, vector<4x8x16xf32>) {
304307
// CHECK: vector.insert %[[C]], %{{.*}}[%[[I32_IDX]] : i32] : vector<8x16xf32> into vector<4x8x16xf32>
305308
%0 = vector.insert %c, %res[%i32_idx : i32] : vector<8x16xf32> into vector<4x8x16xf32>
306309
// CHECK: vector.insert %[[B]], %{{.*}}[%[[I8_IDX]], %[[I8_IDX]] : i8] : vector<16xf32> into vector<4x8x16xf32>
307310
%1 = vector.insert %b, %res[%i8_idx, %i8_idx : i8] : vector<16xf32> into vector<4x8x16xf32>
308311
// CHECK: vector.insert %[[A]], %{{.*}}[%[[I8_IDX]], 5, %[[I8_IDX]] : i8] : f32 into vector<4x8x16xf32>
309312
%2 = vector.insert %a, %res[%i8_idx, 5, %i8_idx : i8] : f32 into vector<4x8x16xf32>
310-
return %2 : vector<4x8x16xf32>
313+
// CHECK-NEXT: vector.insert %[[B]], %{{.*}}[%[[I1_IDX]], 2 : i1] : vector<16xf32> into vector<4x8x16xf32>
314+
%3 = vector.insert %b, %res[%i1_idx, 2 : i1] : vector<16xf32> into vector<4x8x16xf32>
315+
return %0, %1, %2, %3 : vector<4x8x16xf32>, vector<4x8x16xf32>, vector<4x8x16xf32>, vector<4x8x16xf32>
311316
}
312317

313318
// CHECK-LABEL: @insert_0d

0 commit comments

Comments
 (0)