Skip to content

Commit 5b7b696

Browse files
zhaoqi5Debadri Basak
authored andcommitted
[LoongArch][NFC] Pre-commit tests for vector type average (llvm#161076)
1 parent e3acab3 commit 5b7b696

File tree

2 files changed

+614
-0
lines changed
  • llvm/test/CodeGen/LoongArch

2 files changed

+614
-0
lines changed
Lines changed: 307 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
4+
5+
define void @xvavg_b(ptr %res, ptr %a, ptr %b) nounwind {
6+
; CHECK-LABEL: xvavg_b:
7+
; CHECK: # %bb.0: # %entry
8+
; CHECK-NEXT: xvld $xr0, $a1, 0
9+
; CHECK-NEXT: xvld $xr1, $a2, 0
10+
; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1
11+
; CHECK-NEXT: xvsrai.b $xr0, $xr0, 1
12+
; CHECK-NEXT: xvst $xr0, $a0, 0
13+
; CHECK-NEXT: ret
14+
entry:
15+
%va = load <32 x i8>, ptr %a
16+
%vb = load <32 x i8>, ptr %b
17+
%add = add <32 x i8> %va, %vb
18+
%shr = ashr <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
19+
store <32 x i8> %shr, ptr %res
20+
ret void
21+
}
22+
23+
define void @xvavg_h(ptr %res, ptr %a, ptr %b) nounwind {
24+
; CHECK-LABEL: xvavg_h:
25+
; CHECK: # %bb.0: # %entry
26+
; CHECK-NEXT: xvld $xr0, $a1, 0
27+
; CHECK-NEXT: xvld $xr1, $a2, 0
28+
; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1
29+
; CHECK-NEXT: xvsrai.h $xr0, $xr0, 1
30+
; CHECK-NEXT: xvst $xr0, $a0, 0
31+
; CHECK-NEXT: ret
32+
entry:
33+
%va = load <16 x i16>, ptr %a
34+
%vb = load <16 x i16>, ptr %b
35+
%add = add <16 x i16> %va, %vb
36+
%shr = ashr <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
37+
store <16 x i16> %shr, ptr %res
38+
ret void
39+
}
40+
41+
define void @xvavg_w(ptr %res, ptr %a, ptr %b) nounwind {
42+
; CHECK-LABEL: xvavg_w:
43+
; CHECK: # %bb.0: # %entry
44+
; CHECK-NEXT: xvld $xr0, $a1, 0
45+
; CHECK-NEXT: xvld $xr1, $a2, 0
46+
; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1
47+
; CHECK-NEXT: xvsrai.w $xr0, $xr0, 1
48+
; CHECK-NEXT: xvst $xr0, $a0, 0
49+
; CHECK-NEXT: ret
50+
entry:
51+
%va = load <8 x i32>, ptr %a
52+
%vb = load <8 x i32>, ptr %b
53+
%add = add <8 x i32> %va, %vb
54+
%shr = ashr <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
55+
store <8 x i32> %shr, ptr %res
56+
ret void
57+
}
58+
59+
define void @xvavg_d(ptr %res, ptr %a, ptr %b) nounwind {
60+
; CHECK-LABEL: xvavg_d:
61+
; CHECK: # %bb.0: # %entry
62+
; CHECK-NEXT: xvld $xr0, $a1, 0
63+
; CHECK-NEXT: xvld $xr1, $a2, 0
64+
; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1
65+
; CHECK-NEXT: xvsrai.d $xr0, $xr0, 1
66+
; CHECK-NEXT: xvst $xr0, $a0, 0
67+
; CHECK-NEXT: ret
68+
entry:
69+
%va = load <4 x i64>, ptr %a
70+
%vb = load <4 x i64>, ptr %b
71+
%add = add <4 x i64> %va, %vb
72+
%shr = ashr <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
73+
store <4 x i64> %shr, ptr %res
74+
ret void
75+
}
76+
77+
define void @xvavg_bu(ptr %res, ptr %a, ptr %b) nounwind {
78+
; CHECK-LABEL: xvavg_bu:
79+
; CHECK: # %bb.0: # %entry
80+
; CHECK-NEXT: xvld $xr0, $a1, 0
81+
; CHECK-NEXT: xvld $xr1, $a2, 0
82+
; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1
83+
; CHECK-NEXT: xvsrli.b $xr0, $xr0, 1
84+
; CHECK-NEXT: xvst $xr0, $a0, 0
85+
; CHECK-NEXT: ret
86+
entry:
87+
%va = load <32 x i8>, ptr %a
88+
%vb = load <32 x i8>, ptr %b
89+
%add = add <32 x i8> %va, %vb
90+
%shr = lshr <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
91+
store <32 x i8> %shr, ptr %res
92+
ret void
93+
}
94+
95+
define void @xvavg_hu(ptr %res, ptr %a, ptr %b) nounwind {
96+
; CHECK-LABEL: xvavg_hu:
97+
; CHECK: # %bb.0: # %entry
98+
; CHECK-NEXT: xvld $xr0, $a1, 0
99+
; CHECK-NEXT: xvld $xr1, $a2, 0
100+
; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1
101+
; CHECK-NEXT: xvsrli.h $xr0, $xr0, 1
102+
; CHECK-NEXT: xvst $xr0, $a0, 0
103+
; CHECK-NEXT: ret
104+
entry:
105+
%va = load <16 x i16>, ptr %a
106+
%vb = load <16 x i16>, ptr %b
107+
%add = add <16 x i16> %va, %vb
108+
%shr = lshr <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
109+
store <16 x i16> %shr, ptr %res
110+
ret void
111+
}
112+
113+
define void @xvavg_wu(ptr %res, ptr %a, ptr %b) nounwind {
114+
; CHECK-LABEL: xvavg_wu:
115+
; CHECK: # %bb.0: # %entry
116+
; CHECK-NEXT: xvld $xr0, $a1, 0
117+
; CHECK-NEXT: xvld $xr1, $a2, 0
118+
; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1
119+
; CHECK-NEXT: xvsrli.w $xr0, $xr0, 1
120+
; CHECK-NEXT: xvst $xr0, $a0, 0
121+
; CHECK-NEXT: ret
122+
entry:
123+
%va = load <8 x i32>, ptr %a
124+
%vb = load <8 x i32>, ptr %b
125+
%add = add <8 x i32> %va, %vb
126+
%shr = lshr <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
127+
store <8 x i32> %shr, ptr %res
128+
ret void
129+
}
130+
131+
define void @xvavg_du(ptr %res, ptr %a, ptr %b) nounwind {
132+
; CHECK-LABEL: xvavg_du:
133+
; CHECK: # %bb.0: # %entry
134+
; CHECK-NEXT: xvld $xr0, $a1, 0
135+
; CHECK-NEXT: xvld $xr1, $a2, 0
136+
; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1
137+
; CHECK-NEXT: xvsrli.d $xr0, $xr0, 1
138+
; CHECK-NEXT: xvst $xr0, $a0, 0
139+
; CHECK-NEXT: ret
140+
entry:
141+
%va = load <4 x i64>, ptr %a
142+
%vb = load <4 x i64>, ptr %b
143+
%add = add <4 x i64> %va, %vb
144+
%shr = lshr <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
145+
store <4 x i64> %shr, ptr %res
146+
ret void
147+
}
148+
149+
define void @xvavgr_b(ptr %res, ptr %a, ptr %b) nounwind {
150+
; CHECK-LABEL: xvavgr_b:
151+
; CHECK: # %bb.0: # %entry
152+
; CHECK-NEXT: xvld $xr0, $a1, 0
153+
; CHECK-NEXT: xvld $xr1, $a2, 0
154+
; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1
155+
; CHECK-NEXT: xvaddi.bu $xr0, $xr0, 1
156+
; CHECK-NEXT: xvsrai.b $xr0, $xr0, 1
157+
; CHECK-NEXT: xvst $xr0, $a0, 0
158+
; CHECK-NEXT: ret
159+
entry:
160+
%va = load <32 x i8>, ptr %a
161+
%vb = load <32 x i8>, ptr %b
162+
%add = add <32 x i8> %va, %vb
163+
%add1 = add <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
164+
%shr = ashr <32 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
165+
store <32 x i8> %shr, ptr %res
166+
ret void
167+
}
168+
169+
define void @xvavgr_h(ptr %res, ptr %a, ptr %b) nounwind {
170+
; CHECK-LABEL: xvavgr_h:
171+
; CHECK: # %bb.0: # %entry
172+
; CHECK-NEXT: xvld $xr0, $a1, 0
173+
; CHECK-NEXT: xvld $xr1, $a2, 0
174+
; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1
175+
; CHECK-NEXT: xvaddi.hu $xr0, $xr0, 1
176+
; CHECK-NEXT: xvsrai.h $xr0, $xr0, 1
177+
; CHECK-NEXT: xvst $xr0, $a0, 0
178+
; CHECK-NEXT: ret
179+
entry:
180+
%va = load <16 x i16>, ptr %a
181+
%vb = load <16 x i16>, ptr %b
182+
%add = add <16 x i16> %va, %vb
183+
%add1 = add <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
184+
%shr = ashr <16 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
185+
store <16 x i16> %shr, ptr %res
186+
ret void
187+
}
188+
189+
define void @xvavgr_w(ptr %res, ptr %a, ptr %b) nounwind {
190+
; CHECK-LABEL: xvavgr_w:
191+
; CHECK: # %bb.0: # %entry
192+
; CHECK-NEXT: xvld $xr0, $a1, 0
193+
; CHECK-NEXT: xvld $xr1, $a2, 0
194+
; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1
195+
; CHECK-NEXT: xvaddi.wu $xr0, $xr0, 1
196+
; CHECK-NEXT: xvsrai.w $xr0, $xr0, 1
197+
; CHECK-NEXT: xvst $xr0, $a0, 0
198+
; CHECK-NEXT: ret
199+
entry:
200+
%va = load <8 x i32>, ptr %a
201+
%vb = load <8 x i32>, ptr %b
202+
%add = add <8 x i32> %va, %vb
203+
%add1 = add <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
204+
%shr = ashr <8 x i32> %add1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
205+
store <8 x i32> %shr, ptr %res
206+
ret void
207+
}
208+
209+
define void @xvavgr_d(ptr %res, ptr %a, ptr %b) nounwind {
210+
; CHECK-LABEL: xvavgr_d:
211+
; CHECK: # %bb.0: # %entry
212+
; CHECK-NEXT: xvld $xr0, $a1, 0
213+
; CHECK-NEXT: xvld $xr1, $a2, 0
214+
; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1
215+
; CHECK-NEXT: xvaddi.du $xr0, $xr0, 1
216+
; CHECK-NEXT: xvsrai.d $xr0, $xr0, 1
217+
; CHECK-NEXT: xvst $xr0, $a0, 0
218+
; CHECK-NEXT: ret
219+
entry:
220+
%va = load <4 x i64>, ptr %a
221+
%vb = load <4 x i64>, ptr %b
222+
%add = add <4 x i64> %va, %vb
223+
%add1 = add <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
224+
%shr = ashr <4 x i64> %add1, <i64 1, i64 1, i64 1, i64 1>
225+
store <4 x i64> %shr, ptr %res
226+
ret void
227+
}
228+
229+
define void @xvavgr_bu(ptr %res, ptr %a, ptr %b) nounwind {
230+
; CHECK-LABEL: xvavgr_bu:
231+
; CHECK: # %bb.0: # %entry
232+
; CHECK-NEXT: xvld $xr0, $a1, 0
233+
; CHECK-NEXT: xvld $xr1, $a2, 0
234+
; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1
235+
; CHECK-NEXT: xvaddi.bu $xr0, $xr0, 1
236+
; CHECK-NEXT: xvsrli.b $xr0, $xr0, 1
237+
; CHECK-NEXT: xvst $xr0, $a0, 0
238+
; CHECK-NEXT: ret
239+
entry:
240+
%va = load <32 x i8>, ptr %a
241+
%vb = load <32 x i8>, ptr %b
242+
%add = add <32 x i8> %va, %vb
243+
%add1 = add <32 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
244+
%shr = lshr <32 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
245+
store <32 x i8> %shr, ptr %res
246+
ret void
247+
}
248+
249+
define void @xvavgr_hu(ptr %res, ptr %a, ptr %b) nounwind {
250+
; CHECK-LABEL: xvavgr_hu:
251+
; CHECK: # %bb.0: # %entry
252+
; CHECK-NEXT: xvld $xr0, $a1, 0
253+
; CHECK-NEXT: xvld $xr1, $a2, 0
254+
; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1
255+
; CHECK-NEXT: xvaddi.hu $xr0, $xr0, 1
256+
; CHECK-NEXT: xvsrli.h $xr0, $xr0, 1
257+
; CHECK-NEXT: xvst $xr0, $a0, 0
258+
; CHECK-NEXT: ret
259+
entry:
260+
%va = load <16 x i16>, ptr %a
261+
%vb = load <16 x i16>, ptr %b
262+
%add = add <16 x i16> %va, %vb
263+
%add1 = add <16 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
264+
%shr = lshr <16 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
265+
store <16 x i16> %shr, ptr %res
266+
ret void
267+
}
268+
269+
define void @xvavgr_wu(ptr %res, ptr %a, ptr %b) nounwind {
270+
; CHECK-LABEL: xvavgr_wu:
271+
; CHECK: # %bb.0: # %entry
272+
; CHECK-NEXT: xvld $xr0, $a1, 0
273+
; CHECK-NEXT: xvld $xr1, $a2, 0
274+
; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1
275+
; CHECK-NEXT: xvaddi.wu $xr0, $xr0, 1
276+
; CHECK-NEXT: xvsrli.w $xr0, $xr0, 1
277+
; CHECK-NEXT: xvst $xr0, $a0, 0
278+
; CHECK-NEXT: ret
279+
entry:
280+
%va = load <8 x i32>, ptr %a
281+
%vb = load <8 x i32>, ptr %b
282+
%add = add <8 x i32> %va, %vb
283+
%add1 = add <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
284+
%shr = lshr <8 x i32> %add1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
285+
store <8 x i32> %shr, ptr %res
286+
ret void
287+
}
288+
289+
define void @xvavgr_du(ptr %res, ptr %a, ptr %b) nounwind {
290+
; CHECK-LABEL: xvavgr_du:
291+
; CHECK: # %bb.0: # %entry
292+
; CHECK-NEXT: xvld $xr0, $a1, 0
293+
; CHECK-NEXT: xvld $xr1, $a2, 0
294+
; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1
295+
; CHECK-NEXT: xvaddi.du $xr0, $xr0, 1
296+
; CHECK-NEXT: xvsrli.d $xr0, $xr0, 1
297+
; CHECK-NEXT: xvst $xr0, $a0, 0
298+
; CHECK-NEXT: ret
299+
entry:
300+
%va = load <4 x i64>, ptr %a
301+
%vb = load <4 x i64>, ptr %b
302+
%add = add <4 x i64> %va, %vb
303+
%add1 = add <4 x i64> %add, <i64 1, i64 1, i64 1, i64 1>
304+
%shr = lshr <4 x i64> %add1, <i64 1, i64 1, i64 1, i64 1>
305+
store <4 x i64> %shr, ptr %res
306+
ret void
307+
}

0 commit comments

Comments
 (0)