Skip to content

Commit 43ab422

Browse files
authored
[LoongArch] Pre-commit test for vector trunc (#131082)
1 parent bd748b3 commit 43ab422

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc --mtriple=loongarch64 --mattr=+lsx %s -o - | FileCheck %s
3+
4+
define void @load_trunc_2i64_to_2i32(ptr %ptr, ptr %dst) nounwind {
5+
; CHECK-LABEL: load_trunc_2i64_to_2i32:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: vld $vr0, $a0, 0
8+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
9+
; CHECK-NEXT: st.w $a0, $a1, 4
10+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
11+
; CHECK-NEXT: st.w $a0, $a1, 0
12+
; CHECK-NEXT: ret
13+
%a = load <2 x i64>, ptr %ptr
14+
%trunc = trunc <2 x i64> %a to <2 x i32>
15+
store <2 x i32> %trunc, ptr %dst
16+
ret void
17+
}
18+
19+
define void @load_trunc_2i64_to_2i16(ptr %ptr, ptr %dst) nounwind {
20+
; CHECK-LABEL: load_trunc_2i64_to_2i16:
21+
; CHECK: # %bb.0:
22+
; CHECK-NEXT: vld $vr0, $a0, 0
23+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
24+
; CHECK-NEXT: st.h $a0, $a1, 2
25+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
26+
; CHECK-NEXT: st.h $a0, $a1, 0
27+
; CHECK-NEXT: ret
28+
%a = load <2 x i64>, ptr %ptr
29+
%trunc = trunc <2 x i64> %a to <2 x i16>
30+
store <2 x i16> %trunc, ptr %dst
31+
ret void
32+
}
33+
34+
define void @load_trunc_2i64_to_2i8(ptr %ptr, ptr %dst) nounwind {
35+
; CHECK-LABEL: load_trunc_2i64_to_2i8:
36+
; CHECK: # %bb.0:
37+
; CHECK-NEXT: vld $vr0, $a0, 0
38+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1
39+
; CHECK-NEXT: st.b $a0, $a1, 1
40+
; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0
41+
; CHECK-NEXT: st.b $a0, $a1, 0
42+
; CHECK-NEXT: ret
43+
%a = load <2 x i64>, ptr %ptr
44+
%trunc = trunc <2 x i64> %a to <2 x i8>
45+
store <2 x i8> %trunc, ptr %dst
46+
ret void
47+
}
48+
49+
define void @load_trunc_4i32_to_4i16(ptr %ptr, ptr %dst) nounwind {
50+
; CHECK-LABEL: load_trunc_4i32_to_4i16:
51+
; CHECK: # %bb.0:
52+
; CHECK-NEXT: vld $vr0, $a0, 0
53+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
54+
; CHECK-NEXT: st.h $a0, $a1, 6
55+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 2
56+
; CHECK-NEXT: st.h $a0, $a1, 4
57+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
58+
; CHECK-NEXT: st.h $a0, $a1, 2
59+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
60+
; CHECK-NEXT: st.h $a0, $a1, 0
61+
; CHECK-NEXT: ret
62+
%a = load <4 x i32>, ptr %ptr
63+
%trunc = trunc <4 x i32> %a to <4 x i16>
64+
store <4 x i16> %trunc, ptr %dst
65+
ret void
66+
}
67+
68+
define void @load_trunc_4i32_to_4i8(ptr %ptr, ptr %dst) nounwind {
69+
; CHECK-LABEL: load_trunc_4i32_to_4i8:
70+
; CHECK: # %bb.0:
71+
; CHECK-NEXT: vld $vr0, $a0, 0
72+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 3
73+
; CHECK-NEXT: st.b $a0, $a1, 3
74+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 2
75+
; CHECK-NEXT: st.b $a0, $a1, 2
76+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 1
77+
; CHECK-NEXT: st.b $a0, $a1, 1
78+
; CHECK-NEXT: vpickve2gr.w $a0, $vr0, 0
79+
; CHECK-NEXT: st.b $a0, $a1, 0
80+
; CHECK-NEXT: ret
81+
%a = load <4 x i32>, ptr %ptr
82+
%trunc = trunc <4 x i32> %a to <4 x i8>
83+
store <4 x i8> %trunc, ptr %dst
84+
ret void
85+
}
86+
87+
define void @load_trunc_8i16_to_8i8(ptr %ptr, ptr %dst) nounwind {
88+
; CHECK-LABEL: load_trunc_8i16_to_8i8:
89+
; CHECK: # %bb.0:
90+
; CHECK-NEXT: vld $vr0, $a0, 0
91+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 7
92+
; CHECK-NEXT: st.b $a0, $a1, 7
93+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 6
94+
; CHECK-NEXT: st.b $a0, $a1, 6
95+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 5
96+
; CHECK-NEXT: st.b $a0, $a1, 5
97+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 4
98+
; CHECK-NEXT: st.b $a0, $a1, 4
99+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 3
100+
; CHECK-NEXT: st.b $a0, $a1, 3
101+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 2
102+
; CHECK-NEXT: st.b $a0, $a1, 2
103+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 1
104+
; CHECK-NEXT: st.b $a0, $a1, 1
105+
; CHECK-NEXT: vpickve2gr.h $a0, $vr0, 0
106+
; CHECK-NEXT: st.b $a0, $a1, 0
107+
; CHECK-NEXT: ret
108+
%a = load <8 x i16>, ptr %ptr
109+
%trunc = trunc <8 x i16> %a to <8 x i8>
110+
store <8 x i8> %trunc, ptr %dst
111+
ret void
112+
}
113+
114+
define void @load_trunc_2i32_to_2i16(ptr %ptr, ptr %dst) nounwind {
115+
; CHECK-LABEL: load_trunc_2i32_to_2i16:
116+
; 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
121+
; CHECK-NEXT: ret
122+
%a = load <2 x i32>, ptr %ptr
123+
%trunc = trunc <2 x i32> %a to <2 x i16>
124+
store <2 x i16> %trunc, ptr %dst
125+
ret void
126+
}
127+
128+
define void @load_trunc_2i32_to_2i8(ptr %ptr, ptr %dst) nounwind {
129+
; CHECK-LABEL: load_trunc_2i32_to_2i8:
130+
; 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
135+
; CHECK-NEXT: ret
136+
%a = load <2 x i32>, ptr %ptr
137+
%trunc = trunc <2 x i32> %a to <2 x i8>
138+
store <2 x i8> %trunc, ptr %dst
139+
ret void
140+
}
141+
142+
define void @load_trunc_4i16_to_4i8(ptr %ptr, ptr %dst) nounwind {
143+
; CHECK-LABEL: load_trunc_4i16_to_4i8:
144+
; 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
153+
; CHECK-NEXT: ret
154+
%a = load <4 x i16>, ptr %ptr
155+
%trunc = trunc <4 x i16> %a to <4 x i8>
156+
store <4 x i8> %trunc, ptr %dst
157+
ret void
158+
}
159+
160+
define void @load_trunc_2i16_to_2i8(ptr %ptr, ptr %dst) nounwind {
161+
; CHECK-LABEL: load_trunc_2i16_to_2i8:
162+
; 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
167+
; CHECK-NEXT: ret
168+
%a = load <2 x i16>, ptr %ptr
169+
%trunc = trunc <2 x i16> %a to <2 x i8>
170+
store <2 x i8> %trunc, ptr %dst
171+
ret void
172+
}
173+
174+

0 commit comments

Comments
 (0)