@@ -276,6 +276,30 @@ func.func @cast_away_insert_leading_one_dims_scalar(%s: f32, %v: vector<1x1x4xf3
276
276
return %0: vector <1 x1 x4 xf32 >
277
277
}
278
278
279
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_scalar_scalable(
280
+ // CHECK-SAME: %[[S:.*]]: f32,
281
+ // CHECK-SAME: %[[V:.*]]: vector<1x1x[4]xf32>) -> vector<1x1x[4]xf32> {
282
+ func.func @cast_away_insert_leading_one_dims_scalar_scalable (%s: f32 , %v: vector <1 x1 x[4 ]xf32 >) -> vector <1 x1 x[4 ]xf32 > {
283
+ // CHECK: %[[EXTRACT:.*]] = vector.extract %[[V]][0, 0] : vector<1x1x[4]xf32>
284
+ // CHECK: %[[INSERT:.*]] = vector.insert %[[S]], %[[EXTRACT]] [0] : f32 into vector<[4]xf32>
285
+ // CHECK: %[[BCAST:.*]] = vector.broadcast %[[INSERT]] : vector<[4]xf32> to vector<1x1x[4]xf32>
286
+ // CHECK: return %[[BCAST]] : vector<1x1x[4]xf32>
287
+ %0 = vector.insert %s , %v [0 , 0 , 0 ] : f32 into vector <1 x1 x[4 ]xf32 >
288
+ return %0: vector <1 x1 x[4 ]xf32 >
289
+ }
290
+
291
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_scalar_skip_scalable_dim(
292
+ // CHECK-SAME: %[[S:.*]]: f32,
293
+ // CHECK-SAME: %[[V:.*]]: vector<1x[1]x4xf32>) -> vector<1x[1]x4xf32> {
294
+ func.func @cast_away_insert_leading_one_dims_scalar_skip_scalable_dim (%s: f32 , %v: vector <1 x[1 ]x4 xf32 >) -> vector <1 x[1 ]x4 xf32 > {
295
+ // CHECK: %[[EXTRACT:.*]] = vector.extract %[[V]][0] : vector<1x[1]x4xf32>
296
+ // CHECK: %[[INSERT:.*]] = vector.insert %[[S]], %[[EXTRACT]] [0, 0] : f32 into vector<[1]x4xf32>
297
+ // CHECK: %[[BCAST:.*]] = vector.broadcast %[[INSERT]] : vector<[1]x4xf32> to vector<1x[1]x4xf32>
298
+ // CHECK: return %[[BCAST]] : vector<1x[1]x4xf32>
299
+ %0 = vector.insert %s , %v [0 , 0 , 0 ] : f32 into vector <1 x[1 ]x4 xf32 >
300
+ return %0: vector <1 x[1 ]x4 xf32 >
301
+ }
302
+
279
303
// CHECK-LABEL: func @cast_away_insert_leading_one_dims_rank1
280
304
// CHECK-SAME: (%[[S:.+]]: vector<4xf32>, %[[V:.+]]: vector<1x1x4xf32>)
281
305
// CHECK: %[[BCAST:.+]] = vector.broadcast %[[S]] : vector<4xf32> to vector<1x1x4xf32>
@@ -285,6 +309,16 @@ func.func @cast_away_insert_leading_one_dims_rank1(%s: vector<4xf32>, %v: vector
285
309
return %0: vector <1 x1 x4 xf32 >
286
310
}
287
311
312
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_rank1_scalable(
313
+ // CHECK-SAME: %[[S:.*]]: vector<[4]xf32>,
314
+ // CHECK-SAME: %[[V:.*]]: vector<1x1x[4]xf32>) -> vector<1x1x[4]xf32> {
315
+ // CHECK: %[[BCAST:.*]] = vector.broadcast %[[S]] : vector<[4]xf32> to vector<1x1x[4]xf32>
316
+ // CHECK: return %[[BCAST]] : vector<1x1x[4]xf32>
317
+ func.func @cast_away_insert_leading_one_dims_rank1_scalable (%s: vector <[4 ]xf32 >, %v: vector <1 x1 x[4 ]xf32 >) -> vector <1 x1 x[4 ]xf32 > {
318
+ %0 = vector.insert %s , %v [0 , 0 ] : vector <[4 ]xf32 > into vector <1 x1 x[4 ]xf32 >
319
+ return %0: vector <1 x1 x[4 ]xf32 >
320
+ }
321
+
288
322
// CHECK-LABEL: func @cast_away_insert_leading_one_dims_rank2
289
323
// CHECK-SAME: (%[[S:.+]]: vector<1x4xf32>, %[[V:.+]]: vector<1x1x4xf32>)
290
324
// CHECK: %[[EXTRACT:.+]] = vector.extract %[[S]][0] : vector<1x4xf32>
@@ -295,6 +329,17 @@ func.func @cast_away_insert_leading_one_dims_rank2(%s: vector<1x4xf32>, %v: vect
295
329
return %0: vector <1 x1 x4 xf32 >
296
330
}
297
331
332
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_rank2_scalable(
333
+ // CHECK-SAME: %[[S:.*]]: vector<1x[4]xf32>,
334
+ // CHECK-SAME: %[[V:.*]]: vector<1x1x[4]xf32>) -> vector<1x1x[4]xf32> {
335
+ // CHECK: %[[EXTRACT:.*]] = vector.extract %[[S]][0] : vector<1x[4]xf32>
336
+ // CHECK: %[[BCAST:.*]] = vector.broadcast %[[EXTRACT]] : vector<[4]xf32> to vector<1x1x[4]xf32>
337
+ // CHECK: return %[[BCAST]] : vector<1x1x[4]xf32>
338
+ func.func @cast_away_insert_leading_one_dims_rank2_scalable (%s: vector <1 x[4 ]xf32 >, %v: vector <1 x1 x[4 ]xf32 >) -> vector <1 x1 x[4 ]xf32 > {
339
+ %0 = vector.insert %s , %v [0 ] : vector <1 x[4 ]xf32 > into vector <1 x1 x[4 ]xf32 >
340
+ return %0: vector <1 x1 x[4 ]xf32 >
341
+ }
342
+
298
343
// CHECK-LABEL: func @cast_away_insert_leading_one_dims_rank2_one_dest
299
344
// CHECK-SAME: (%[[S:.+]]: vector<1x4xf32>, %[[V:.+]]: vector<1x2x1x4xf32>)
300
345
// CHECK: %[[EXTRACTS:.+]] = vector.extract %[[S]][0] : vector<1x4xf32>
@@ -307,6 +352,19 @@ func.func @cast_away_insert_leading_one_dims_rank2_one_dest(%s: vector<1x4xf32>,
307
352
return %0: vector <1 x2 x1 x4 xf32 >
308
353
}
309
354
355
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_rank2_one_dest_scalable(
356
+ // CHECK-SAME: %[[S:.*]]: vector<1x[4]xf32>,
357
+ // CHECK-SAME: %[[V:.*]]: vector<1x2x1x[4]xf32>) -> vector<1x2x1x[4]xf32> {
358
+ // CHECK: %[[EXTRACTS:.*]] = vector.extract %[[S]][0] : vector<1x[4]xf32>
359
+ // CHECK: %[[EXTRACTV:.*]] = vector.extract %[[V]][0] : vector<1x2x1x[4]xf32>
360
+ // CHECK: %[[INSERT:.*]] = vector.insert %[[EXTRACTS]], %[[EXTRACTV]] [1, 0] : vector<[4]xf32> into vector<2x1x[4]xf32>
361
+ // CHECK: %[[BCAST:.*]] = vector.broadcast %[[INSERT]] : vector<2x1x[4]xf32> to vector<1x2x1x[4]xf32>
362
+ // CHECK: return %[[BCAST]] : vector<1x2x1x[4]xf32>
363
+ func.func @cast_away_insert_leading_one_dims_rank2_one_dest_scalable (%s: vector <1 x[4 ]xf32 >, %v: vector <1 x2 x1 x[4 ]xf32 >) -> vector <1 x2 x1 x[4 ]xf32 > {
364
+ %0 = vector.insert %s , %v [0 , 1 ] : vector <1 x[4 ]xf32 > into vector <1 x2 x1 x[4 ]xf32 >
365
+ return %0: vector <1 x2 x1 x[4 ]xf32 >
366
+ }
367
+
310
368
// CHECK-LABEL: func @cast_away_insert_leading_one_dims_non_one_dest
311
369
// CHECK-SAME: (%[[S:.+]]: vector<1x4xf32>, %[[V:.+]]: vector<8x1x4xf32>)
312
370
// CHECK: %[[EXTRACT:.+]] = vector.extract %[[S]][0] : vector<1x4xf32>
@@ -317,6 +375,17 @@ func.func @cast_away_insert_leading_one_dims_non_one_dest(%s: vector<1x4xf32>, %
317
375
return %0: vector <8 x1 x4 xf32 >
318
376
}
319
377
378
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_non_one_dest_scalable(
379
+ // CHECK-SAME: %[[S:.*]]: vector<1x[4]xf32>,
380
+ // CHECK-SAME: %[[V:.*]]: vector<8x1x[4]xf32>) -> vector<8x1x[4]xf32> {
381
+ // CHECK: %[[EXTRACT:.*]] = vector.extract %[[S]][0] : vector<1x[4]xf32>
382
+ // CHECK: %[[INSERT:.*]] = vector.insert %[[EXTRACT]], %[[V]] [5, 0] : vector<[4]xf32> into vector<8x1x[4]xf32>
383
+ // CHECK: return %[[INSERT]] : vector<8x1x[4]xf32>
384
+ func.func @cast_away_insert_leading_one_dims_non_one_dest_scalable (%s: vector <1 x[4 ]xf32 >, %v: vector <8 x1 x[4 ]xf32 >) -> vector <8 x1 x[4 ]xf32 > {
385
+ %0 = vector.insert %s , %v [5 ] : vector <1 x[4 ]xf32 > into vector <8 x1 x[4 ]xf32 >
386
+ return %0: vector <8 x1 x[4 ]xf32 >
387
+ }
388
+
320
389
// CHECK-LABEL: func @cast_away_insert_leading_one_dims_one_two_dest
321
390
// CHECK-SAME: (%[[S:.+]]: vector<1x8xi1>, %[[V:.+]]: vector<1x1x8x1x8xi1>)
322
391
// CHECK: %[[EXTRACTS:.+]] = vector.extract %[[S]][0] : vector<1x8xi1>
@@ -328,3 +397,16 @@ func.func @cast_away_insert_leading_one_dims_one_two_dest(%s: vector<1x8xi1>, %v
328
397
%0 = vector.insert %s , %v [0 , 0 , 7 ] : vector <1 x8 xi1 > into vector <1 x1 x8 x1 x8 xi1 >
329
398
return %0: vector <1 x1 x8 x1 x8 xi1 >
330
399
}
400
+
401
+ // CHECK-LABEL: func.func @cast_away_insert_leading_one_dims_one_two_dest_scalable(
402
+ // CHECK-SAME: %[[S:.*]]: vector<1x[8]xi1>,
403
+ // CHECK-SAME: %[[V:.*]]: vector<1x1x8x1x[8]xi1>) -> vector<1x1x8x1x[8]xi1> {
404
+ // CHECK: %[[EXTRACTS:.*]] = vector.extract %[[S]][0] : vector<1x[8]xi1>
405
+ // CHECK: %[[EXTRACTV:.*]] = vector.extract %[[V]][0, 0] : vector<1x1x8x1x[8]xi1>
406
+ // CHECK: %[[INSERT:.*]] = vector.insert %[[EXTRACTS]], %[[EXTRACTV]] [7, 0] : vector<[8]xi1> into vector<8x1x[8]xi1>
407
+ // CHECK: %[[BCAST:.*]] = vector.broadcast %[[INSERT]] : vector<8x1x[8]xi1> to vector<1x1x8x1x[8]xi1>
408
+ // CHECK: return %[[BCAST]] : vector<1x1x8x1x[8]xi1>
409
+ func.func @cast_away_insert_leading_one_dims_one_two_dest_scalable (%s: vector <1 x[8 ]xi1 >, %v: vector <1 x1 x8 x1 x[8 ]xi1 >) -> vector <1 x1 x8 x1 x[8 ]xi1 > {
410
+ %0 = vector.insert %s , %v [0 , 0 , 7 ] : vector <1 x[8 ]xi1 > into vector <1 x1 x8 x1 x[8 ]xi1 >
411
+ return %0: vector <1 x1 x8 x1 x[8 ]xi1 >
412
+ }
0 commit comments