@@ -328,3 +328,117 @@ func.func @extui_over_insert_3xi16_cst_i16(%a: i8) -> vector<3xi32> {
328
328
%e = vector.insert %d , %cst [1 ] : i32 into vector <3 xi32 >
329
329
return %e : vector <3 xi32 >
330
330
}
331
+
332
+ // CHECK-LABEL: func.func @extsi_over_insertelement_3xi16
333
+ // CHECK-SAME: (%[[ARG0:.+]]: vector<3xi16>, %[[ARG1:.+]]: i16, %[[POS:.+]]: i32)
334
+ // CHECK-NEXT: %[[INS:.+]] = vector.insertelement %[[ARG1]], %[[ARG0]][%[[POS]] : i32] : vector<3xi16>
335
+ // CHECK-NEXT: %[[RET:.+]] = arith.extsi %[[INS]] : vector<3xi16> to vector<3xi32>
336
+ // CHECK-NEXT: return %[[RET]] : vector<3xi32>
337
+ func.func @extsi_over_insertelement_3xi16 (%a: vector <3 xi16 >, %b: i16 , %pos: i32 ) -> vector <3 xi32 > {
338
+ %c = arith.extsi %a : vector <3 xi16 > to vector <3 xi32 >
339
+ %d = arith.extsi %b : i16 to i32
340
+ %e = vector.insertelement %d , %c [%pos : i32 ] : vector <3 xi32 >
341
+ return %e : vector <3 xi32 >
342
+ }
343
+
344
+ // CHECK-LABEL: func.func @extui_over_insertelement_3xi16
345
+ // CHECK-SAME: (%[[ARG0:.+]]: vector<3xi16>, %[[ARG1:.+]]: i16, %[[POS:.+]]: i32)
346
+ // CHECK-NEXT: %[[INS:.+]] = vector.insertelement %[[ARG1]], %[[ARG0]][%[[POS]] : i32] : vector<3xi16>
347
+ // CHECK-NEXT: %[[RET:.+]] = arith.extui %[[INS]] : vector<3xi16> to vector<3xi32>
348
+ // CHECK-NEXT: return %[[RET]] : vector<3xi32>
349
+ func.func @extui_over_insertelement_3xi16 (%a: vector <3 xi16 >, %b: i16 , %pos: i32 ) -> vector <3 xi32 > {
350
+ %c = arith.extui %a : vector <3 xi16 > to vector <3 xi32 >
351
+ %d = arith.extui %b : i16 to i32
352
+ %e = vector.insertelement %d , %c [%pos : i32 ] : vector <3 xi32 >
353
+ return %e : vector <3 xi32 >
354
+ }
355
+
356
+ // CHECK-LABEL: func.func @extsi_over_insertelement_3xi16_cst_i16
357
+ // CHECK-SAME: (%[[ARG:.+]]: i8, %[[POS:.+]]: i32)
358
+ // CHECK-NEXT: %[[CST:.+]] = arith.constant dense<[-1, 128, 0]> : vector<3xi16>
359
+ // CHECK-NEXT: %[[SRCE:.+]] = arith.extsi %[[ARG]] : i8 to i32
360
+ // CHECK-NEXT: %[[SRCT:.+]] = arith.trunci %[[SRCE]] : i32 to i16
361
+ // CHECK-NEXT: %[[INS:.+]] = vector.insertelement %[[SRCT]], %[[CST]][%[[POS]] : i32] : vector<3xi16>
362
+ // CHECK-NEXT: %[[RET:.+]] = arith.extsi %[[INS]] : vector<3xi16> to vector<3xi32>
363
+ // CHECK-NEXT: return %[[RET]] : vector<3xi32>
364
+ func.func @extsi_over_insertelement_3xi16_cst_i16 (%a: i8 , %pos: i32 ) -> vector <3 xi32 > {
365
+ %cst = arith.constant dense <[-1 , 128 , 0 ]> : vector <3 xi32 >
366
+ %d = arith.extsi %a : i8 to i32
367
+ %e = vector.insertelement %d , %cst [%pos : i32 ] : vector <3 xi32 >
368
+ return %e : vector <3 xi32 >
369
+ }
370
+
371
+ // CHECK-LABEL: func.func @extui_over_insertelement_3xi16_cst_i16
372
+ // CHECK-SAME: (%[[ARG:.+]]: i8, %[[POS:.+]]: i32)
373
+ // CHECK-NEXT: %[[CST:.+]] = arith.constant dense<[1, 256, 0]> : vector<3xi16>
374
+ // CHECK-NEXT: %[[SRCE:.+]] = arith.extui %[[ARG]] : i8 to i32
375
+ // CHECK-NEXT: %[[SRCT:.+]] = arith.trunci %[[SRCE]] : i32 to i16
376
+ // CHECK-NEXT: %[[INS:.+]] = vector.insertelement %[[SRCT]], %[[CST]][%[[POS]] : i32] : vector<3xi16>
377
+ // CHECK-NEXT: %[[RET:.+]] = arith.extui %[[INS]] : vector<3xi16> to vector<3xi32>
378
+ // CHECK-NEXT: return %[[RET]] : vector<3xi32>
379
+ func.func @extui_over_insertelement_3xi16_cst_i16 (%a: i8 , %pos: i32 ) -> vector <3 xi32 > {
380
+ %cst = arith.constant dense <[1 , 256 , 0 ]> : vector <3 xi32 >
381
+ %d = arith.extui %a : i8 to i32
382
+ %e = vector.insertelement %d , %cst [%pos : i32 ] : vector <3 xi32 >
383
+ return %e : vector <3 xi32 >
384
+ }
385
+
386
+ // CHECK-LABEL: func.func @extsi_over_insert_strided_slice_1d
387
+ // CHECK-SAME: (%[[ARG0:.+]]: vector<3xi16>, %[[ARG1:.+]]: vector<2xi16>)
388
+ // CHECK-NEXT: %[[INS:.+]] = vector.insert_strided_slice %[[ARG1]], %[[ARG0]]
389
+ // CHECK-SAME: {offsets = [1], strides = [1]} : vector<2xi16> into vector<3xi16>
390
+ // CHECK-NEXT: %[[RET:.+]] = arith.extsi %[[INS]] : vector<3xi16> to vector<3xi32>
391
+ // CHECK-NEXT: return %[[RET]] : vector<3xi32>
392
+ func.func @extsi_over_insert_strided_slice_1d (%a: vector <3 xi16 >, %b: vector <2 xi16 >) -> vector <3 xi32 > {
393
+ %c = arith.extsi %a : vector <3 xi16 > to vector <3 xi32 >
394
+ %d = arith.extsi %b : vector <2 xi16 > to vector <2 xi32 >
395
+ %e = vector.insert_strided_slice %d , %c {offsets = [1 ], strides = [1 ]} : vector <2 xi32 > into vector <3 xi32 >
396
+ return %e : vector <3 xi32 >
397
+ }
398
+
399
+ // CHECK-LABEL: func.func @extui_over_insert_strided_slice_1d
400
+ // CHECK-SAME: (%[[ARG0:.+]]: vector<3xi16>, %[[ARG1:.+]]: vector<2xi16>)
401
+ // CHECK-NEXT: %[[INS:.+]] = vector.insert_strided_slice %[[ARG1]], %[[ARG0]]
402
+ // CHECK-SAME: {offsets = [1], strides = [1]} : vector<2xi16> into vector<3xi16>
403
+ // CHECK-NEXT: %[[RET:.+]] = arith.extui %[[INS]] : vector<3xi16> to vector<3xi32>
404
+ // CHECK-NEXT: return %[[RET]] : vector<3xi32>
405
+ func.func @extui_over_insert_strided_slice_1d (%a: vector <3 xi16 >, %b: vector <2 xi16 >) -> vector <3 xi32 > {
406
+ %c = arith.extui %a : vector <3 xi16 > to vector <3 xi32 >
407
+ %d = arith.extui %b : vector <2 xi16 > to vector <2 xi32 >
408
+ %e = vector.insert_strided_slice %d , %c {offsets = [1 ], strides = [1 ]} : vector <2 xi32 > into vector <3 xi32 >
409
+ return %e : vector <3 xi32 >
410
+ }
411
+
412
+ // CHECK-LABEL: func.func @extsi_over_insert_strided_slice_cst_2d
413
+ // CHECK-SAME: (%[[ARG:.+]]: vector<1x2xi8>)
414
+ // CHECK-NEXT: %[[CST:.+]] = arith.constant
415
+ // CHECK-SAME{LITERAL}: dense<[[-1, 128, 0], [-129, 42, 1337]]> : vector<2x3xi16>
416
+ // CHECK-NEXT: %[[SRCE:.+]] = arith.extsi %[[ARG]] : vector<1x2xi8> to vector<1x2xi32>
417
+ // CHECK-NEXT: %[[SRCT:.+]] = arith.trunci %[[SRCE]] : vector<1x2xi32> to vector<1x2xi16>
418
+ // CHECK-NEXT: %[[INS:.+]] = vector.insert_strided_slice %[[SRCT]], %[[CST]]
419
+ // CHECK-SAME: {offsets = [0, 1], strides = [1, 1]} : vector<1x2xi16> into vector<2x3xi16>
420
+ // CHECK-NEXT: %[[RET:.+]] = arith.extsi %[[INS]] : vector<2x3xi16> to vector<2x3xi32>
421
+ // CHECK-NEXT: return %[[RET]] : vector<2x3xi32>
422
+ func.func @extsi_over_insert_strided_slice_cst_2d (%a: vector <1 x2 xi8 >) -> vector <2 x3 xi32 > {
423
+ %cst = arith.constant dense <[[-1 , 128 , 0 ], [-129 , 42 , 1337 ]]> : vector <2 x3 xi32 >
424
+ %d = arith.extsi %a : vector <1 x2 xi8 > to vector <1 x2 xi32 >
425
+ %e = vector.insert_strided_slice %d , %cst {offsets = [0 , 1 ], strides = [1 , 1 ]} : vector <1 x2 xi32 > into vector <2 x3 xi32 >
426
+ return %e : vector <2 x3 xi32 >
427
+ }
428
+
429
+ // CHECK-LABEL: func.func @extui_over_insert_strided_slice_cst_2d
430
+ // CHECK-SAME: (%[[ARG:.+]]: vector<1x2xi8>)
431
+ // CHECK-NEXT: %[[CST:.+]] = arith.constant
432
+ // CHECK-SAME{LITERAL}: dense<[[1, 128, 0], [256, 42, 1337]]> : vector<2x3xi16>
433
+ // CHECK-NEXT: %[[SRCE:.+]] = arith.extui %[[ARG]] : vector<1x2xi8> to vector<1x2xi32>
434
+ // CHECK-NEXT: %[[SRCT:.+]] = arith.trunci %[[SRCE]] : vector<1x2xi32> to vector<1x2xi16>
435
+ // CHECK-NEXT: %[[INS:.+]] = vector.insert_strided_slice %[[SRCT]], %[[CST]]
436
+ // CHECK-SAME: {offsets = [0, 1], strides = [1, 1]} : vector<1x2xi16> into vector<2x3xi16>
437
+ // CHECK-NEXT: %[[RET:.+]] = arith.extui %[[INS]] : vector<2x3xi16> to vector<2x3xi32>
438
+ // CHECK-NEXT: return %[[RET]] : vector<2x3xi32>
439
+ func.func @extui_over_insert_strided_slice_cst_2d (%a: vector <1 x2 xi8 >) -> vector <2 x3 xi32 > {
440
+ %cst = arith.constant dense <[[1 , 128 , 0 ], [256 , 42 , 1337 ]]> : vector <2 x3 xi32 >
441
+ %d = arith.extui %a : vector <1 x2 xi8 > to vector <1 x2 xi32 >
442
+ %e = vector.insert_strided_slice %d , %cst {offsets = [0 , 1 ], strides = [1 , 1 ]} : vector <1 x2 xi32 > into vector <2 x3 xi32 >
443
+ return %e : vector <2 x3 xi32 >
444
+ }
0 commit comments