@@ -352,6 +352,81 @@ entry:
352
352
ret void
353
353
}
354
354
355
+ define 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 {
356
+ ; CHECK-LABEL: buildvector_v32i8_partial:
357
+ ; 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
387
+ ; 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
392
+ ; CHECK-NEXT: ret
393
+ entry:
394
+ %ins0 = insertelement <32 x i8 > undef , i8 %a0 , i32 0
395
+ %ins1 = insertelement <32 x i8 > %ins0 , i8 %a1 , i32 1
396
+ %ins2 = insertelement <32 x i8 > %ins1 , i8 %a2 , i32 2
397
+ %ins3 = insertelement <32 x i8 > %ins2 , i8 undef , i32 3
398
+ %ins4 = insertelement <32 x i8 > %ins3 , i8 undef , i32 4
399
+ %ins5 = insertelement <32 x i8 > %ins4 , i8 %a5 , i32 5
400
+ %ins6 = insertelement <32 x i8 > %ins5 , i8 undef , i32 6
401
+ %ins7 = insertelement <32 x i8 > %ins6 , i8 %a7 , i32 7
402
+ %ins8 = insertelement <32 x i8 > %ins7 , i8 %a8 , i32 8
403
+ %ins9 = insertelement <32 x i8 > %ins8 , i8 undef , i32 9
404
+ %ins10 = insertelement <32 x i8 > %ins9 , i8 undef , i32 10
405
+ %ins11 = insertelement <32 x i8 > %ins10 , i8 undef , i32 11
406
+ %ins12 = insertelement <32 x i8 > %ins11 , i8 undef , i32 12
407
+ %ins13 = insertelement <32 x i8 > %ins12 , i8 undef , i32 13
408
+ %ins14 = insertelement <32 x i8 > %ins13 , i8 undef , i32 14
409
+ %ins15 = insertelement <32 x i8 > %ins14 , i8 %a15 , i32 15
410
+ %ins16 = insertelement <32 x i8 > %ins15 , i8 undef , i32 16
411
+ %ins17 = insertelement <32 x i8 > %ins16 , i8 %a17 , i32 17
412
+ %ins18 = insertelement <32 x i8 > %ins17 , i8 %a18 , i32 18
413
+ %ins19 = insertelement <32 x i8 > %ins18 , i8 undef , i32 19
414
+ %ins20 = insertelement <32 x i8 > %ins19 , i8 %a20 , i32 20
415
+ %ins21 = insertelement <32 x i8 > %ins20 , i8 undef , i32 21
416
+ %ins22 = insertelement <32 x i8 > %ins21 , i8 %a22 , i32 22
417
+ %ins23 = insertelement <32 x i8 > %ins22 , i8 %a23 , i32 23
418
+ %ins24 = insertelement <32 x i8 > %ins23 , i8 undef , i32 24
419
+ %ins25 = insertelement <32 x i8 > %ins24 , i8 undef , i32 25
420
+ %ins26 = insertelement <32 x i8 > %ins25 , i8 undef , i32 26
421
+ %ins27 = insertelement <32 x i8 > %ins26 , i8 %a27 , i32 27
422
+ %ins28 = insertelement <32 x i8 > %ins27 , i8 %a28 , i32 28
423
+ %ins29 = insertelement <32 x i8 > %ins28 , i8 undef , i32 29
424
+ %ins30 = insertelement <32 x i8 > %ins29 , i8 undef , i32 30
425
+ %ins31 = insertelement <32 x i8 > %ins30 , i8 %a31 , i32 31
426
+ store <32 x i8 > %ins31 , ptr %dst
427
+ ret void
428
+ }
429
+
355
430
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 {
356
431
; CHECK-LABEL: buildvector_v16i16:
357
432
; CHECK: # %bb.0: # %entry
@@ -419,6 +494,49 @@ entry:
419
494
ret void
420
495
}
421
496
497
+ define void @buildvector_v16i16_partial (ptr %dst , i16 %a0 , i16 %a2 , i16 %a5 , i16 %a6 , i16 %a7 , i16 %a12 , i16 %a13 ) nounwind {
498
+ ; CHECK-LABEL: buildvector_v16i16_partial:
499
+ ; CHECK: # %bb.0: # %entry
500
+ ; CHECK-NEXT: addi.d $sp, $sp, -96
501
+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
502
+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
503
+ ; CHECK-NEXT: addi.d $fp, $sp, 96
504
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
505
+ ; CHECK-NEXT: st.h $a7, $sp, 58
506
+ ; CHECK-NEXT: st.h $a6, $sp, 56
507
+ ; CHECK-NEXT: st.h $a5, $sp, 46
508
+ ; CHECK-NEXT: st.h $a4, $sp, 44
509
+ ; CHECK-NEXT: st.h $a3, $sp, 42
510
+ ; CHECK-NEXT: st.h $a2, $sp, 36
511
+ ; CHECK-NEXT: st.h $a1, $sp, 32
512
+ ; CHECK-NEXT: xvld $xr0, $sp, 32
513
+ ; CHECK-NEXT: xvst $xr0, $a0, 0
514
+ ; CHECK-NEXT: addi.d $sp, $fp, -96
515
+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
516
+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
517
+ ; CHECK-NEXT: addi.d $sp, $sp, 96
518
+ ; CHECK-NEXT: ret
519
+ entry:
520
+ %ins0 = insertelement <16 x i16 > undef , i16 %a0 , i32 0
521
+ %ins1 = insertelement <16 x i16 > %ins0 , i16 undef , i32 1
522
+ %ins2 = insertelement <16 x i16 > %ins1 , i16 %a2 , i32 2
523
+ %ins3 = insertelement <16 x i16 > %ins2 , i16 undef , i32 3
524
+ %ins4 = insertelement <16 x i16 > %ins3 , i16 undef , i32 4
525
+ %ins5 = insertelement <16 x i16 > %ins4 , i16 %a5 , i32 5
526
+ %ins6 = insertelement <16 x i16 > %ins5 , i16 %a6 , i32 6
527
+ %ins7 = insertelement <16 x i16 > %ins6 , i16 %a7 , i32 7
528
+ %ins8 = insertelement <16 x i16 > %ins7 , i16 undef , i32 8
529
+ %ins9 = insertelement <16 x i16 > %ins8 , i16 undef , i32 9
530
+ %ins10 = insertelement <16 x i16 > %ins9 , i16 undef , i32 10
531
+ %ins11 = insertelement <16 x i16 > %ins10 , i16 undef , i32 11
532
+ %ins12 = insertelement <16 x i16 > %ins11 , i16 %a12 , i32 12
533
+ %ins13 = insertelement <16 x i16 > %ins12 , i16 %a13 , i32 13
534
+ %ins14 = insertelement <16 x i16 > %ins13 , i16 undef , i32 14
535
+ %ins15 = insertelement <16 x i16 > %ins14 , i16 undef , i32 15
536
+ store <16 x i16 > %ins15 , ptr %dst
537
+ ret void
538
+ }
539
+
422
540
define void @buildvector_v8i32 (ptr %dst , i32 %a0 , i32 %a1 , i32 %a2 , i32 %a3 , i32 %a4 , i32 %a5 , i32 %a6 , i32 %a7 ) nounwind {
423
541
; CHECK-LABEL: buildvector_v8i32:
424
542
; CHECK: # %bb.0: # %entry
@@ -446,6 +564,38 @@ entry:
446
564
ret void
447
565
}
448
566
567
+ define void @buildvector_v8i32_partial (ptr %dst , i32 %a2 , i32 %a4 , i32 %a5 , i32 %a6 ) nounwind {
568
+ ; CHECK-LABEL: buildvector_v8i32_partial:
569
+ ; CHECK: # %bb.0: # %entry
570
+ ; CHECK-NEXT: addi.d $sp, $sp, -96
571
+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
572
+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
573
+ ; CHECK-NEXT: addi.d $fp, $sp, 96
574
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
575
+ ; CHECK-NEXT: st.w $a4, $sp, 56
576
+ ; CHECK-NEXT: st.w $a3, $sp, 52
577
+ ; CHECK-NEXT: st.w $a2, $sp, 48
578
+ ; CHECK-NEXT: st.w $a1, $sp, 40
579
+ ; CHECK-NEXT: xvld $xr0, $sp, 32
580
+ ; CHECK-NEXT: xvst $xr0, $a0, 0
581
+ ; CHECK-NEXT: addi.d $sp, $fp, -96
582
+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
583
+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
584
+ ; CHECK-NEXT: addi.d $sp, $sp, 96
585
+ ; CHECK-NEXT: ret
586
+ entry:
587
+ %ins0 = insertelement <8 x i32 > undef , i32 undef , i32 0
588
+ %ins1 = insertelement <8 x i32 > %ins0 , i32 undef , i32 1
589
+ %ins2 = insertelement <8 x i32 > %ins1 , i32 %a2 , i32 2
590
+ %ins3 = insertelement <8 x i32 > %ins2 , i32 undef , i32 3
591
+ %ins4 = insertelement <8 x i32 > %ins3 , i32 %a4 , i32 4
592
+ %ins5 = insertelement <8 x i32 > %ins4 , i32 %a5 , i32 5
593
+ %ins6 = insertelement <8 x i32 > %ins5 , i32 %a6 , i32 6
594
+ %ins7 = insertelement <8 x i32 > %ins6 , i32 undef , i32 7
595
+ store <8 x i32 > %ins7 , ptr %dst
596
+ ret void
597
+ }
598
+
449
599
define void @buildvector_v4i64 (ptr %dst , i64 %a0 , i64 %a1 , i64 %a2 , i64 %a3 ) nounwind {
450
600
; CHECK-LABEL: buildvector_v4i64:
451
601
; CHECK: # %bb.0: # %entry
@@ -464,6 +614,25 @@ entry:
464
614
ret void
465
615
}
466
616
617
+ define void @buildvector_v4i64_partial (ptr %dst , i64 %a1 , i64 %a2 ) nounwind {
618
+ ; CHECK-LABEL: buildvector_v4i64_partial:
619
+ ; CHECK: # %bb.0: # %entry
620
+ ; CHECK-NEXT: xvinsgr2vr.d $xr0, $a2, 0
621
+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
622
+ ; CHECK-NEXT: xvinsgr2vr.d $xr1, $a1, 0
623
+ ; CHECK-NEXT: xvpermi.d $xr1, $xr1, 68
624
+ ; CHECK-NEXT: xvpackev.d $xr0, $xr1, $xr0
625
+ ; CHECK-NEXT: xvst $xr0, $a0, 0
626
+ ; CHECK-NEXT: ret
627
+ entry:
628
+ %ins0 = insertelement <4 x i64 > undef , i64 undef , i32 0
629
+ %ins1 = insertelement <4 x i64 > %ins0 , i64 %a1 , i32 1
630
+ %ins2 = insertelement <4 x i64 > %ins1 , i64 %a2 , i32 2
631
+ %ins3 = insertelement <4 x i64 > %ins2 , i64 undef , i32 3
632
+ store <4 x i64 > %ins3 , ptr %dst
633
+ ret void
634
+ }
635
+
467
636
define void @buildvector_v8f32 (ptr %dst , float %a0 , float %a1 , float %a2 , float %a3 , float %a4 , float %a5 , float %a6 , float %a7 ) nounwind {
468
637
; CHECK-LABEL: buildvector_v8f32:
469
638
; CHECK: # %bb.0: # %entry
@@ -497,6 +666,38 @@ entry:
497
666
ret void
498
667
}
499
668
669
+ define void @buildvector_v8f32_partial (ptr %dst , float %a1 , float %a2 , float %a5 , float %a7 ) nounwind {
670
+ ; CHECK-LABEL: buildvector_v8f32_partial:
671
+ ; CHECK: # %bb.0: # %entry
672
+ ; CHECK-NEXT: addi.d $sp, $sp, -96
673
+ ; CHECK-NEXT: st.d $ra, $sp, 88 # 8-byte Folded Spill
674
+ ; CHECK-NEXT: st.d $fp, $sp, 80 # 8-byte Folded Spill
675
+ ; CHECK-NEXT: addi.d $fp, $sp, 96
676
+ ; CHECK-NEXT: bstrins.d $sp, $zero, 4, 0
677
+ ; CHECK-NEXT: fst.s $fa3, $sp, 60
678
+ ; CHECK-NEXT: fst.s $fa2, $sp, 52
679
+ ; CHECK-NEXT: fst.s $fa1, $sp, 40
680
+ ; CHECK-NEXT: fst.s $fa0, $sp, 36
681
+ ; CHECK-NEXT: xvld $xr0, $sp, 32
682
+ ; CHECK-NEXT: xvst $xr0, $a0, 0
683
+ ; CHECK-NEXT: addi.d $sp, $fp, -96
684
+ ; CHECK-NEXT: ld.d $fp, $sp, 80 # 8-byte Folded Reload
685
+ ; CHECK-NEXT: ld.d $ra, $sp, 88 # 8-byte Folded Reload
686
+ ; CHECK-NEXT: addi.d $sp, $sp, 96
687
+ ; CHECK-NEXT: ret
688
+ entry:
689
+ %ins0 = insertelement <8 x float > undef , float undef , i32 0
690
+ %ins1 = insertelement <8 x float > %ins0 , float %a1 , i32 1
691
+ %ins2 = insertelement <8 x float > %ins1 , float %a2 , i32 2
692
+ %ins3 = insertelement <8 x float > %ins2 , float undef , i32 3
693
+ %ins4 = insertelement <8 x float > %ins3 , float undef , i32 4
694
+ %ins5 = insertelement <8 x float > %ins4 , float %a5 , i32 5
695
+ %ins6 = insertelement <8 x float > %ins5 , float undef , i32 6
696
+ %ins7 = insertelement <8 x float > %ins6 , float %a7 , i32 7
697
+ store <8 x float > %ins7 , ptr %dst
698
+ ret void
699
+ }
700
+
500
701
define void @buildvector_v4f64 (ptr %dst , double %a0 , double %a1 , double %a2 , double %a3 ) nounwind {
501
702
; CHECK-LABEL: buildvector_v4f64:
502
703
; CHECK: # %bb.0: # %entry
@@ -517,3 +718,22 @@ entry:
517
718
store <4 x double > %ins3 , ptr %dst
518
719
ret void
519
720
}
721
+
722
+ define void @buildvector_v4f64_partial (ptr %dst , double %a0 , double %a3 ) nounwind {
723
+ ; CHECK-LABEL: buildvector_v4f64_partial:
724
+ ; CHECK: # %bb.0: # %entry
725
+ ; CHECK-NEXT: # kill: def $f1_64 killed $f1_64 def $xr1
726
+ ; CHECK-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
727
+ ; CHECK-NEXT: xvpermi.d $xr0, $xr0, 68
728
+ ; CHECK-NEXT: xvpermi.d $xr1, $xr1, 68
729
+ ; CHECK-NEXT: xvpackev.d $xr0, $xr1, $xr0
730
+ ; CHECK-NEXT: xvst $xr0, $a0, 0
731
+ ; CHECK-NEXT: ret
732
+ entry:
733
+ %ins0 = insertelement <4 x double > undef , double %a0 , i32 0
734
+ %ins1 = insertelement <4 x double > %ins0 , double undef , i32 1
735
+ %ins2 = insertelement <4 x double > %ins1 , double undef , i32 2
736
+ %ins3 = insertelement <4 x double > %ins2 , double %a3 , i32 3
737
+ store <4 x double > %ins3 , ptr %dst
738
+ ret void
739
+ }
0 commit comments