@@ -428,6 +428,33 @@ define void @buildvec_dominant0_v8i16(ptr %x) {
428
428
ret void
429
429
}
430
430
431
+ define void @buildvec_dominant0_v8i16_with_end_element (ptr %x ) {
432
+ ; CHECK-LABEL: buildvec_dominant0_v8i16_with_end_element:
433
+ ; CHECK: # %bb.0:
434
+ ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
435
+ ; CHECK-NEXT: vmv.v.i v8, 8
436
+ ; CHECK-NEXT: li a1, 3
437
+ ; CHECK-NEXT: vslide1down.vx v8, v8, a1
438
+ ; CHECK-NEXT: vse16.v v8, (a0)
439
+ ; CHECK-NEXT: ret
440
+ store <8 x i16 > <i16 8 , i16 8 , i16 8 , i16 8 , i16 8 , i16 8 , i16 8 , i16 3 >, ptr %x
441
+ ret void
442
+ }
443
+
444
+ define void @buildvec_dominant0_v8i16_with_tail (ptr %x ) {
445
+ ; CHECK-LABEL: buildvec_dominant0_v8i16_with_tail:
446
+ ; CHECK: # %bb.0:
447
+ ; CHECK-NEXT: lui a1, %hi(.LCPI35_0)
448
+ ; CHECK-NEXT: addi a1, a1, %lo(.LCPI35_0)
449
+ ; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
450
+ ; CHECK-NEXT: vle16.v v8, (a1)
451
+ ; CHECK-NEXT: vse16.v v8, (a0)
452
+ ; CHECK-NEXT: ret
453
+ store <8 x i16 > <i16 8 , i16 8 , i16 8 , i16 8 , i16 8 , i16 undef , i16 2 , i16 3 >, ptr %x
454
+ ret void
455
+ }
456
+
457
+
431
458
define void @buildvec_dominant1_v8i16 (ptr %x ) {
432
459
; CHECK-LABEL: buildvec_dominant1_v8i16:
433
460
; CHECK: # %bb.0:
@@ -494,17 +521,17 @@ define <2 x i8> @buildvec_dominant2_v2i8() {
494
521
define void @buildvec_dominant0_v2i32 (ptr %x ) {
495
522
; RV32-LABEL: buildvec_dominant0_v2i32:
496
523
; RV32: # %bb.0:
497
- ; RV32-NEXT: lui a1, %hi(.LCPI38_0 )
498
- ; RV32-NEXT: addi a1, a1, %lo(.LCPI38_0 )
524
+ ; RV32-NEXT: lui a1, %hi(.LCPI40_0 )
525
+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI40_0 )
499
526
; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
500
527
; RV32-NEXT: vle32.v v8, (a1)
501
528
; RV32-NEXT: vse32.v v8, (a0)
502
529
; RV32-NEXT: ret
503
530
;
504
531
; RV64V-LABEL: buildvec_dominant0_v2i32:
505
532
; RV64V: # %bb.0:
506
- ; RV64V-NEXT: lui a1, %hi(.LCPI38_0 )
507
- ; RV64V-NEXT: ld a1, %lo(.LCPI38_0 )(a1)
533
+ ; RV64V-NEXT: lui a1, %hi(.LCPI40_0 )
534
+ ; RV64V-NEXT: ld a1, %lo(.LCPI40_0 )(a1)
508
535
; RV64V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
509
536
; RV64V-NEXT: vmv.v.i v8, -1
510
537
; RV64V-NEXT: vsetvli zero, zero, e64, m1, tu, ma
@@ -514,8 +541,8 @@ define void @buildvec_dominant0_v2i32(ptr %x) {
514
541
;
515
542
; RV64ZVE32-LABEL: buildvec_dominant0_v2i32:
516
543
; RV64ZVE32: # %bb.0:
517
- ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI38_0 )
518
- ; RV64ZVE32-NEXT: ld a1, %lo(.LCPI38_0 )(a1)
544
+ ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI40_0 )
545
+ ; RV64ZVE32-NEXT: ld a1, %lo(.LCPI40_0 )(a1)
519
546
; RV64ZVE32-NEXT: li a2, -1
520
547
; RV64ZVE32-NEXT: sd a1, 0(a0)
521
548
; RV64ZVE32-NEXT: sd a2, 8(a0)
@@ -527,26 +554,26 @@ define void @buildvec_dominant0_v2i32(ptr %x) {
527
554
define void @buildvec_dominant1_optsize_v2i32 (ptr %x ) optsize {
528
555
; RV32-LABEL: buildvec_dominant1_optsize_v2i32:
529
556
; RV32: # %bb.0:
530
- ; RV32-NEXT: lui a1, %hi(.LCPI39_0 )
531
- ; RV32-NEXT: addi a1, a1, %lo(.LCPI39_0 )
557
+ ; RV32-NEXT: lui a1, %hi(.LCPI41_0 )
558
+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI41_0 )
532
559
; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
533
560
; RV32-NEXT: vle32.v v8, (a1)
534
561
; RV32-NEXT: vse32.v v8, (a0)
535
562
; RV32-NEXT: ret
536
563
;
537
564
; RV64V-LABEL: buildvec_dominant1_optsize_v2i32:
538
565
; RV64V: # %bb.0:
539
- ; RV64V-NEXT: lui a1, %hi(.LCPI39_0 )
540
- ; RV64V-NEXT: addi a1, a1, %lo(.LCPI39_0 )
566
+ ; RV64V-NEXT: lui a1, %hi(.LCPI41_0 )
567
+ ; RV64V-NEXT: addi a1, a1, %lo(.LCPI41_0 )
541
568
; RV64V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
542
569
; RV64V-NEXT: vle64.v v8, (a1)
543
570
; RV64V-NEXT: vse64.v v8, (a0)
544
571
; RV64V-NEXT: ret
545
572
;
546
573
; RV64ZVE32-LABEL: buildvec_dominant1_optsize_v2i32:
547
574
; RV64ZVE32: # %bb.0:
548
- ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI39_0 )
549
- ; RV64ZVE32-NEXT: ld a1, %lo(.LCPI39_0 )(a1)
575
+ ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI41_0 )
576
+ ; RV64ZVE32-NEXT: ld a1, %lo(.LCPI41_0 )(a1)
550
577
; RV64ZVE32-NEXT: li a2, -1
551
578
; RV64ZVE32-NEXT: sd a1, 0(a0)
552
579
; RV64ZVE32-NEXT: sd a2, 8(a0)
@@ -604,17 +631,17 @@ define void @buildvec_seq_v8i8_v2i32(ptr %x) {
604
631
define void @buildvec_seq_v16i8_v2i64 (ptr %x ) {
605
632
; RV32-LABEL: buildvec_seq_v16i8_v2i64:
606
633
; RV32: # %bb.0:
607
- ; RV32-NEXT: lui a1, %hi(.LCPI42_0 )
608
- ; RV32-NEXT: addi a1, a1, %lo(.LCPI42_0 )
634
+ ; RV32-NEXT: lui a1, %hi(.LCPI44_0 )
635
+ ; RV32-NEXT: addi a1, a1, %lo(.LCPI44_0 )
609
636
; RV32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
610
637
; RV32-NEXT: vle8.v v8, (a1)
611
638
; RV32-NEXT: vse8.v v8, (a0)
612
639
; RV32-NEXT: ret
613
640
;
614
641
; RV64V-LABEL: buildvec_seq_v16i8_v2i64:
615
642
; RV64V: # %bb.0:
616
- ; RV64V-NEXT: lui a1, %hi(.LCPI42_0 )
617
- ; RV64V-NEXT: ld a1, %lo(.LCPI42_0 )(a1)
643
+ ; RV64V-NEXT: lui a1, %hi(.LCPI44_0 )
644
+ ; RV64V-NEXT: ld a1, %lo(.LCPI44_0 )(a1)
618
645
; RV64V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
619
646
; RV64V-NEXT: vmv.v.x v8, a1
620
647
; RV64V-NEXT: vsetivli zero, 16, e8, m1, ta, ma
@@ -623,8 +650,8 @@ define void @buildvec_seq_v16i8_v2i64(ptr %x) {
623
650
;
624
651
; RV64ZVE32-LABEL: buildvec_seq_v16i8_v2i64:
625
652
; RV64ZVE32: # %bb.0:
626
- ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI42_0 )
627
- ; RV64ZVE32-NEXT: addi a1, a1, %lo(.LCPI42_0 )
653
+ ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI44_0 )
654
+ ; RV64ZVE32-NEXT: addi a1, a1, %lo(.LCPI44_0 )
628
655
; RV64ZVE32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
629
656
; RV64ZVE32-NEXT: vle8.v v8, (a1)
630
657
; RV64ZVE32-NEXT: vse8.v v8, (a0)
@@ -656,8 +683,8 @@ define void @buildvec_seq2_v16i8_v2i64(ptr %x) {
656
683
;
657
684
; RV64ZVE32-LABEL: buildvec_seq2_v16i8_v2i64:
658
685
; RV64ZVE32: # %bb.0:
659
- ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI43_0 )
660
- ; RV64ZVE32-NEXT: addi a1, a1, %lo(.LCPI43_0 )
686
+ ; RV64ZVE32-NEXT: lui a1, %hi(.LCPI45_0 )
687
+ ; RV64ZVE32-NEXT: addi a1, a1, %lo(.LCPI45_0 )
661
688
; RV64ZVE32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
662
689
; RV64ZVE32-NEXT: vle8.v v8, (a1)
663
690
; RV64ZVE32-NEXT: vse8.v v8, (a0)
@@ -3384,3 +3411,33 @@ define <1 x i32> @buildvec_v1i32_pack(i32 %e1) {
3384
3411
ret <1 x i32 > %v1
3385
3412
}
3386
3413
3414
+ define <4 x i32 > @buildvec_vslide1up (i32 %e1 , i32 %e2 ) {
3415
+ ; CHECK-LABEL: buildvec_vslide1up:
3416
+ ; CHECK: # %bb.0:
3417
+ ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3418
+ ; CHECK-NEXT: vmv.v.x v8, a0
3419
+ ; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma
3420
+ ; CHECK-NEXT: vmv.s.x v8, a1
3421
+ ; CHECK-NEXT: ret
3422
+ %v1 = insertelement <4 x i32 > poison, i32 %e2 , i32 0
3423
+ %v2 = insertelement <4 x i32 > %v1 , i32 %e1 , i32 1
3424
+ %v3 = insertelement <4 x i32 > %v2 , i32 %e1 , i32 2
3425
+ %v4 = insertelement <4 x i32 > %v3 , i32 %e1 , i32 3
3426
+ ret <4 x i32 > %v4
3427
+ }
3428
+
3429
+ define <4 x i1 > @buildvec_i1_splat (i1 %e1 ) {
3430
+ ; CHECK-LABEL: buildvec_i1_splat:
3431
+ ; CHECK: # %bb.0:
3432
+ ; CHECK-NEXT: andi a0, a0, 1
3433
+ ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
3434
+ ; CHECK-NEXT: vmv.v.x v8, a0
3435
+ ; CHECK-NEXT: vmsne.vi v0, v8, 0
3436
+ ; CHECK-NEXT: ret
3437
+ %v1 = insertelement <4 x i1 > poison, i1 %e1 , i32 0
3438
+ %v2 = insertelement <4 x i1 > %v1 , i1 %e1 , i32 1
3439
+ %v3 = insertelement <4 x i1 > %v2 , i1 %e1 , i32 2
3440
+ %v4 = insertelement <4 x i1 > %v3 , i1 %e1 , i32 3
3441
+ ret <4 x i1 > %v4
3442
+ }
3443
+
0 commit comments