[LoongArch] fix vec-trunc.ll test error (#131104)

This commit is contained in:
tangaac 2025-03-13 17:00:51 +08:00 committed by GitHub
parent de895751d2
commit d77ef140e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,11 +4,15 @@
define void @load_trunc_2i64_to_2i32(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_2i64_to_2i32:
; CHECK: # %bb.0:
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: vld $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
; CHECK-NEXT: st.w $a0, $a1, 4
; CHECK-NEXT: st.w $a0, $sp, 4
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
; CHECK-NEXT: st.w $a0, $a1, 0
; CHECK-NEXT: st.w $a0, $sp, 0
; CHECK-NEXT: ld.d $a0, $sp, 0
; CHECK-NEXT: st.d $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <2 x i64>, ptr %ptr
%trunc = trunc <2 x i64> %a to <2 x i32>
@ -19,11 +23,16 @@ define void @load_trunc_2i64_to_2i32(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_2i64_to_2i16(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_2i64_to_2i16:
; CHECK: # %bb.0:
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: vld $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
; CHECK-NEXT: st.h $a0, $a1, 2
; CHECK-NEXT: st.h $a0, $sp, 2
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
; CHECK-NEXT: st.h $a0, $a1, 0
; CHECK-NEXT: st.h $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.w $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <2 x i64>, ptr %ptr
%trunc = trunc <2 x i64> %a to <2 x i16>
@ -34,11 +43,16 @@ define void @load_trunc_2i64_to_2i16(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_2i64_to_2i8(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_2i64_to_2i8:
; CHECK: # %bb.0:
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: vld $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
; CHECK-NEXT: st.b $a0, $a1, 1
; CHECK-NEXT: st.b $a0, $sp, 1
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
; CHECK-NEXT: st.b $a0, $a1, 0
; CHECK-NEXT: st.b $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
; CHECK-NEXT: st.h $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <2 x i64>, ptr %ptr
%trunc = trunc <2 x i64> %a to <2 x i8>
@ -49,15 +63,19 @@ define void @load_trunc_2i64_to_2i8(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_4i32_to_4i16(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_4i32_to_4i16:
; CHECK: # %bb.0:
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: vld $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
; CHECK-NEXT: st.h $a0, $a1, 6
; CHECK-NEXT: st.h $a0, $sp, 6
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 2
; CHECK-NEXT: st.h $a0, $a1, 4
; CHECK-NEXT: st.h $a0, $sp, 4
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
; CHECK-NEXT: st.h $a0, $a1, 2
; CHECK-NEXT: st.h $a0, $sp, 2
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.h $a0, $a1, 0
; CHECK-NEXT: st.h $a0, $sp, 0
; CHECK-NEXT: ld.d $a0, $sp, 0
; CHECK-NEXT: st.d $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <4 x i32>, ptr %ptr
%trunc = trunc <4 x i32> %a to <4 x i16>
@ -68,15 +86,20 @@ define void @load_trunc_4i32_to_4i16(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_4i32_to_4i8(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_4i32_to_4i8:
; CHECK: # %bb.0:
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: vld $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
; CHECK-NEXT: st.b $a0, $a1, 3
; CHECK-NEXT: st.b $a0, $sp, 3
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 2
; CHECK-NEXT: st.b $a0, $a1, 2
; CHECK-NEXT: st.b $a0, $sp, 2
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
; CHECK-NEXT: st.b $a0, $a1, 1
; CHECK-NEXT: st.b $a0, $sp, 1
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.b $a0, $a1, 0
; CHECK-NEXT: st.b $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.w $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <4 x i32>, ptr %ptr
%trunc = trunc <4 x i32> %a to <4 x i8>
@ -87,23 +110,27 @@ define void @load_trunc_4i32_to_4i8(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_8i16_to_8i8(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_8i16_to_8i8:
; CHECK: # %bb.0:
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: vld $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 7
; CHECK-NEXT: st.b $a0, $a1, 7
; CHECK-NEXT: st.b $a0, $sp, 7
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 6
; CHECK-NEXT: st.b $a0, $a1, 6
; CHECK-NEXT: st.b $a0, $sp, 6
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 5
; CHECK-NEXT: st.b $a0, $a1, 5
; CHECK-NEXT: st.b $a0, $sp, 5
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 4
; CHECK-NEXT: st.b $a0, $a1, 4
; CHECK-NEXT: st.b $a0, $sp, 4
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 3
; CHECK-NEXT: st.b $a0, $a1, 3
; CHECK-NEXT: st.b $a0, $sp, 3
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 2
; CHECK-NEXT: st.b $a0, $a1, 2
; CHECK-NEXT: st.b $a0, $sp, 2
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
; CHECK-NEXT: st.b $a0, $a1, 1
; CHECK-NEXT: st.b $a0, $sp, 1
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
; CHECK-NEXT: st.b $a0, $a1, 0
; CHECK-NEXT: st.b $a0, $sp, 0
; CHECK-NEXT: ld.d $a0, $sp, 0
; CHECK-NEXT: st.d $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <8 x i16>, ptr %ptr
%trunc = trunc <8 x i16> %a to <8 x i8>
@ -114,10 +141,17 @@ define void @load_trunc_8i16_to_8i8(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_2i32_to_2i16(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_2i32_to_2i16:
; CHECK: # %bb.0:
; CHECK-NEXT: ld.w $a2, $a0, 4
; CHECK-NEXT: ld.w $a0, $a0, 0
; CHECK-NEXT: st.h $a2, $a1, 2
; CHECK-NEXT: st.h $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: ld.d $a0, $a0, 0
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
; CHECK-NEXT: st.h $a0, $sp, 2
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.h $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.w $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <2 x i32>, ptr %ptr
%trunc = trunc <2 x i32> %a to <2 x i16>
@ -128,10 +162,17 @@ define void @load_trunc_2i32_to_2i16(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_2i32_to_2i8(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_2i32_to_2i8:
; CHECK: # %bb.0:
; CHECK-NEXT: ld.w $a2, $a0, 4
; CHECK-NEXT: ld.w $a0, $a0, 0
; CHECK-NEXT: st.b $a2, $a1, 1
; CHECK-NEXT: st.b $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: ld.d $a0, $a0, 0
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
; CHECK-NEXT: st.b $a0, $sp, 1
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.b $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
; CHECK-NEXT: st.h $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <2 x i32>, ptr %ptr
%trunc = trunc <2 x i32> %a to <2 x i8>
@ -142,14 +183,21 @@ define void @load_trunc_2i32_to_2i8(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_4i16_to_4i8(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_4i16_to_4i8:
; CHECK: # %bb.0:
; CHECK-NEXT: ld.h $a2, $a0, 6
; CHECK-NEXT: ld.h $a3, $a0, 4
; CHECK-NEXT: ld.h $a4, $a0, 2
; CHECK-NEXT: ld.h $a0, $a0, 0
; CHECK-NEXT: st.b $a2, $a1, 3
; CHECK-NEXT: st.b $a3, $a1, 2
; CHECK-NEXT: st.b $a4, $a1, 1
; CHECK-NEXT: st.b $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: ld.d $a0, $a0, 0
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 3
; CHECK-NEXT: st.b $a0, $sp, 3
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 2
; CHECK-NEXT: st.b $a0, $sp, 2
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
; CHECK-NEXT: st.b $a0, $sp, 1
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
; CHECK-NEXT: st.b $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
; CHECK-NEXT: st.w $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <4 x i16>, ptr %ptr
%trunc = trunc <4 x i16> %a to <4 x i8>
@ -160,10 +208,17 @@ define void @load_trunc_4i16_to_4i8(ptr %ptr, ptr %dst) nounwind {
define void @load_trunc_2i16_to_2i8(ptr %ptr, ptr %dst) nounwind {
; CHECK-LABEL: load_trunc_2i16_to_2i8:
; CHECK: # %bb.0:
; CHECK-NEXT: ld.h $a2, $a0, 2
; CHECK-NEXT: ld.h $a0, $a0, 0
; CHECK-NEXT: st.b $a2, $a1, 1
; CHECK-NEXT: st.b $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, -16
; CHECK-NEXT: ld.w $a0, $a0, 0
; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 0
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
; CHECK-NEXT: st.b $a0, $sp, 1
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
; CHECK-NEXT: st.b $a0, $sp, 0
; CHECK-NEXT: vld $vr0, $sp, 0
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
; CHECK-NEXT: st.h $a0, $a1, 0
; CHECK-NEXT: addi.d $sp, $sp, 16
; CHECK-NEXT: ret
%a = load <2 x i16>, ptr %ptr
%trunc = trunc <2 x i16> %a to <2 x i8>