@@ -427,6 +427,90 @@ entry:
427
427
ret void
428
428
}
429
429
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
+
430
514
define 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 {
431
515
; CHECK-LABEL: buildvector_v16i16:
432
516
; CHECK: # %bb.0: # %entry
@@ -537,6 +621,57 @@ entry:
537
621
ret void
538
622
}
539
623
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
+
540
675
define void @buildvector_v8i32 (ptr %dst , i32 %a0 , i32 %a1 , i32 %a2 , i32 %a3 , i32 %a4 , i32 %a5 , i32 %a6 , i32 %a7 ) nounwind {
541
676
; CHECK-LABEL: buildvector_v8i32:
542
677
; CHECK: # %bb.0: # %entry
@@ -596,6 +731,41 @@ entry:
596
731
ret void
597
732
}
598
733
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
+
599
769
define void @buildvector_v4i64 (ptr %dst , i64 %a0 , i64 %a1 , i64 %a2 , i64 %a3 ) nounwind {
600
770
; CHECK-LABEL: buildvector_v4i64:
601
771
; CHECK: # %bb.0: # %entry
@@ -633,6 +803,34 @@ entry:
633
803
ret void
634
804
}
635
805
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
+
636
834
define void @buildvector_v8f32 (ptr %dst , float %a0 , float %a1 , float %a2 , float %a3 , float %a4 , float %a5 , float %a6 , float %a7 ) nounwind {
637
835
; CHECK-LABEL: buildvector_v8f32:
638
836
; CHECK: # %bb.0: # %entry
@@ -698,6 +896,44 @@ entry:
698
896
ret void
699
897
}
700
898
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
+
701
937
define void @buildvector_v4f64 (ptr %dst , double %a0 , double %a1 , double %a2 , double %a3 ) nounwind {
702
938
; CHECK-LABEL: buildvector_v4f64:
703
939
; CHECK: # %bb.0: # %entry
@@ -737,3 +973,31 @@ entry:
737
973
store <4 x double > %ins3 , ptr %dst
738
974
ret void
739
975
}
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