Skip to content

Commit d77ef14

Browse files
authored
[LoongArch] fix vec-trunc.ll test error (#131104)
1 parent de89575 commit d77ef14

File tree

1 file changed

+97
-42
lines changed

1 file changed

+97
-42
lines changed

llvm/test/CodeGen/LoongArch/lsx/vec-trunc.ll

+97-42
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,15 @@
44
define void @load_trunc_2i64_to_2i32(ptr %ptr, ptr %dst) nounwind {
55
; CHECK-LABEL: load_trunc_2i64_to_2i32:
66
; CHECK: # %bb.0:
7+
; CHECK-NEXT: addi.d $sp, $sp, -16
78
; CHECK-NEXT: vld $vr0, $a0, 0
89
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
9-
; CHECK-NEXT: st.w $a0, $a1, 4
10+
; CHECK-NEXT: st.w $a0, $sp, 4
1011
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
11-
; CHECK-NEXT: st.w $a0, $a1, 0
12+
; CHECK-NEXT: st.w $a0, $sp, 0
13+
; CHECK-NEXT: ld.d $a0, $sp, 0
14+
; CHECK-NEXT: st.d $a0, $a1, 0
15+
; CHECK-NEXT: addi.d $sp, $sp, 16
1216
; CHECK-NEXT: ret
1317
%a = load <2 x i64>, ptr %ptr
1418
%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 {
1923
define void @load_trunc_2i64_to_2i16(ptr %ptr, ptr %dst) nounwind {
2024
; CHECK-LABEL: load_trunc_2i64_to_2i16:
2125
; CHECK: # %bb.0:
26+
; CHECK-NEXT: addi.d $sp, $sp, -16
2227
; CHECK-NEXT: vld $vr0, $a0, 0
2328
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
24-
; CHECK-NEXT: st.h $a0, $a1, 2
29+
; CHECK-NEXT: st.h $a0, $sp, 2
2530
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
26-
; CHECK-NEXT: st.h $a0, $a1, 0
31+
; CHECK-NEXT: st.h $a0, $sp, 0
32+
; CHECK-NEXT: vld $vr0, $sp, 0
33+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
34+
; CHECK-NEXT: st.w $a0, $a1, 0
35+
; CHECK-NEXT: addi.d $sp, $sp, 16
2736
; CHECK-NEXT: ret
2837
%a = load <2 x i64>, ptr %ptr
2938
%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 {
3443
define void @load_trunc_2i64_to_2i8(ptr %ptr, ptr %dst) nounwind {
3544
; CHECK-LABEL: load_trunc_2i64_to_2i8:
3645
; CHECK: # %bb.0:
46+
; CHECK-NEXT: addi.d $sp, $sp, -16
3747
; CHECK-NEXT: vld $vr0, $a0, 0
3848
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
39-
; CHECK-NEXT: st.b $a0, $a1, 1
49+
; CHECK-NEXT: st.b $a0, $sp, 1
4050
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
41-
; CHECK-NEXT: st.b $a0, $a1, 0
51+
; CHECK-NEXT: st.b $a0, $sp, 0
52+
; CHECK-NEXT: vld $vr0, $sp, 0
53+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
54+
; CHECK-NEXT: st.h $a0, $a1, 0
55+
; CHECK-NEXT: addi.d $sp, $sp, 16
4256
; CHECK-NEXT: ret
4357
%a = load <2 x i64>, ptr %ptr
4458
%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 {
4963
define void @load_trunc_4i32_to_4i16(ptr %ptr, ptr %dst) nounwind {
5064
; CHECK-LABEL: load_trunc_4i32_to_4i16:
5165
; CHECK: # %bb.0:
66+
; CHECK-NEXT: addi.d $sp, $sp, -16
5267
; CHECK-NEXT: vld $vr0, $a0, 0
5368
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
54-
; CHECK-NEXT: st.h $a0, $a1, 6
69+
; CHECK-NEXT: st.h $a0, $sp, 6
5570
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 2
56-
; CHECK-NEXT: st.h $a0, $a1, 4
71+
; CHECK-NEXT: st.h $a0, $sp, 4
5772
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
58-
; CHECK-NEXT: st.h $a0, $a1, 2
73+
; CHECK-NEXT: st.h $a0, $sp, 2
5974
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
60-
; CHECK-NEXT: st.h $a0, $a1, 0
75+
; CHECK-NEXT: st.h $a0, $sp, 0
76+
; CHECK-NEXT: ld.d $a0, $sp, 0
77+
; CHECK-NEXT: st.d $a0, $a1, 0
78+
; CHECK-NEXT: addi.d $sp, $sp, 16
6179
; CHECK-NEXT: ret
6280
%a = load <4 x i32>, ptr %ptr
6381
%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 {
6886
define void @load_trunc_4i32_to_4i8(ptr %ptr, ptr %dst) nounwind {
6987
; CHECK-LABEL: load_trunc_4i32_to_4i8:
7088
; CHECK: # %bb.0:
89+
; CHECK-NEXT: addi.d $sp, $sp, -16
7190
; CHECK-NEXT: vld $vr0, $a0, 0
7291
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
73-
; CHECK-NEXT: st.b $a0, $a1, 3
92+
; CHECK-NEXT: st.b $a0, $sp, 3
7493
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 2
75-
; CHECK-NEXT: st.b $a0, $a1, 2
94+
; CHECK-NEXT: st.b $a0, $sp, 2
7695
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
77-
; CHECK-NEXT: st.b $a0, $a1, 1
96+
; CHECK-NEXT: st.b $a0, $sp, 1
97+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
98+
; CHECK-NEXT: st.b $a0, $sp, 0
99+
; CHECK-NEXT: vld $vr0, $sp, 0
78100
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
79-
; CHECK-NEXT: st.b $a0, $a1, 0
101+
; CHECK-NEXT: st.w $a0, $a1, 0
102+
; CHECK-NEXT: addi.d $sp, $sp, 16
80103
; CHECK-NEXT: ret
81104
%a = load <4 x i32>, ptr %ptr
82105
%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 {
87110
define void @load_trunc_8i16_to_8i8(ptr %ptr, ptr %dst) nounwind {
88111
; CHECK-LABEL: load_trunc_8i16_to_8i8:
89112
; CHECK: # %bb.0:
113+
; CHECK-NEXT: addi.d $sp, $sp, -16
90114
; CHECK-NEXT: vld $vr0, $a0, 0
91115
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 7
92-
; CHECK-NEXT: st.b $a0, $a1, 7
116+
; CHECK-NEXT: st.b $a0, $sp, 7
93117
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 6
94-
; CHECK-NEXT: st.b $a0, $a1, 6
118+
; CHECK-NEXT: st.b $a0, $sp, 6
95119
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 5
96-
; CHECK-NEXT: st.b $a0, $a1, 5
120+
; CHECK-NEXT: st.b $a0, $sp, 5
97121
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 4
98-
; CHECK-NEXT: st.b $a0, $a1, 4
122+
; CHECK-NEXT: st.b $a0, $sp, 4
99123
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 3
100-
; CHECK-NEXT: st.b $a0, $a1, 3
124+
; CHECK-NEXT: st.b $a0, $sp, 3
101125
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 2
102-
; CHECK-NEXT: st.b $a0, $a1, 2
126+
; CHECK-NEXT: st.b $a0, $sp, 2
103127
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
104-
; CHECK-NEXT: st.b $a0, $a1, 1
128+
; CHECK-NEXT: st.b $a0, $sp, 1
105129
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
106-
; CHECK-NEXT: st.b $a0, $a1, 0
130+
; CHECK-NEXT: st.b $a0, $sp, 0
131+
; CHECK-NEXT: ld.d $a0, $sp, 0
132+
; CHECK-NEXT: st.d $a0, $a1, 0
133+
; CHECK-NEXT: addi.d $sp, $sp, 16
107134
; CHECK-NEXT: ret
108135
%a = load <8 x i16>, ptr %ptr
109136
%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 {
114141
define void @load_trunc_2i32_to_2i16(ptr %ptr, ptr %dst) nounwind {
115142
; CHECK-LABEL: load_trunc_2i32_to_2i16:
116143
; CHECK: # %bb.0:
117-
; CHECK-NEXT: ld.w $a2, $a0, 4
118-
; CHECK-NEXT: ld.w $a0, $a0, 0
119-
; CHECK-NEXT: st.h $a2, $a1, 2
120-
; CHECK-NEXT: st.h $a0, $a1, 0
144+
; CHECK-NEXT: addi.d $sp, $sp, -16
145+
; CHECK-NEXT: ld.d $a0, $a0, 0
146+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
147+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
148+
; CHECK-NEXT: st.h $a0, $sp, 2
149+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
150+
; CHECK-NEXT: st.h $a0, $sp, 0
151+
; CHECK-NEXT: vld $vr0, $sp, 0
152+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
153+
; CHECK-NEXT: st.w $a0, $a1, 0
154+
; CHECK-NEXT: addi.d $sp, $sp, 16
121155
; CHECK-NEXT: ret
122156
%a = load <2 x i32>, ptr %ptr
123157
%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 {
128162
define void @load_trunc_2i32_to_2i8(ptr %ptr, ptr %dst) nounwind {
129163
; CHECK-LABEL: load_trunc_2i32_to_2i8:
130164
; CHECK: # %bb.0:
131-
; CHECK-NEXT: ld.w $a2, $a0, 4
132-
; CHECK-NEXT: ld.w $a0, $a0, 0
133-
; CHECK-NEXT: st.b $a2, $a1, 1
134-
; CHECK-NEXT: st.b $a0, $a1, 0
165+
; CHECK-NEXT: addi.d $sp, $sp, -16
166+
; CHECK-NEXT: ld.d $a0, $a0, 0
167+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
168+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
169+
; CHECK-NEXT: st.b $a0, $sp, 1
170+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
171+
; CHECK-NEXT: st.b $a0, $sp, 0
172+
; CHECK-NEXT: vld $vr0, $sp, 0
173+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
174+
; CHECK-NEXT: st.h $a0, $a1, 0
175+
; CHECK-NEXT: addi.d $sp, $sp, 16
135176
; CHECK-NEXT: ret
136177
%a = load <2 x i32>, ptr %ptr
137178
%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 {
142183
define void @load_trunc_4i16_to_4i8(ptr %ptr, ptr %dst) nounwind {
143184
; CHECK-LABEL: load_trunc_4i16_to_4i8:
144185
; CHECK: # %bb.0:
145-
; CHECK-NEXT: ld.h $a2, $a0, 6
146-
; CHECK-NEXT: ld.h $a3, $a0, 4
147-
; CHECK-NEXT: ld.h $a4, $a0, 2
148-
; CHECK-NEXT: ld.h $a0, $a0, 0
149-
; CHECK-NEXT: st.b $a2, $a1, 3
150-
; CHECK-NEXT: st.b $a3, $a1, 2
151-
; CHECK-NEXT: st.b $a4, $a1, 1
152-
; CHECK-NEXT: st.b $a0, $a1, 0
186+
; CHECK-NEXT: addi.d $sp, $sp, -16
187+
; CHECK-NEXT: ld.d $a0, $a0, 0
188+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
189+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 3
190+
; CHECK-NEXT: st.b $a0, $sp, 3
191+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 2
192+
; CHECK-NEXT: st.b $a0, $sp, 2
193+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
194+
; CHECK-NEXT: st.b $a0, $sp, 1
195+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
196+
; CHECK-NEXT: st.b $a0, $sp, 0
197+
; CHECK-NEXT: vld $vr0, $sp, 0
198+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
199+
; CHECK-NEXT: st.w $a0, $a1, 0
200+
; CHECK-NEXT: addi.d $sp, $sp, 16
153201
; CHECK-NEXT: ret
154202
%a = load <4 x i16>, ptr %ptr
155203
%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 {
160208
define void @load_trunc_2i16_to_2i8(ptr %ptr, ptr %dst) nounwind {
161209
; CHECK-LABEL: load_trunc_2i16_to_2i8:
162210
; CHECK: # %bb.0:
163-
; CHECK-NEXT: ld.h $a2, $a0, 2
164-
; CHECK-NEXT: ld.h $a0, $a0, 0
165-
; CHECK-NEXT: st.b $a2, $a1, 1
166-
; CHECK-NEXT: st.b $a0, $a1, 0
211+
; CHECK-NEXT: addi.d $sp, $sp, -16
212+
; CHECK-NEXT: ld.w $a0, $a0, 0
213+
; CHECK-NEXT: vinsgr2vr.w $vr0, $a0, 0
214+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
215+
; CHECK-NEXT: st.b $a0, $sp, 1
216+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
217+
; CHECK-NEXT: st.b $a0, $sp, 0
218+
; CHECK-NEXT: vld $vr0, $sp, 0
219+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
220+
; CHECK-NEXT: st.h $a0, $a1, 0
221+
; CHECK-NEXT: addi.d $sp, $sp, 16
167222
; CHECK-NEXT: ret
168223
%a = load <2 x i16>, ptr %ptr
169224
%trunc = trunc <2 x i16> %a to <2 x i8>

0 commit comments

Comments
 (0)