@@ -427,6 +427,90 @@ entry:
427427 ret void
428428}
429429
430+ define void @buildvector_v32i8_with_constant (ptr %dst , i8 %a0 , i8 %a1 , i8 %a2 , i8 %a5 , i8 %a8 , i8 %a9 , i8 %a15 , i8 %a17 , i8 %a18 , i8 %a20 , i8 %a22 , i8 %a23 , i8 %a27 , i8 %a28 , i8 %a31 ) nounwind {
431+ ; CHECK-LABEL: buildvector_v32i8_with_constant:
432+ ; CHECK: # %bb.0: # %entry
433+ ; CHECK-NEXT: addi.d $sp, $sp, -96
434+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
435+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
436+ ; CHECK-NEXT: addi.d $fp, $sp, 96
437+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
438+ ; CHECK-NEXT: ld.b $t0, $fp, 0
439+ ; CHECK-NEXT: ld.b $t1, $fp, 8
440+ ; CHECK-NEXT: ld.b $t2, $fp, 16
441+ ; CHECK-NEXT: ld.b $t3, $fp, 24
442+ ; CHECK-NEXT: ld.b $t4, $fp, 56
443+ ; CHECK-NEXT: ld.b $t5, $fp, 32
444+ ; CHECK-NEXT: ld.b $t6, $fp, 48
445+ ; CHECK-NEXT: ld.b $t7, $fp, 40
446+ ; CHECK-NEXT: st.b $t4, $sp, 63
447+ ; CHECK-NEXT: st.b $zero, $sp, 61
448+ ; CHECK-NEXT: st.b $t6, $sp, 60
449+ ; CHECK-NEXT: st.b $t7, $sp, 59
450+ ; CHECK-NEXT: st.b $zero, $sp, 56
451+ ; CHECK-NEXT: st.b $t5, $sp, 55
452+ ; CHECK-NEXT: st.b $t3, $sp, 54
453+ ; CHECK-NEXT: st.b $zero, $sp, 53
454+ ; CHECK-NEXT: st.b $t2, $sp, 52
455+ ; CHECK-NEXT: st.b $zero, $sp, 51
456+ ; CHECK-NEXT: st.b $t1, $sp, 50
457+ ; CHECK-NEXT: st.b $t0, $sp, 49
458+ ; CHECK-NEXT: st.b $zero, $sp, 48
459+ ; CHECK-NEXT: st.b $a7, $sp, 47
460+ ; CHECK-NEXT: st.h $zero, $sp, 44
461+ ; CHECK-NEXT: st.b $zero, $sp, 42
462+ ; CHECK-NEXT: st.b $a6, $sp, 41
463+ ; CHECK-NEXT: st.b $a5, $sp, 40
464+ ; CHECK-NEXT: st.b $zero, $sp, 39
465+ ; CHECK-NEXT: st.b $a4, $sp, 37
466+ ; CHECK-NEXT: st.h $zero, $sp, 35
467+ ; CHECK-NEXT: st.b $a3, $sp, 34
468+ ; CHECK-NEXT: st.b $a2, $sp, 33
469+ ; CHECK-NEXT: st.b $a1, $sp, 32
470+ ; CHECK-NEXT: xvld $xr0, $sp, 32
471+ ; CHECK-NEXT: xvst $xr0, $a0, 0
472+ ; CHECK-NEXT: addi.d $sp, $fp, -96
473+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
474+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
475+ ; CHECK-NEXT: addi.d $sp, $sp, 96
476+ ; CHECK-NEXT: ret
477+ entry:
478+ %ins0 = insertelement <32 x i8 > undef , i8 %a0 , i32 0
479+ %ins1 = insertelement <32 x i8 > %ins0 , i8 %a1 , i32 1
480+ %ins2 = insertelement <32 x i8 > %ins1 , i8 %a2 , i32 2
481+ %ins3 = insertelement <32 x i8 > %ins2 , i8 0 , i32 3
482+ %ins4 = insertelement <32 x i8 > %ins3 , i8 0 , i32 4
483+ %ins5 = insertelement <32 x i8 > %ins4 , i8 %a5 , i32 5
484+ %ins6 = insertelement <32 x i8 > %ins5 , i8 undef , i32 6
485+ %ins7 = insertelement <32 x i8 > %ins6 , i8 0 , i32 7
486+ %ins8 = insertelement <32 x i8 > %ins7 , i8 %a8 , i32 8
487+ %ins9 = insertelement <32 x i8 > %ins8 , i8 %a9 , i32 9
488+ %ins10 = insertelement <32 x i8 > %ins9 , i8 0 , i32 10
489+ %ins11 = insertelement <32 x i8 > %ins10 , i8 undef , i32 11
490+ %ins12 = insertelement <32 x i8 > %ins11 , i8 0 , i32 12
491+ %ins13 = insertelement <32 x i8 > %ins12 , i8 0 , i32 13
492+ %ins14 = insertelement <32 x i8 > %ins13 , i8 undef , i32 14
493+ %ins15 = insertelement <32 x i8 > %ins14 , i8 %a15 , i32 15
494+ %ins16 = insertelement <32 x i8 > %ins15 , i8 0 , i32 16
495+ %ins17 = insertelement <32 x i8 > %ins16 , i8 %a17 , i32 17
496+ %ins18 = insertelement <32 x i8 > %ins17 , i8 %a18 , i32 18
497+ %ins19 = insertelement <32 x i8 > %ins18 , i8 0 , i32 19
498+ %ins20 = insertelement <32 x i8 > %ins19 , i8 %a20 , i32 20
499+ %ins21 = insertelement <32 x i8 > %ins20 , i8 0 , i32 21
500+ %ins22 = insertelement <32 x i8 > %ins21 , i8 %a22 , i32 22
501+ %ins23 = insertelement <32 x i8 > %ins22 , i8 %a23 , i32 23
502+ %ins24 = insertelement <32 x i8 > %ins23 , i8 0 , i32 24
503+ %ins25 = insertelement <32 x i8 > %ins24 , i8 undef , i32 25
504+ %ins26 = insertelement <32 x i8 > %ins25 , i8 undef , i32 26
505+ %ins27 = insertelement <32 x i8 > %ins26 , i8 %a27 , i32 27
506+ %ins28 = insertelement <32 x i8 > %ins27 , i8 %a28 , i32 28
507+ %ins29 = insertelement <32 x i8 > %ins28 , i8 0 , i32 29
508+ %ins30 = insertelement <32 x i8 > %ins29 , i8 undef , i32 30
509+ %ins31 = insertelement <32 x i8 > %ins30 , i8 %a31 , i32 31
510+ store <32 x i8 > %ins31 , ptr %dst
511+ ret void
512+ }
513+
430514define void @buildvector_v16i16 (ptr %dst , i16 %a0 , i16 %a1 , i16 %a2 , i16 %a3 , i16 %a4 , i16 %a5 , i16 %a6 , i16 %a7 , i16 %a8 , i16 %a9 , i16 %a10 , i16 %a11 , i16 %a12 , i16 %a13 , i16 %a14 , i16 %a15 ) nounwind {
431515; CHECK-LABEL: buildvector_v16i16:
432516; CHECK: # %bb.0: # %entry
@@ -537,6 +621,57 @@ entry:
537621 ret void
538622}
539623
624+ define void @buildvector_v16i16_with_constant (ptr %dst , i16 %a2 , i16 %a3 , i16 %a5 , i16 %a6 , i16 %a7 , i16 %a12 , i16 %a13 ) nounwind {
625+ ; CHECK-LABEL: buildvector_v16i16_with_constant:
626+ ; CHECK: # %bb.0: # %entry
627+ ; CHECK-NEXT: addi.d $sp, $sp, -96
628+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
629+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
630+ ; CHECK-NEXT: addi.d $fp, $sp, 96
631+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
632+ ; CHECK-NEXT: st.h $a7, $sp, 58
633+ ; CHECK-NEXT: st.h $a6, $sp, 56
634+ ; CHECK-NEXT: st.h $a5, $sp, 46
635+ ; CHECK-NEXT: st.h $a4, $sp, 44
636+ ; CHECK-NEXT: st.h $a3, $sp, 42
637+ ; CHECK-NEXT: ori $a3, $zero, 2
638+ ; CHECK-NEXT: st.h $a3, $sp, 40
639+ ; CHECK-NEXT: st.h $a2, $sp, 38
640+ ; CHECK-NEXT: st.h $a1, $sp, 36
641+ ; CHECK-NEXT: lu12i.w $a1, 32
642+ ; CHECK-NEXT: ori $a1, $a1, 2
643+ ; CHECK-NEXT: st.w $a1, $sp, 60
644+ ; CHECK-NEXT: st.w $a1, $sp, 32
645+ ; CHECK-NEXT: lu32i.d $a1, 131074
646+ ; CHECK-NEXT: st.d $a1, $sp, 48
647+ ; CHECK-NEXT: xvld $xr0, $sp, 32
648+ ; CHECK-NEXT: xvst $xr0, $a0, 0
649+ ; CHECK-NEXT: addi.d $sp, $fp, -96
650+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
651+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
652+ ; CHECK-NEXT: addi.d $sp, $sp, 96
653+ ; CHECK-NEXT: ret
654+ entry:
655+ %ins0 = insertelement <16 x i16 > undef , i16 2 , i32 0
656+ %ins1 = insertelement <16 x i16 > %ins0 , i16 2 , i32 1
657+ %ins2 = insertelement <16 x i16 > %ins1 , i16 %a2 , i32 2
658+ %ins3 = insertelement <16 x i16 > %ins2 , i16 %a3 , i32 3
659+ %ins4 = insertelement <16 x i16 > %ins3 , i16 2 , i32 4
660+ %ins5 = insertelement <16 x i16 > %ins4 , i16 %a5 , i32 5
661+ %ins6 = insertelement <16 x i16 > %ins5 , i16 %a6 , i32 6
662+ %ins7 = insertelement <16 x i16 > %ins6 , i16 %a7 , i32 7
663+ %ins8 = insertelement <16 x i16 > %ins7 , i16 2 , i32 8
664+ %ins9 = insertelement <16 x i16 > %ins8 , i16 2 , i32 9
665+ %ins10 = insertelement <16 x i16 > %ins9 , i16 2 , i32 10
666+ %ins11 = insertelement <16 x i16 > %ins10 , i16 2 , i32 11
667+ %ins12 = insertelement <16 x i16 > %ins11 , i16 %a12 , i32 12
668+ %ins13 = insertelement <16 x i16 > %ins12 , i16 %a13 , i32 13
669+ %ins14 = insertelement <16 x i16 > %ins13 , i16 2 , i32 14
670+ %ins15 = insertelement <16 x i16 > %ins14 , i16 2 , i32 15
671+ store <16 x i16 > %ins15 , ptr %dst
672+ ret void
673+ }
674+
540675define void @buildvector_v8i32 (ptr %dst , i32 %a0 , i32 %a1 , i32 %a2 , i32 %a3 , i32 %a4 , i32 %a5 , i32 %a6 , i32 %a7 ) nounwind {
541676; CHECK-LABEL: buildvector_v8i32:
542677; CHECK: # %bb.0: # %entry
@@ -596,6 +731,41 @@ entry:
596731 ret void
597732}
598733
734+ define void @buildvector_v8i32_with_constant (ptr %dst , i32 %a2 , i32 %a4 , i32 %a5 , i32 %a6 ) nounwind {
735+ ; CHECK-LABEL: buildvector_v8i32_with_constant:
736+ ; CHECK: # %bb.0: # %entry
737+ ; CHECK-NEXT: addi.d $sp, $sp, -96
738+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
739+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
740+ ; CHECK-NEXT: addi.d $fp, $sp, 96
741+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
742+ ; CHECK-NEXT: st.w $zero, $sp, 60
743+ ; CHECK-NEXT: st.w $a4, $sp, 56
744+ ; CHECK-NEXT: st.w $a3, $sp, 52
745+ ; CHECK-NEXT: st.w $a2, $sp, 48
746+ ; CHECK-NEXT: st.w $zero, $sp, 44
747+ ; CHECK-NEXT: st.w $a1, $sp, 40
748+ ; CHECK-NEXT: st.d $zero, $sp, 32
749+ ; CHECK-NEXT: xvld $xr0, $sp, 32
750+ ; CHECK-NEXT: xvst $xr0, $a0, 0
751+ ; CHECK-NEXT: addi.d $sp, $fp, -96
752+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
753+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
754+ ; CHECK-NEXT: addi.d $sp, $sp, 96
755+ ; CHECK-NEXT: ret
756+ entry:
757+ %ins0 = insertelement <8 x i32 > undef , i32 0 , i32 0
758+ %ins1 = insertelement <8 x i32 > %ins0 , i32 0 , i32 1
759+ %ins2 = insertelement <8 x i32 > %ins1 , i32 %a2 , i32 2
760+ %ins3 = insertelement <8 x i32 > %ins2 , i32 0 , i32 3
761+ %ins4 = insertelement <8 x i32 > %ins3 , i32 %a4 , i32 4
762+ %ins5 = insertelement <8 x i32 > %ins4 , i32 %a5 , i32 5
763+ %ins6 = insertelement <8 x i32 > %ins5 , i32 %a6 , i32 6
764+ %ins7 = insertelement <8 x i32 > %ins6 , i32 0 , i32 7
765+ store <8 x i32 > %ins7 , ptr %dst
766+ ret void
767+ }
768+
599769define void @buildvector_v4i64 (ptr %dst , i64 %a0 , i64 %a1 , i64 %a2 , i64 %a3 ) nounwind {
600770; CHECK-LABEL: buildvector_v4i64:
601771; CHECK: # %bb.0: # %entry
@@ -633,6 +803,34 @@ entry:
633803 ret void
634804}
635805
806+ define void @buildvector_v4i64_with_constant (ptr %dst , i64 %a0 , i64 %a2 ) nounwind {
807+ ; CHECK-LABEL: buildvector_v4i64_with_constant:
808+ ; CHECK: # %bb.0: # %entry
809+ ; CHECK-NEXT: addi.d $sp, $sp, -96
810+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
811+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
812+ ; CHECK-NEXT: addi.d $fp, $sp, 96
813+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
814+ ; CHECK-NEXT: st.d $zero, $sp, 56
815+ ; CHECK-NEXT: st.d $a2, $sp, 48
816+ ; CHECK-NEXT: st.d $zero, $sp, 40
817+ ; CHECK-NEXT: st.d $a1, $sp, 32
818+ ; CHECK-NEXT: xvld $xr0, $sp, 32
819+ ; CHECK-NEXT: xvst $xr0, $a0, 0
820+ ; CHECK-NEXT: addi.d $sp, $fp, -96
821+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
822+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
823+ ; CHECK-NEXT: addi.d $sp, $sp, 96
824+ ; CHECK-NEXT: ret
825+ entry:
826+ %ins0 = insertelement <4 x i64 > undef , i64 %a0 , i32 0
827+ %ins1 = insertelement <4 x i64 > %ins0 , i64 0 , i32 1
828+ %ins2 = insertelement <4 x i64 > %ins1 , i64 %a2 , i32 2
829+ %ins3 = insertelement <4 x i64 > %ins2 , i64 0 , i32 3
830+ store <4 x i64 > %ins3 , ptr %dst
831+ ret void
832+ }
833+
636834define void @buildvector_v8f32 (ptr %dst , float %a0 , float %a1 , float %a2 , float %a3 , float %a4 , float %a5 , float %a6 , float %a7 ) nounwind {
637835; CHECK-LABEL: buildvector_v8f32:
638836; CHECK: # %bb.0: # %entry
@@ -698,6 +896,44 @@ entry:
698896 ret void
699897}
700898
899+ define void @buildvector_v8f32_with_constant (ptr %dst , float %a1 , float %a2 , float %a5 , float %a7 ) nounwind {
900+ ; CHECK-LABEL: buildvector_v8f32_with_constant:
901+ ; CHECK: # %bb.0: # %entry
902+ ; CHECK-NEXT: addi.d $sp, $sp, -96
903+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
904+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
905+ ; CHECK-NEXT: addi.d $fp, $sp, 96
906+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
907+ ; CHECK-NEXT: fst.s $fa3, $sp, 60
908+ ; CHECK-NEXT: fst.s $fa2, $sp, 52
909+ ; CHECK-NEXT: fst.s $fa1, $sp, 40
910+ ; CHECK-NEXT: fst.s $fa0, $sp, 36
911+ ; CHECK-NEXT: vldi $vr0, -1280
912+ ; CHECK-NEXT: fst.s $fa0, $sp, 56
913+ ; CHECK-NEXT: lu12i.w $a1, 262144
914+ ; CHECK-NEXT: lu52i.d $a1, $a1, 1024
915+ ; CHECK-NEXT: st.d $a1, $sp, 44
916+ ; CHECK-NEXT: fst.s $fa0, $sp, 32
917+ ; CHECK-NEXT: xvld $xr0, $sp, 32
918+ ; CHECK-NEXT: xvst $xr0, $a0, 0
919+ ; CHECK-NEXT: addi.d $sp, $fp, -96
920+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
921+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
922+ ; CHECK-NEXT: addi.d $sp, $sp, 96
923+ ; CHECK-NEXT: ret
924+ entry:
925+ %ins0 = insertelement <8 x float > undef , float 2 .0 , i32 0
926+ %ins1 = insertelement <8 x float > %ins0 , float %a1 , i32 1
927+ %ins2 = insertelement <8 x float > %ins1 , float %a2 , i32 2
928+ %ins3 = insertelement <8 x float > %ins2 , float 2 .0 , i32 3
929+ %ins4 = insertelement <8 x float > %ins3 , float 2 .0 , i32 4
930+ %ins5 = insertelement <8 x float > %ins4 , float %a5 , i32 5
931+ %ins6 = insertelement <8 x float > %ins5 , float 2 .0 , i32 6
932+ %ins7 = insertelement <8 x float > %ins6 , float %a7 , i32 7
933+ store <8 x float > %ins7 , ptr %dst
934+ ret void
935+ }
936+
701937define void @buildvector_v4f64 (ptr %dst , double %a0 , double %a1 , double %a2 , double %a3 ) nounwind {
702938; CHECK-LABEL: buildvector_v4f64:
703939; CHECK: # %bb.0: # %entry
@@ -737,3 +973,31 @@ entry:
737973 store <4 x double > %ins3 , ptr %dst
738974 ret void
739975}
976+
977+ define void @buildvector_v4f64_with_constant (ptr %dst , double %a0 , double %a3 ) nounwind {
978+ ; CHECK-LABEL: buildvector_v4f64_with_constant:
979+ ; CHECK: # %bb.0: # %entry
980+ ; CHECK-NEXT: addi.d $sp, $sp, -96
981+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
982+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
983+ ; CHECK-NEXT: addi.d $fp, $sp, 96
984+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
985+ ; CHECK-NEXT: fst.d $fa1, $sp, 56
986+ ; CHECK-NEXT: vrepli.b $vr1, 0
987+ ; CHECK-NEXT: vst $vr1, $sp, 40
988+ ; CHECK-NEXT: fst.d $fa0, $sp, 32
989+ ; CHECK-NEXT: xvld $xr0, $sp, 32
990+ ; CHECK-NEXT: xvst $xr0, $a0, 0
991+ ; CHECK-NEXT: addi.d $sp, $fp, -96
992+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
993+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
994+ ; CHECK-NEXT: addi.d $sp, $sp, 96
995+ ; CHECK-NEXT: ret
996+ entry:
997+ %ins0 = insertelement <4 x double > undef , double %a0 , i32 0
998+ %ins1 = insertelement <4 x double > %ins0 , double 0 .0 , i32 1
999+ %ins2 = insertelement <4 x double > %ins1 , double 0 .0 , i32 2
1000+ %ins3 = insertelement <4 x double > %ins2 , double %a3 , i32 3
1001+ store <4 x double > %ins3 , ptr %dst
1002+ ret void
1003+ }
0 commit comments