Skip to content

Commit a6d3662

Browse files
authored
[LoongArch] Pre-commit tests for vector shift (#132702)
1 parent da7f156 commit a6d3662

File tree

2 files changed

+919
-0
lines changed

2 files changed

+919
-0
lines changed
Lines changed: 274 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,274 @@
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 <16 x i8> @shuffle_to_vslli_h_8(<16 x i8> %a) nounwind {
5+
; CHECK-LABEL: shuffle_to_vslli_h_8:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI0_0)
8+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI0_0)
9+
; CHECK-NEXT: vrepli.b $vr2, 0
10+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
11+
; CHECK-NEXT: ret
12+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 0, i32 16, i32 2, i32 16, i32 4, i32 16, i32 6, i32 16, i32 8, i32 16, i32 10, i32 16, i32 12, i32 16, i32 14>
13+
ret <16 x i8> %shuffle
14+
}
15+
16+
define <16 x i8> @shuffle_to_vsrli_h_8(<16 x i8> %a) nounwind {
17+
; CHECK-LABEL: shuffle_to_vsrli_h_8:
18+
; CHECK: # %bb.0:
19+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI1_0)
20+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI1_0)
21+
; CHECK-NEXT: vrepli.b $vr2, 0
22+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
23+
; CHECK-NEXT: ret
24+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 1, i32 16, i32 3, i32 16, i32 5, i32 16, i32 7, i32 16, i32 9, i32 16, i32 11, i32 16, i32 13, i32 16, i32 15, i32 16>
25+
ret <16 x i8> %shuffle
26+
}
27+
28+
define <16 x i8> @shuffle_to_vslli_w_8(<16 x i8> %a) nounwind {
29+
; CHECK-LABEL: shuffle_to_vslli_w_8:
30+
; CHECK: # %bb.0:
31+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
32+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI2_0)
33+
; CHECK-NEXT: vrepli.b $vr2, 0
34+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
35+
; CHECK-NEXT: ret
36+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 0, i32 1, i32 2, i32 16, i32 4, i32 5, i32 6, i32 16, i32 8, i32 9, i32 10, i32 16, i32 12, i32 13, i32 14>
37+
ret <16 x i8> %shuffle
38+
}
39+
40+
define <16 x i8> @shuffle_to_vsrli_w_8(<16 x i8> %a) nounwind {
41+
; CHECK-LABEL: shuffle_to_vsrli_w_8:
42+
; CHECK: # %bb.0:
43+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)
44+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI3_0)
45+
; CHECK-NEXT: vrepli.b $vr2, 0
46+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
47+
; CHECK-NEXT: ret
48+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 1, i32 2, i32 3, i32 16, i32 5, i32 6, i32 7, i32 16, i32 9, i32 10, i32 11, i32 16, i32 13, i32 14, i32 15, i32 16>
49+
ret <16 x i8> %shuffle
50+
}
51+
52+
define <8 x i16> @shuffle_to_vslli_w_16(<8 x i16> %a) nounwind {
53+
; CHECK-LABEL: shuffle_to_vslli_w_16:
54+
; CHECK: # %bb.0:
55+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)
56+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI4_0)
57+
; CHECK-NEXT: vrepli.b $vr2, 0
58+
; CHECK-NEXT: vshuf.h $vr1, $vr2, $vr0
59+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
60+
; CHECK-NEXT: ret
61+
%shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 0, i32 8, i32 2, i32 8, i32 4, i32 8, i32 6>
62+
ret <8 x i16> %shuffle
63+
}
64+
65+
define <8 x i16> @shuffle_to_vsrli_w_16(<8 x i16> %a) nounwind {
66+
; CHECK-LABEL: shuffle_to_vsrli_w_16:
67+
; CHECK: # %bb.0:
68+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)
69+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI5_0)
70+
; CHECK-NEXT: vrepli.b $vr2, 0
71+
; CHECK-NEXT: vshuf.h $vr1, $vr2, $vr0
72+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
73+
; CHECK-NEXT: ret
74+
%shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 1, i32 8, i32 3, i32 8, i32 5, i32 8, i32 7, i32 8>
75+
ret <8 x i16> %shuffle
76+
}
77+
78+
define <16 x i8> @shuffle_to_vslli_w_24(<16 x i8> %a) nounwind {
79+
; CHECK-LABEL: shuffle_to_vslli_w_24:
80+
; CHECK: # %bb.0:
81+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI6_0)
82+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI6_0)
83+
; CHECK-NEXT: vrepli.b $vr2, 0
84+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
85+
; CHECK-NEXT: ret
86+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 16, i32 16, i32 0, i32 16, i32 16, i32 16, i32 4, i32 16, i32 16, i32 16, i32 8, i32 16, i32 16, i32 16, i32 12>
87+
ret <16 x i8> %shuffle
88+
}
89+
90+
define <16 x i8> @shuffle_to_vsrli_w_24(<16 x i8> %a) nounwind {
91+
; CHECK-LABEL: shuffle_to_vsrli_w_24:
92+
; CHECK: # %bb.0:
93+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI7_0)
94+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI7_0)
95+
; CHECK-NEXT: vrepli.b $vr2, 0
96+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
97+
; CHECK-NEXT: ret
98+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 3, i32 16, i32 16, i32 16, i32 7, i32 16, i32 16, i32 16, i32 11, i32 16, i32 16, i32 16, i32 15, i32 16, i32 16, i32 16>
99+
ret <16 x i8> %shuffle
100+
}
101+
102+
define <16 x i8> @shuffle_to_vslli_d_8(<16 x i8> %a) nounwind {
103+
; CHECK-LABEL: shuffle_to_vslli_d_8:
104+
; CHECK: # %bb.0:
105+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_0)
106+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI8_0)
107+
; CHECK-NEXT: vrepli.b $vr2, 0
108+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
109+
; CHECK-NEXT: ret
110+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14>
111+
ret <16 x i8> %shuffle
112+
}
113+
114+
define <16 x i8> @shuffle_to_vsrli_d_8(<16 x i8> %a) nounwind {
115+
; CHECK-LABEL: shuffle_to_vsrli_d_8:
116+
; CHECK: # %bb.0:
117+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI9_0)
118+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI9_0)
119+
; CHECK-NEXT: vrepli.b $vr2, 0
120+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
121+
; CHECK-NEXT: ret
122+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>
123+
ret <16 x i8> %shuffle
124+
}
125+
126+
define <8 x i16> @shuffle_to_vslli_d_16(<8 x i16> %a) nounwind {
127+
; CHECK-LABEL: shuffle_to_vslli_d_16:
128+
; CHECK: # %bb.0:
129+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_0)
130+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI10_0)
131+
; CHECK-NEXT: vrepli.b $vr2, 0
132+
; CHECK-NEXT: vshuf.h $vr1, $vr2, $vr0
133+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
134+
; CHECK-NEXT: ret
135+
%shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 0, i32 1, i32 2, i32 8, i32 4, i32 5, i32 6>
136+
ret <8 x i16> %shuffle
137+
}
138+
139+
define <8 x i16> @shuffle_to_vsrli_d_16(<8 x i16> %a) nounwind {
140+
; CHECK-LABEL: shuffle_to_vsrli_d_16:
141+
; CHECK: # %bb.0:
142+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_0)
143+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI11_0)
144+
; CHECK-NEXT: vrepli.b $vr2, 0
145+
; CHECK-NEXT: vshuf.h $vr1, $vr2, $vr0
146+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
147+
; CHECK-NEXT: ret
148+
%shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 1, i32 2, i32 3, i32 8, i32 5, i32 6, i32 7, i32 8>
149+
ret <8 x i16> %shuffle
150+
}
151+
152+
define <16 x i8> @shuffle_to_vslli_d_24(<16 x i8> %a) nounwind {
153+
; CHECK-LABEL: shuffle_to_vslli_d_24:
154+
; CHECK: # %bb.0:
155+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI12_0)
156+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI12_0)
157+
; CHECK-NEXT: vrepli.b $vr2, 0
158+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
159+
; CHECK-NEXT: ret
160+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 16, i32 16, i32 0, i32 1, i32 2, i32 3, i32 4, i32 16, i32 16, i32 16, i32 8, i32 9, i32 10, i32 11, i32 12>
161+
ret <16 x i8> %shuffle
162+
}
163+
164+
define <16 x i8> @shuffle_to_vsrli_d_24(<16 x i8> %a) nounwind {
165+
; CHECK-LABEL: shuffle_to_vsrli_d_24:
166+
; CHECK: # %bb.0:
167+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI13_0)
168+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI13_0)
169+
; CHECK-NEXT: vrepli.b $vr2, 0
170+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
171+
; CHECK-NEXT: ret
172+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 16, i32 16, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 16, i32 16>
173+
ret <16 x i8> %shuffle
174+
}
175+
176+
define <4 x i32> @shuffle_to_vslli_d_32(<4 x i32> %a) nounwind {
177+
; CHECK-LABEL: shuffle_to_vslli_d_32:
178+
; CHECK: # %bb.0:
179+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI14_0)
180+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI14_0)
181+
; CHECK-NEXT: vrepli.b $vr2, 0
182+
; CHECK-NEXT: vshuf.w $vr1, $vr2, $vr0
183+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
184+
; CHECK-NEXT: ret
185+
%shuffle = shufflevector <4 x i32> %a, <4 x i32> zeroinitializer, <4 x i32> <i32 4, i32 0, i32 4, i32 poison>
186+
ret <4 x i32> %shuffle
187+
}
188+
189+
define <4 x i32> @shuffle_to_vsrli_d_32(<4 x i32> %a) nounwind {
190+
; CHECK-LABEL: shuffle_to_vsrli_d_32:
191+
; CHECK: # %bb.0:
192+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI15_0)
193+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI15_0)
194+
; CHECK-NEXT: vrepli.b $vr2, 0
195+
; CHECK-NEXT: vshuf.w $vr1, $vr2, $vr0
196+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
197+
; CHECK-NEXT: ret
198+
%shuffle = shufflevector <4 x i32> %a, <4 x i32> zeroinitializer, <4 x i32> <i32 1, i32 4, i32 3, i32 4>
199+
ret <4 x i32> %shuffle
200+
}
201+
202+
define <16 x i8> @shuffle_to_vslli_d_40(<16 x i8> %a) nounwind {
203+
; CHECK-LABEL: shuffle_to_vslli_d_40:
204+
; CHECK: # %bb.0:
205+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI16_0)
206+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI16_0)
207+
; CHECK-NEXT: vrepli.b $vr2, 0
208+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
209+
; CHECK-NEXT: ret
210+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 16, i32 16, i32 16, i32 16, i32 0, i32 1, i32 2, i32 16, i32 16, i32 16, i32 16, i32 16, i32 8, i32 9, i32 10>
211+
ret <16 x i8> %shuffle
212+
}
213+
214+
define <16 x i8> @shuffle_to_vsrli_d_40(<16 x i8> %a) nounwind {
215+
; CHECK-LABEL: shuffle_to_vsrli_d_40:
216+
; CHECK: # %bb.0:
217+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI17_0)
218+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI17_0)
219+
; CHECK-NEXT: vrepli.b $vr2, 0
220+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
221+
; CHECK-NEXT: ret
222+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 5, i32 6, i32 7, i32 16, i32 16, i32 16, i32 16, i32 16, i32 13, i32 14, i32 15, i32 16, i32 16, i32 16, i32 16, i32 16>
223+
ret <16 x i8> %shuffle
224+
}
225+
226+
define <8 x i16> @shuffle_to_vslli_d_48(<8 x i16> %a) nounwind {
227+
; CHECK-LABEL: shuffle_to_vslli_d_48:
228+
; CHECK: # %bb.0:
229+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI18_0)
230+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI18_0)
231+
; CHECK-NEXT: vrepli.b $vr2, 0
232+
; CHECK-NEXT: vshuf.h $vr1, $vr2, $vr0
233+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
234+
; CHECK-NEXT: ret
235+
%shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 8, i32 8, i32 8, i32 0, i32 8, i32 8, i32 8, i32 4>
236+
ret <8 x i16> %shuffle
237+
}
238+
239+
define <8 x i16> @shuffle_to_vsrli_d_48(<8 x i16> %a) nounwind {
240+
; CHECK-LABEL: shuffle_to_vsrli_d_48:
241+
; CHECK: # %bb.0:
242+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI19_0)
243+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI19_0)
244+
; CHECK-NEXT: vrepli.b $vr2, 0
245+
; CHECK-NEXT: vshuf.h $vr1, $vr2, $vr0
246+
; CHECK-NEXT: vori.b $vr0, $vr1, 0
247+
; CHECK-NEXT: ret
248+
%shuffle = shufflevector <8 x i16> %a, <8 x i16> zeroinitializer, <8 x i32><i32 3, i32 8, i32 8, i32 8, i32 7, i32 8, i32 8, i32 8>
249+
ret <8 x i16> %shuffle
250+
}
251+
252+
define <16 x i8> @shuffle_to_vslli_d_56(<16 x i8> %a) nounwind {
253+
; CHECK-LABEL: shuffle_to_vslli_d_56:
254+
; CHECK: # %bb.0:
255+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI20_0)
256+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI20_0)
257+
; CHECK-NEXT: vrepli.b $vr2, 0
258+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
259+
; CHECK-NEXT: ret
260+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 8>
261+
ret <16 x i8> %shuffle
262+
}
263+
264+
define <16 x i8> @shuffle_to_vsrli_d_56(<16 x i8> %a) nounwind {
265+
; CHECK-LABEL: shuffle_to_vsrli_d_56:
266+
; CHECK: # %bb.0:
267+
; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI21_0)
268+
; CHECK-NEXT: vld $vr1, $a0, %pc_lo12(.LCPI21_0)
269+
; CHECK-NEXT: vrepli.b $vr2, 0
270+
; CHECK-NEXT: vshuf.b $vr0, $vr2, $vr0, $vr1
271+
; CHECK-NEXT: ret
272+
%shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32><i32 7, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 15, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
273+
ret <16 x i8> %shuffle
274+
}

0 commit comments

Comments
 (0)