Skip to content

Commit 943a707

Browse files
authored
[LoongArch] Pre-commit test for vector sext, zext (#131742)
1 parent 0175dce commit 943a707

File tree

2 files changed

+522
-0
lines changed

2 files changed

+522
-0
lines changed
Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
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 | FileCheck %s
3+
4+
define void @shuffle_any_ext_2i8_to_2i64(ptr %ptr, ptr %dst) nounwind {
5+
; CHECK-LABEL: shuffle_any_ext_2i8_to_2i64:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: ld.h $a0, $a0, 0
8+
; CHECK-NEXT: pcalau12i $a2, %pc_hi20(.LCPI0_0)
9+
; CHECK-NEXT: vld $vr0, $a2, %pc_lo12(.LCPI0_0)
10+
; CHECK-NEXT: vinsgr2vr.h $vr1, $a0, 0
11+
; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr1, $vr0
12+
; CHECK-NEXT: vst $vr0, $a1, 0
13+
; CHECK-NEXT: ret
14+
%x = load <2 x i8>, ptr %ptr
15+
%y = shufflevector <2 x i8> %x, <2 x i8> poison, <16 x i32> <i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 1, i32 2, i32 2, i32 2,i32 2, i32 2, i32 2, i32 2>
16+
%r = bitcast <16 x i8> %y to <2 x i64>
17+
store <2 x i64> %r, ptr %dst
18+
ret void
19+
}
20+
21+
define void @shuffle_any_ext_2i16_to_2i64(ptr %ptr, ptr %dst) nounwind {
22+
; CHECK-LABEL: shuffle_any_ext_2i16_to_2i64:
23+
; CHECK: # %bb.0:
24+
; CHECK-NEXT: ld.w $a0, $a0, 0
25+
; CHECK-NEXT: pcalau12i $a2, %pc_hi20(.LCPI1_0)
26+
; CHECK-NEXT: vld $vr0, $a2, %pc_lo12(.LCPI1_0)
27+
; CHECK-NEXT: vinsgr2vr.w $vr1, $a0, 0
28+
; CHECK-NEXT: vshuf.h $vr0, $vr0, $vr1
29+
; CHECK-NEXT: vst $vr0, $a1, 0
30+
; CHECK-NEXT: ret
31+
%x = load <2 x i16>, ptr %ptr
32+
%y = shufflevector <2 x i16> %x, <2 x i16> poison, <8 x i32> <i32 0, i32 3, i32 3, i32 3, i32 1, i32 2, i32 2, i32 2>
33+
%r = bitcast <8 x i16> %y to <2 x i64>
34+
store <2 x i64> %r, ptr %dst
35+
ret void
36+
}
37+
38+
define void @shuffle_any_ext_2i32_to_2i64(ptr %ptr, ptr %dst) nounwind {
39+
; CHECK-LABEL: shuffle_any_ext_2i32_to_2i64:
40+
; CHECK: # %bb.0:
41+
; CHECK-NEXT: ld.d $a0, $a0, 0
42+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
43+
; CHECK-NEXT: vshuf4i.w $vr0, $vr0, 16
44+
; CHECK-NEXT: vst $vr0, $a1, 0
45+
; CHECK-NEXT: ret
46+
%x = load <2 x i32>, ptr %ptr
47+
%y = shufflevector <2 x i32> %x, <2 x i32> poison, <4 x i32> <i32 0, i32 3, i32 1, i32 2>
48+
%r = bitcast <4 x i32> %y to <2 x i64>
49+
store <2 x i64> %r, ptr %dst
50+
ret void
51+
}
52+
53+
define void @shuffle_any_ext_4i8_to_4i32(ptr %ptr, ptr %dst) nounwind {
54+
; CHECK-LABEL: shuffle_any_ext_4i8_to_4i32:
55+
; CHECK: # %bb.0:
56+
; CHECK-NEXT: ld.w $a0, $a0, 0
57+
; CHECK-NEXT: pcalau12i $a2, %pc_hi20(.LCPI3_0)
58+
; CHECK-NEXT: vld $vr0, $a2, %pc_lo12(.LCPI3_0)
59+
; CHECK-NEXT: vinsgr2vr.w $vr1, $a0, 0
60+
; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr1, $vr0
61+
; CHECK-NEXT: vst $vr0, $a1, 0
62+
; CHECK-NEXT: ret
63+
%x = load <4 x i8>, ptr %ptr
64+
%y = shufflevector <4 x i8> %x, <4 x i8> poison, <16 x i32> <i32 0, i32 7, i32 7, i32 7, i32 1, i32 6, i32 6, i32 6, i32 2, i32 5, i32 5, i32 5, i32 3, i32 4, i32 4, i32 4>
65+
%r = bitcast <16 x i8> %y to <4 x i32>
66+
store <4 x i32> %r, ptr %dst
67+
ret void
68+
}
69+
70+
define void @shuffle_any_ext_4i16_to_4i32(ptr %ptr, ptr %dst) nounwind {
71+
; CHECK-LABEL: shuffle_any_ext_4i16_to_4i32:
72+
; CHECK: # %bb.0:
73+
; CHECK-NEXT: ld.d $a0, $a0, 0
74+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
75+
; CHECK-NEXT: vilvl.h $vr0, $vr0, $vr0
76+
; CHECK-NEXT: vst $vr0, $a1, 0
77+
; CHECK-NEXT: ret
78+
%x = load <4 x i16>, ptr %ptr
79+
%y = shufflevector <4 x i16> %x, <4 x i16> poison, <8 x i32> <i32 0, i32 7, i32 1, i32 6, i32 2, i32 5, i32 3, i32 4>
80+
%r = bitcast <8 x i16> %y to <4 x i32>
81+
store <4 x i32> %r, ptr %dst
82+
ret void
83+
}
84+
85+
define void @shuffle_any_ext_8i8_to_8i16(ptr %ptr, ptr %dst) nounwind {
86+
; CHECK-LABEL: shuffle_any_ext_8i8_to_8i16:
87+
; CHECK: # %bb.0:
88+
; CHECK-NEXT: ld.d $a0, $a0, 0
89+
; CHECK-NEXT: vinsgr2vr.d $vr0, $a0, 0
90+
; CHECK-NEXT: vilvl.b $vr0, $vr0, $vr0
91+
; CHECK-NEXT: vst $vr0, $a1, 0
92+
; CHECK-NEXT: ret
93+
%x = load <8 x i8>, ptr %ptr
94+
%y = shufflevector <8 x i8> %x, <8 x i8> poison, <16 x i32> <i32 0, i32 15, i32 1, i32 14, i32 2, i32 13, i32 3, i32 12, i32 4, i32 11, i32 5, i32 10, i32 6, i32 9, i32 7, i32 8>
95+
%r = bitcast <16 x i8> %y to <8 x i16>
96+
store <8 x i16> %r, ptr %dst
97+
ret void
98+
}
99+
100+
define void @shuffle_any_ext_4i32_to_4i64(ptr %ptr, ptr %dst) nounwind {
101+
; CHECK-LABEL: shuffle_any_ext_4i32_to_4i64:
102+
; CHECK: # %bb.0:
103+
; CHECK-NEXT: vld $vr0, $a0, 0
104+
; CHECK-NEXT: vshuf4i.w $vr1, $vr0, 16
105+
; CHECK-NEXT: vshuf4i.w $vr0, $vr0, 50
106+
; CHECK-NEXT: vst $vr0, $a1, 16
107+
; CHECK-NEXT: vst $vr1, $a1, 0
108+
; CHECK-NEXT: ret
109+
%x = load <4 x i32>, ptr %ptr
110+
%y = shufflevector <4 x i32> %x, <4 x i32> poison, <8 x i32> <i32 0, i32 7, i32 1, i32 6, i32 2, i32 5, i32 3, i32 4>
111+
%r = bitcast <8 x i32> %y to <4 x i64>
112+
store <4 x i64> %r, ptr %dst
113+
ret void
114+
}
115+
116+
define void @shuffle_any_ext_8i16_to_8i32(ptr %ptr, ptr %dst) nounwind {
117+
; CHECK-LABEL: shuffle_any_ext_8i16_to_8i32:
118+
; CHECK: # %bb.0:
119+
; CHECK-NEXT: vld $vr0, $a0, 0
120+
; CHECK-NEXT: vilvl.h $vr1, $vr0, $vr0
121+
; CHECK-NEXT: vilvh.h $vr0, $vr0, $vr0
122+
; CHECK-NEXT: vst $vr0, $a1, 16
123+
; CHECK-NEXT: vst $vr1, $a1, 0
124+
; CHECK-NEXT: ret
125+
%x = load <8 x i16>, ptr %ptr
126+
%y = shufflevector <8 x i16> %x, <8 x i16> poison, <16 x i32> <i32 0, i32 15, i32 1, i32 15, i32 2, i32 13, i32 3, i32 12, i32 4, i32 11, i32 5, i32 10, i32 6, i32 9, i32 7, i32 8>
127+
%r = bitcast <16 x i16> %y to <8 x i32>
128+
store <8 x i32> %r, ptr %dst
129+
ret void
130+
}
131+
132+
define void @shuffle_any_ext_8i16_to_8i64(ptr %ptr, ptr %dst) nounwind {
133+
; CHECK-LABEL: shuffle_any_ext_8i16_to_8i64:
134+
; CHECK: # %bb.0:
135+
; CHECK-NEXT: vld $vr0, $a0, 0
136+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_0)
137+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI8_0)
138+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_1)
139+
; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI8_1)
140+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_2)
141+
; CHECK-NEXT: vld $vr3, $a0, %pc_lo12(.LCPI8_2)
142+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_3)
143+
; CHECK-NEXT: vld $vr4, $a0, %pc_lo12(.LCPI8_3)
144+
; CHECK-NEXT: vshuf.h $vr1, $vr0, $vr0
145+
; CHECK-NEXT: vshuf.h $vr2, $vr0, $vr0
146+
; CHECK-NEXT: vshuf.h $vr3, $vr0, $vr0
147+
; CHECK-NEXT: vshuf.h $vr4, $vr0, $vr0
148+
; CHECK-NEXT: vst $vr4, $a1, 48
149+
; CHECK-NEXT: vst $vr3, $a1, 32
150+
; CHECK-NEXT: vst $vr2, $a1, 16
151+
; CHECK-NEXT: vst $vr1, $a1, 0
152+
; CHECK-NEXT: ret
153+
%x = load <8 x i16>, ptr %ptr
154+
%y = shufflevector <8 x i16> %x, <8 x i16> poison, <32 x i32> <i32 0, i32 15, i32 15, i32 15, i32 1, i32 14, i32 14, i32 14, i32 2, i32 13, i32 13, i32 13, i32 3, i32 12, i32 12, i32 12, i32 4, i32 11, i32 11, i32 11, i32 5, i32 10, i32 10, i32 10, i32 6, i32 9, i32 9, i32 9, i32 7, i32 8, i32 8, i32 8>
155+
%r = bitcast <32 x i16> %y to <8 x i64>
156+
store <8 x i64> %r, ptr %dst
157+
ret void
158+
}
159+
160+
define void @shuffle_any_ext_16i8_to_16i16(ptr %ptr, ptr %dst) nounwind {
161+
; CHECK-LABEL: shuffle_any_ext_16i8_to_16i16:
162+
; CHECK: # %bb.0:
163+
; CHECK-NEXT: vld $vr0, $a0, 0
164+
; CHECK-NEXT: vilvl.b $vr1, $vr0, $vr0
165+
; CHECK-NEXT: vilvh.b $vr0, $vr0, $vr0
166+
; CHECK-NEXT: vst $vr0, $a1, 16
167+
; CHECK-NEXT: vst $vr1, $a1, 0
168+
; CHECK-NEXT: ret
169+
%x = load <16 x i8>, ptr %ptr
170+
%y = shufflevector <16 x i8> %x, <16 x i8> poison, <32 x i32> <i32 0, i32 31, i32 1, i32 31, i32 2, i32 29, i32 3, i32 28, i32 4, i32 27, i32 5, i32 26, i32 6, i32 25, i32 7, i32 24, i32 8, i32 23, i32 9, i32 22, i32 10, i32 21, i32 11, i32 20, i32 12, i32 19, i32 13, i32 18, i32 14, i32 17, i32 15, i32 16 >
171+
%r = bitcast <32 x i8> %y to <16 x i16>
172+
store <16 x i16> %r, ptr %dst
173+
ret void
174+
}
175+
176+
define void @shuffle_any_ext_16i8_to_16i32(ptr %ptr, ptr %dst) nounwind {
177+
; CHECK-LABEL: shuffle_any_ext_16i8_to_16i32:
178+
; CHECK: # %bb.0:
179+
; CHECK-NEXT: vld $vr0, $a0, 0
180+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_0)
181+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI10_0)
182+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_1)
183+
; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI10_1)
184+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_2)
185+
; CHECK-NEXT: vld $vr3, $a0, %pc_lo12(.LCPI10_2)
186+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_3)
187+
; CHECK-NEXT: vld $vr4, $a0, %pc_lo12(.LCPI10_3)
188+
; CHECK-NEXT: vshuf.b $vr1, $vr0, $vr0, $vr1
189+
; CHECK-NEXT: vshuf.b $vr2, $vr0, $vr0, $vr2
190+
; CHECK-NEXT: vshuf.b $vr3, $vr0, $vr0, $vr3
191+
; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr0, $vr4
192+
; CHECK-NEXT: vst $vr0, $a1, 48
193+
; CHECK-NEXT: vst $vr3, $a1, 32
194+
; CHECK-NEXT: vst $vr2, $a1, 16
195+
; CHECK-NEXT: vst $vr1, $a1, 0
196+
; CHECK-NEXT: ret
197+
%x = load <16 x i8>, ptr %ptr
198+
%y = shufflevector <16 x i8> %x, <16 x i8> poison, <64 x i32> <i32 0, i32 31, i32 31, i32 31, i32 1, i32 30, i32 30, i32 30, i32 2, i32 29, i32 29, i32 29, i32 3, i32 28, i32 28, i32 28, i32 4, i32 27, i32 27, i32 27, i32 5, i32 26, i32 26, i32 26, i32 6, i32 25, i32 25, i32 25, i32 7, i32 24, i32 24, i32 24, i32 8, i32 23, i32 23, i32 23, i32 9, i32 22, i32 22, i32 22, i32 10, i32 21, i32 21, i32 21, i32 11, i32 20, i32 20, i32 20, i32 12, i32 19, i32 19, i32 19, i32 13, i32 18, i32 18, i32 18, i32 14, i32 17, i32 17, i32 17, i32 15, i32 16, i32 16, i32 16>
199+
%r = bitcast <64 x i8> %y to <16 x i32>
200+
store <16 x i32> %r, ptr %dst
201+
ret void
202+
}
203+
204+
define void @shuffle_any_ext_16i8_to_16i64(ptr %ptr, ptr %dst) nounwind {
205+
; CHECK-LABEL: shuffle_any_ext_16i8_to_16i64:
206+
; CHECK: # %bb.0:
207+
; CHECK-NEXT: vld $vr0, $a0, 0
208+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_0)
209+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI11_0)
210+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_1)
211+
; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI11_1)
212+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_2)
213+
; CHECK-NEXT: vld $vr3, $a0, %pc_lo12(.LCPI11_2)
214+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_3)
215+
; CHECK-NEXT: vld $vr4, $a0, %pc_lo12(.LCPI11_3)
216+
; CHECK-NEXT: vshuf.b $vr1, $vr0, $vr0, $vr1
217+
; CHECK-NEXT: vshuf.b $vr2, $vr0, $vr0, $vr2
218+
; CHECK-NEXT: vshuf.b $vr3, $vr0, $vr0, $vr3
219+
; CHECK-NEXT: vshuf.b $vr4, $vr0, $vr0, $vr4
220+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_4)
221+
; CHECK-NEXT: vld $vr5, $a0, %pc_lo12(.LCPI11_4)
222+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_5)
223+
; CHECK-NEXT: vld $vr6, $a0, %pc_lo12(.LCPI11_5)
224+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_6)
225+
; CHECK-NEXT: vld $vr7, $a0, %pc_lo12(.LCPI11_6)
226+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_7)
227+
; CHECK-NEXT: vld $vr8, $a0, %pc_lo12(.LCPI11_7)
228+
; CHECK-NEXT: vshuf.b $vr5, $vr0, $vr0, $vr5
229+
; CHECK-NEXT: vshuf.b $vr6, $vr0, $vr0, $vr6
230+
; CHECK-NEXT: vshuf.b $vr7, $vr0, $vr0, $vr7
231+
; CHECK-NEXT: vshuf.b $vr0, $vr0, $vr0, $vr8
232+
; CHECK-NEXT: vst $vr0, $a1, 112
233+
; CHECK-NEXT: vst $vr7, $a1, 96
234+
; CHECK-NEXT: vst $vr6, $a1, 80
235+
; CHECK-NEXT: vst $vr5, $a1, 64
236+
; CHECK-NEXT: vst $vr4, $a1, 48
237+
; CHECK-NEXT: vst $vr3, $a1, 32
238+
; CHECK-NEXT: vst $vr2, $a1, 16
239+
; CHECK-NEXT: vst $vr1, $a1, 0
240+
; CHECK-NEXT: ret
241+
%x = load <16 x i8>, ptr %ptr
242+
%y = shufflevector <16 x i8> %x, <16 x i8> poison, <128 x i32> <i32 0, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 1, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 30, i32 2, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 29, i32 3, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 28, i32 4, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 27, i32 5, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 26, i32 6, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 7, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 8, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 9, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 22, i32 10, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 21, i32 11, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 20, i32 12, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 19, i32 13, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 18, i32 14, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 15, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
243+
%r = bitcast <128 x i8> %y to <16 x i64>
244+
store <16 x i64> %r, ptr %dst
245+
ret void
246+
}

0 commit comments

Comments
 (0)