@@ -428,6 +428,33 @@ define void @buildvec_dominant0_v8i16(ptr %x) {
428428 ret void
429429}
430430
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+
431458define void @buildvec_dominant1_v8i16 (ptr %x ) {
432459; CHECK-LABEL: buildvec_dominant1_v8i16:
433460; CHECK: # %bb.0:
@@ -494,17 +521,17 @@ define <2 x i8> @buildvec_dominant2_v2i8() {
494521define void @buildvec_dominant0_v2i32 (ptr %x ) {
495522; RV32-LABEL: buildvec_dominant0_v2i32:
496523; 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 )
499526; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
500527; RV32-NEXT: vle32.v v8, (a1)
501528; RV32-NEXT: vse32.v v8, (a0)
502529; RV32-NEXT: ret
503530;
504531; RV64V-LABEL: buildvec_dominant0_v2i32:
505532; 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)
508535; RV64V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
509536; RV64V-NEXT: vmv.v.i v8, -1
510537; RV64V-NEXT: vsetvli zero, zero, e64, m1, tu, ma
@@ -514,8 +541,8 @@ define void @buildvec_dominant0_v2i32(ptr %x) {
514541;
515542; RV64ZVE32-LABEL: buildvec_dominant0_v2i32:
516543; 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)
519546; RV64ZVE32-NEXT: li a2, -1
520547; RV64ZVE32-NEXT: sd a1, 0(a0)
521548; RV64ZVE32-NEXT: sd a2, 8(a0)
@@ -527,26 +554,26 @@ define void @buildvec_dominant0_v2i32(ptr %x) {
527554define void @buildvec_dominant1_optsize_v2i32 (ptr %x ) optsize {
528555; RV32-LABEL: buildvec_dominant1_optsize_v2i32:
529556; 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 )
532559; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
533560; RV32-NEXT: vle32.v v8, (a1)
534561; RV32-NEXT: vse32.v v8, (a0)
535562; RV32-NEXT: ret
536563;
537564; RV64V-LABEL: buildvec_dominant1_optsize_v2i32:
538565; 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 )
541568; RV64V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
542569; RV64V-NEXT: vle64.v v8, (a1)
543570; RV64V-NEXT: vse64.v v8, (a0)
544571; RV64V-NEXT: ret
545572;
546573; RV64ZVE32-LABEL: buildvec_dominant1_optsize_v2i32:
547574; 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)
550577; RV64ZVE32-NEXT: li a2, -1
551578; RV64ZVE32-NEXT: sd a1, 0(a0)
552579; RV64ZVE32-NEXT: sd a2, 8(a0)
@@ -604,17 +631,17 @@ define void @buildvec_seq_v8i8_v2i32(ptr %x) {
604631define void @buildvec_seq_v16i8_v2i64 (ptr %x ) {
605632; RV32-LABEL: buildvec_seq_v16i8_v2i64:
606633; 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 )
609636; RV32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
610637; RV32-NEXT: vle8.v v8, (a1)
611638; RV32-NEXT: vse8.v v8, (a0)
612639; RV32-NEXT: ret
613640;
614641; RV64V-LABEL: buildvec_seq_v16i8_v2i64:
615642; 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)
618645; RV64V-NEXT: vsetivli zero, 2, e64, m1, ta, ma
619646; RV64V-NEXT: vmv.v.x v8, a1
620647; RV64V-NEXT: vsetivli zero, 16, e8, m1, ta, ma
@@ -623,8 +650,8 @@ define void @buildvec_seq_v16i8_v2i64(ptr %x) {
623650;
624651; RV64ZVE32-LABEL: buildvec_seq_v16i8_v2i64:
625652; 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 )
628655; RV64ZVE32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
629656; RV64ZVE32-NEXT: vle8.v v8, (a1)
630657; RV64ZVE32-NEXT: vse8.v v8, (a0)
@@ -656,8 +683,8 @@ define void @buildvec_seq2_v16i8_v2i64(ptr %x) {
656683;
657684; RV64ZVE32-LABEL: buildvec_seq2_v16i8_v2i64:
658685; 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 )
661688; RV64ZVE32-NEXT: vsetivli zero, 16, e8, m1, ta, ma
662689; RV64ZVE32-NEXT: vle8.v v8, (a1)
663690; RV64ZVE32-NEXT: vse8.v v8, (a0)
@@ -3384,3 +3411,33 @@ define <1 x i32> @buildvec_v1i32_pack(i32 %e1) {
33843411 ret <1 x i32 > %v1
33853412}
33863413
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