Skip to content

Commit afbf86e

Browse files
committed
[LoongArch] Pre-commit tests for build_vector with undef elements inserting
1 parent 5f35f06 commit afbf86e

File tree

2 files changed

+345
-0
lines changed

2 files changed

+345
-0
lines changed

llvm/test/CodeGen/LoongArch/lasx/build-vector.ll

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,81 @@ entry:
352352
ret void
353353
}
354354

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+
355430
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 {
356431
; CHECK-LABEL: buildvector_v16i16:
357432
; CHECK: # %bb.0: # %entry
@@ -419,6 +494,49 @@ entry:
419494
ret void
420495
}
421496

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+
422540
define void @buildvector_v8i32(ptr %dst, i32 %a0, i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6, i32 %a7) nounwind {
423541
; CHECK-LABEL: buildvector_v8i32:
424542
; CHECK: # %bb.0: # %entry
@@ -446,6 +564,38 @@ entry:
446564
ret void
447565
}
448566

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+
449599
define void @buildvector_v4i64(ptr %dst, i64 %a0, i64 %a1, i64 %a2, i64 %a3) nounwind {
450600
; CHECK-LABEL: buildvector_v4i64:
451601
; CHECK: # %bb.0: # %entry
@@ -464,6 +614,25 @@ entry:
464614
ret void
465615
}
466616

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+
467636
define void @buildvector_v8f32(ptr %dst, float %a0, float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7) nounwind {
468637
; CHECK-LABEL: buildvector_v8f32:
469638
; CHECK: # %bb.0: # %entry
@@ -497,6 +666,38 @@ entry:
497666
ret void
498667
}
499668

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+
500701
define void @buildvector_v4f64(ptr %dst, double %a0, double %a1, double %a2, double %a3) nounwind {
501702
; CHECK-LABEL: buildvector_v4f64:
502703
; CHECK: # %bb.0: # %entry
@@ -517,3 +718,22 @@ entry:
517718
store <4 x double> %ins3, ptr %dst
518719
ret void
519720
}
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

Comments
 (0)