@@ -355,40 +355,46 @@ entry:
355355define void @buildvector_v32i8_partial (ptr %dst , i8 %a0 , i8 %a1 , i8 %a2 , i8 %a5 , i8 %a7 , i8 %a8 , i8 %a15 , i8 %a17 , i8 %a18 , i8 %a20 , i8 %a22 , i8 %a23 , i8 %a27 , i8 %a28 , i8 %a31 ) nounwind {
356356; CHECK-LABEL: buildvector_v32i8_partial:
357357; CHECK: # %bb.0: # %entry
358- ; CHECK-NEXT: addi.d $sp, $sp, -96
359- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
360- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
361- ; CHECK-NEXT: addi.d $fp, $sp, 96
362- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
363- ; CHECK-NEXT: ld.b $t0, $fp, 0
364- ; CHECK-NEXT: ld.b $t1, $fp, 8
365- ; CHECK-NEXT: ld.b $t2, $fp, 16
366- ; CHECK-NEXT: ld.b $t3, $fp, 24
367- ; CHECK-NEXT: ld.b $t4, $fp, 56
368- ; CHECK-NEXT: ld.b $t5, $fp, 48
369- ; CHECK-NEXT: ld.b $t6, $fp, 40
370- ; CHECK-NEXT: ld.b $t7, $fp, 32
371- ; CHECK-NEXT: st.b $t4, $sp, 63
372- ; CHECK-NEXT: st.b $t5, $sp, 60
373- ; CHECK-NEXT: st.b $t6, $sp, 59
374- ; CHECK-NEXT: st.b $t7, $sp, 55
375- ; CHECK-NEXT: st.b $t3, $sp, 54
376- ; CHECK-NEXT: st.b $t2, $sp, 52
377- ; CHECK-NEXT: st.b $t1, $sp, 50
378- ; CHECK-NEXT: st.b $t0, $sp, 49
379- ; CHECK-NEXT: st.b $a7, $sp, 47
380- ; CHECK-NEXT: st.b $a6, $sp, 40
381- ; CHECK-NEXT: st.b $a5, $sp, 39
382- ; CHECK-NEXT: st.b $a4, $sp, 37
383- ; CHECK-NEXT: st.b $a3, $sp, 34
384- ; CHECK-NEXT: st.b $a2, $sp, 33
385- ; CHECK-NEXT: st.b $a1, $sp, 32
386- ; CHECK-NEXT: xvld $xr0, $sp, 32
358+ ; CHECK-NEXT: ld.b $t0, $sp, 56
359+ ; CHECK-NEXT: ld.b $t1, $sp, 48
360+ ; CHECK-NEXT: ld.b $t2, $sp, 40
361+ ; CHECK-NEXT: ld.b $t3, $sp, 32
362+ ; CHECK-NEXT: ld.b $t4, $sp, 24
363+ ; CHECK-NEXT: ld.b $t5, $sp, 16
364+ ; CHECK-NEXT: ld.b $t6, $sp, 8
365+ ; CHECK-NEXT: ld.b $t7, $sp, 0
366+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a1, 0
367+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a2, 1
368+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a3, 2
369+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a4, 5
370+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a5, 7
371+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a6, 8
372+ ; CHECK-NEXT: vinsgr2vr.b $vr0, $a7, 15
373+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
374+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t7, 1
375+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
376+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
377+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t6, 2
378+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
379+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
380+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t5, 4
381+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
382+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
383+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t4, 6
384+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
385+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
386+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t3, 7
387+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
388+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
389+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t2, 11
390+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
391+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
392+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t1, 12
393+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
394+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
395+ ; CHECK-NEXT: vinsgr2vr.b $vr1, $t0, 15
396+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
387397; CHECK-NEXT: xvst $xr0, $a0, 0
388- ; CHECK-NEXT: addi.d $sp, $fp, -96
389- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
390- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
391- ; CHECK-NEXT: addi.d $sp, $sp, 96
392398; CHECK-NEXT: ret
393399entry:
394400 %ins0 = insertelement <32 x i8 > undef , i8 %a0 , i32 0
@@ -581,24 +587,18 @@ entry:
581587define void @buildvector_v16i16_partial (ptr %dst , i16 %a0 , i16 %a2 , i16 %a5 , i16 %a6 , i16 %a7 , i16 %a12 , i16 %a13 ) nounwind {
582588; CHECK-LABEL: buildvector_v16i16_partial:
583589; CHECK: # %bb.0: # %entry
584- ; CHECK-NEXT: addi.d $sp, $sp, -96
585- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
586- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
587- ; CHECK-NEXT: addi.d $fp, $sp, 96
588- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
589- ; CHECK-NEXT: st.h $a7, $sp, 58
590- ; CHECK-NEXT: st.h $a6, $sp, 56
591- ; CHECK-NEXT: st.h $a5, $sp, 46
592- ; CHECK-NEXT: st.h $a4, $sp, 44
593- ; CHECK-NEXT: st.h $a3, $sp, 42
594- ; CHECK-NEXT: st.h $a2, $sp, 36
595- ; CHECK-NEXT: st.h $a1, $sp, 32
596- ; CHECK-NEXT: xvld $xr0, $sp, 32
590+ ; CHECK-NEXT: vinsgr2vr.h $vr0, $a1, 0
591+ ; CHECK-NEXT: vinsgr2vr.h $vr0, $a2, 2
592+ ; CHECK-NEXT: vinsgr2vr.h $vr0, $a3, 5
593+ ; CHECK-NEXT: vinsgr2vr.h $vr0, $a4, 6
594+ ; CHECK-NEXT: vinsgr2vr.h $vr0, $a5, 7
595+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
596+ ; CHECK-NEXT: vinsgr2vr.h $vr1, $a6, 4
597+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
598+ ; CHECK-NEXT: xvpermi.d $xr1, $xr0, 14
599+ ; CHECK-NEXT: vinsgr2vr.h $vr1, $a7, 5
600+ ; CHECK-NEXT: xvpermi.q $xr0, $xr1, 2
597601; CHECK-NEXT: xvst $xr0, $a0, 0
598- ; CHECK-NEXT: addi.d $sp, $fp, -96
599- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
600- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
601- ; CHECK-NEXT: addi.d $sp, $sp, 96
602602; CHECK-NEXT: ret
603603entry:
604604 %ins0 = insertelement <16 x i16 > undef , i16 %a0 , i32 0
@@ -702,21 +702,11 @@ entry:
702702define void @buildvector_v8i32_partial (ptr %dst , i32 %a2 , i32 %a4 , i32 %a5 , i32 %a6 ) nounwind {
703703; CHECK-LABEL: buildvector_v8i32_partial:
704704; CHECK: # %bb.0: # %entry
705- ; CHECK-NEXT: addi.d $sp, $sp, -96
706- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
707- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
708- ; CHECK-NEXT: addi.d $fp, $sp, 96
709- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
710- ; CHECK-NEXT: st.w $a4, $sp, 56
711- ; CHECK-NEXT: st.w $a3, $sp, 52
712- ; CHECK-NEXT: st.w $a2, $sp, 48
713- ; CHECK-NEXT: st.w $a1, $sp, 40
714- ; CHECK-NEXT: xvld $xr0, $sp, 32
705+ ; CHECK-NEXT: xvinsgr2vr.w $xr0, $a1, 2
706+ ; CHECK-NEXT: xvinsgr2vr.w $xr0, $a2, 4
707+ ; CHECK-NEXT: xvinsgr2vr.w $xr0, $a3, 5
708+ ; CHECK-NEXT: xvinsgr2vr.w $xr0, $a4, 6
715709; CHECK-NEXT: xvst $xr0, $a0, 0
716- ; CHECK-NEXT: addi.d $sp, $fp, -96
717- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
718- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
719- ; CHECK-NEXT: addi.d $sp, $sp, 96
720710; CHECK-NEXT: ret
721711entry:
722712 %ins0 = insertelement <8 x i32 > undef , i32 undef , i32 0
@@ -787,11 +777,8 @@ entry:
787777define void @buildvector_v4i64_partial (ptr %dst , i64 %a1 , i64 %a2 ) nounwind {
788778; CHECK-LABEL: buildvector_v4i64_partial:
789779; CHECK: # %bb.0: # %entry
790- ; CHECK-NEXT: xvinsgr2vr.d $xr0, $a2, 0
791- ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
792- ; CHECK-NEXT: xvinsgr2vr.d $xr1, $a1, 0
793- ; CHECK-NEXT: xvpermi.d $xr1, $xr1, 68
794- ; CHECK-NEXT: xvpackev.d $xr0, $xr1, $xr0
780+ ; CHECK-NEXT: xvinsgr2vr.d $xr0, $a1, 1
781+ ; CHECK-NEXT: xvinsgr2vr.d $xr0, $a2, 2
795782; CHECK-NEXT: xvst $xr0, $a0, 0
796783; CHECK-NEXT: ret
797784entry:
@@ -867,21 +854,15 @@ entry:
867854define void @buildvector_v8f32_partial (ptr %dst , float %a1 , float %a2 , float %a5 , float %a7 ) nounwind {
868855; CHECK-LABEL: buildvector_v8f32_partial:
869856; CHECK: # %bb.0: # %entry
870- ; CHECK-NEXT: addi.d $sp, $sp, -96
871- ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
872- ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
873- ; CHECK-NEXT: addi.d $fp, $sp, 96
874- ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
875- ; CHECK-NEXT: fst.s $fa3, $sp, 60
876- ; CHECK-NEXT: fst.s $fa2, $sp, 52
877- ; CHECK-NEXT: fst.s $fa1, $sp, 40
878- ; CHECK-NEXT: fst.s $fa0, $sp, 36
879- ; CHECK-NEXT: xvld $xr0, $sp, 32
857+ ; CHECK-NEXT: # kill: def $f3 killed $f3 def $xr3
858+ ; CHECK-NEXT: # kill: def $f2 killed $f2 def $xr2
859+ ; CHECK-NEXT: # kill: def $f1 killed $f1 def $xr1
860+ ; CHECK-NEXT: # kill: def $f0 killed $f0 def $xr0
861+ ; CHECK-NEXT: xvinsve0.w $xr0, $xr0, 1
862+ ; CHECK-NEXT: xvinsve0.w $xr0, $xr1, 2
863+ ; CHECK-NEXT: xvinsve0.w $xr0, $xr2, 5
864+ ; CHECK-NEXT: xvinsve0.w $xr0, $xr3, 7
880865; CHECK-NEXT: xvst $xr0, $a0, 0
881- ; CHECK-NEXT: addi.d $sp, $fp, -96
882- ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
883- ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
884- ; CHECK-NEXT: addi.d $sp, $sp, 96
885866; CHECK-NEXT: ret
886867entry:
887868 %ins0 = insertelement <8 x float > undef , float undef , i32 0
@@ -960,9 +941,7 @@ define void @buildvector_v4f64_partial(ptr %dst, double %a0, double %a3) nounwin
960941; CHECK: # %bb.0: # %entry
961942; CHECK-NEXT: # kill: def $f1_64 killed $f1_64 def $xr1
962943; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
963- ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
964- ; CHECK-NEXT: xvpermi.d $xr1, $xr1, 68
965- ; CHECK-NEXT: xvpackev.d $xr0, $xr1, $xr0
944+ ; CHECK-NEXT: xvinsve0.d $xr0, $xr1, 3
966945; CHECK-NEXT: xvst $xr0, $a0, 0
967946; CHECK-NEXT: ret
968947entry:
0 commit comments