Skip to content

Commit b5caa68

Browse files
committed
[ARM] Tests for various NEON vector compares. NFC
1 parent d59ce7d commit b5caa68

File tree

1 file changed

+301
-0
lines changed

1 file changed

+301
-0
lines changed

llvm/test/CodeGen/ARM/vcmpz.ll

Lines changed: 301 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc < %s -mtriple=armv8-eabi -mattr=+neon | FileCheck %s
3+
4+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_eq(<4 x i32> %0, <4 x i32> %b) {
5+
; CHECK-LABEL: vcmpz_eq:
6+
; CHECK: @ %bb.0:
7+
; CHECK-NEXT: vceq.i32 q0, q0, q1
8+
; CHECK-NEXT: bx lr
9+
%2 = icmp eq <4 x i32> %0, %b
10+
%3 = sext <4 x i1> %2 to <4 x i32>
11+
ret <4 x i32> %3
12+
}
13+
14+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_ne(<4 x i32> %0, <4 x i32> %b) {
15+
; CHECK-LABEL: vcmpz_ne:
16+
; CHECK: @ %bb.0:
17+
; CHECK-NEXT: vceq.i32 q8, q0, q1
18+
; CHECK-NEXT: vmvn q0, q8
19+
; CHECK-NEXT: bx lr
20+
%2 = icmp ne <4 x i32> %0, %b
21+
%3 = sext <4 x i1> %2 to <4 x i32>
22+
ret <4 x i32> %3
23+
}
24+
25+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_slt(<4 x i32> %0, <4 x i32> %b) {
26+
; CHECK-LABEL: vcmpz_slt:
27+
; CHECK: @ %bb.0:
28+
; CHECK-NEXT: vcgt.s32 q0, q1, q0
29+
; CHECK-NEXT: bx lr
30+
%2 = icmp slt <4 x i32> %0, %b
31+
%3 = sext <4 x i1> %2 to <4 x i32>
32+
ret <4 x i32> %3
33+
}
34+
35+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_sle(<4 x i32> %0, <4 x i32> %b) {
36+
; CHECK-LABEL: vcmpz_sle:
37+
; CHECK: @ %bb.0:
38+
; CHECK-NEXT: vcge.s32 q0, q1, q0
39+
; CHECK-NEXT: bx lr
40+
%2 = icmp sle <4 x i32> %0, %b
41+
%3 = sext <4 x i1> %2 to <4 x i32>
42+
ret <4 x i32> %3
43+
}
44+
45+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_sgt(<4 x i32> %0, <4 x i32> %b) {
46+
; CHECK-LABEL: vcmpz_sgt:
47+
; CHECK: @ %bb.0:
48+
; CHECK-NEXT: vcgt.s32 q0, q0, q1
49+
; CHECK-NEXT: bx lr
50+
%2 = icmp sgt <4 x i32> %0, %b
51+
%3 = sext <4 x i1> %2 to <4 x i32>
52+
ret <4 x i32> %3
53+
}
54+
55+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_sge(<4 x i32> %0, <4 x i32> %b) {
56+
; CHECK-LABEL: vcmpz_sge:
57+
; CHECK: @ %bb.0:
58+
; CHECK-NEXT: vcge.s32 q0, q0, q1
59+
; CHECK-NEXT: bx lr
60+
%2 = icmp sge <4 x i32> %0, %b
61+
%3 = sext <4 x i1> %2 to <4 x i32>
62+
ret <4 x i32> %3
63+
}
64+
65+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_ult(<4 x i32> %0, <4 x i32> %b) {
66+
; CHECK-LABEL: vcmpz_ult:
67+
; CHECK: @ %bb.0:
68+
; CHECK-NEXT: vcgt.u32 q0, q1, q0
69+
; CHECK-NEXT: bx lr
70+
%2 = icmp ult <4 x i32> %0, %b
71+
%3 = sext <4 x i1> %2 to <4 x i32>
72+
ret <4 x i32> %3
73+
}
74+
75+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_ule(<4 x i32> %0, <4 x i32> %b) {
76+
; CHECK-LABEL: vcmpz_ule:
77+
; CHECK: @ %bb.0:
78+
; CHECK-NEXT: vcge.u32 q0, q1, q0
79+
; CHECK-NEXT: bx lr
80+
%2 = icmp ule <4 x i32> %0, %b
81+
%3 = sext <4 x i1> %2 to <4 x i32>
82+
ret <4 x i32> %3
83+
}
84+
85+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_ugt(<4 x i32> %0, <4 x i32> %b) {
86+
; CHECK-LABEL: vcmpz_ugt:
87+
; CHECK: @ %bb.0:
88+
; CHECK-NEXT: vcgt.u32 q0, q0, q1
89+
; CHECK-NEXT: bx lr
90+
%2 = icmp ugt <4 x i32> %0, %b
91+
%3 = sext <4 x i1> %2 to <4 x i32>
92+
ret <4 x i32> %3
93+
}
94+
95+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_uge(<4 x i32> %0, <4 x i32> %b) {
96+
; CHECK-LABEL: vcmpz_uge:
97+
; CHECK: @ %bb.0:
98+
; CHECK-NEXT: vcge.u32 q0, q0, q1
99+
; CHECK-NEXT: bx lr
100+
%2 = icmp uge <4 x i32> %0, %b
101+
%3 = sext <4 x i1> %2 to <4 x i32>
102+
ret <4 x i32> %3
103+
}
104+
105+
106+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_eq(<4 x i32> %0) {
107+
; CHECK-LABEL: vcmpz_zr_eq:
108+
; CHECK: @ %bb.0:
109+
; CHECK-NEXT: vceq.i32 q0, q0, #0
110+
; CHECK-NEXT: bx lr
111+
%2 = icmp eq <4 x i32> %0, zeroinitializer
112+
%3 = sext <4 x i1> %2 to <4 x i32>
113+
ret <4 x i32> %3
114+
}
115+
116+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_ne(<4 x i32> %0) {
117+
; CHECK-LABEL: vcmpz_zr_ne:
118+
; CHECK: @ %bb.0:
119+
; CHECK-NEXT: vceq.i32 q8, q0, #0
120+
; CHECK-NEXT: vmvn q0, q8
121+
; CHECK-NEXT: bx lr
122+
%2 = icmp ne <4 x i32> %0, zeroinitializer
123+
%3 = sext <4 x i1> %2 to <4 x i32>
124+
ret <4 x i32> %3
125+
}
126+
127+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_slt(<4 x i32> %0) {
128+
; CHECK-LABEL: vcmpz_zr_slt:
129+
; CHECK: @ %bb.0:
130+
; CHECK-NEXT: vclt.s32 q0, q0, #0
131+
; CHECK-NEXT: bx lr
132+
%2 = icmp slt <4 x i32> %0, zeroinitializer
133+
%3 = sext <4 x i1> %2 to <4 x i32>
134+
ret <4 x i32> %3
135+
}
136+
137+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_sle(<4 x i32> %0) {
138+
; CHECK-LABEL: vcmpz_zr_sle:
139+
; CHECK: @ %bb.0:
140+
; CHECK-NEXT: vcle.s32 q0, q0, #0
141+
; CHECK-NEXT: bx lr
142+
%2 = icmp sle <4 x i32> %0, zeroinitializer
143+
%3 = sext <4 x i1> %2 to <4 x i32>
144+
ret <4 x i32> %3
145+
}
146+
147+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_sgt(<4 x i32> %0) {
148+
; CHECK-LABEL: vcmpz_zr_sgt:
149+
; CHECK: @ %bb.0:
150+
; CHECK-NEXT: vcgt.s32 q0, q0, #0
151+
; CHECK-NEXT: bx lr
152+
%2 = icmp sgt <4 x i32> %0, zeroinitializer
153+
%3 = sext <4 x i1> %2 to <4 x i32>
154+
ret <4 x i32> %3
155+
}
156+
157+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_sge(<4 x i32> %0) {
158+
; CHECK-LABEL: vcmpz_zr_sge:
159+
; CHECK: @ %bb.0:
160+
; CHECK-NEXT: vcge.s32 q0, q0, #0
161+
; CHECK-NEXT: bx lr
162+
%2 = icmp sge <4 x i32> %0, zeroinitializer
163+
%3 = sext <4 x i1> %2 to <4 x i32>
164+
ret <4 x i32> %3
165+
}
166+
167+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_ult(<4 x i32> %0) {
168+
; CHECK-LABEL: vcmpz_zr_ult:
169+
; CHECK: @ %bb.0:
170+
; CHECK-NEXT: vmov.i32 q0, #0x0
171+
; CHECK-NEXT: bx lr
172+
%2 = icmp ult <4 x i32> %0, zeroinitializer
173+
%3 = sext <4 x i1> %2 to <4 x i32>
174+
ret <4 x i32> %3
175+
}
176+
177+
;define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_ule(<4 x i32> %0) {
178+
; %2 = icmp ule <4 x i32> %0, zeroinitializer
179+
; %3 = sext <4 x i1> %2 to <4 x i32>
180+
; ret <4 x i32> %3
181+
;}
182+
183+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_ugt(<4 x i32> %0) {
184+
; CHECK-LABEL: vcmpz_zr_ugt:
185+
; CHECK: @ %bb.0:
186+
; CHECK-NEXT: vceq.i32 q8, q0, #0
187+
; CHECK-NEXT: vmvn q0, q8
188+
; CHECK-NEXT: bx lr
189+
%2 = icmp ugt <4 x i32> %0, zeroinitializer
190+
%3 = sext <4 x i1> %2 to <4 x i32>
191+
ret <4 x i32> %3
192+
}
193+
194+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zr_uge(<4 x i32> %0) {
195+
; CHECK-LABEL: vcmpz_zr_uge:
196+
; CHECK: @ %bb.0:
197+
; CHECK-NEXT: vmov.i8 q0, #0xff
198+
; CHECK-NEXT: bx lr
199+
%2 = icmp uge <4 x i32> %0, zeroinitializer
200+
%3 = sext <4 x i1> %2 to <4 x i32>
201+
ret <4 x i32> %3
202+
}
203+
204+
205+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_eq(<4 x i32> %0) {
206+
; CHECK-LABEL: vcmpz_zl_eq:
207+
; CHECK: @ %bb.0:
208+
; CHECK-NEXT: vceq.i32 q0, q0, #0
209+
; CHECK-NEXT: bx lr
210+
%2 = icmp eq <4 x i32> zeroinitializer, %0
211+
%3 = sext <4 x i1> %2 to <4 x i32>
212+
ret <4 x i32> %3
213+
}
214+
215+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_ne(<4 x i32> %0) {
216+
; CHECK-LABEL: vcmpz_zl_ne:
217+
; CHECK: @ %bb.0:
218+
; CHECK-NEXT: vceq.i32 q8, q0, #0
219+
; CHECK-NEXT: vmvn q0, q8
220+
; CHECK-NEXT: bx lr
221+
%2 = icmp ne <4 x i32> zeroinitializer, %0
222+
%3 = sext <4 x i1> %2 to <4 x i32>
223+
ret <4 x i32> %3
224+
}
225+
226+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_slt(<4 x i32> %0) {
227+
; CHECK-LABEL: vcmpz_zl_slt:
228+
; CHECK: @ %bb.0:
229+
; CHECK-NEXT: vcgt.s32 q0, q0, #0
230+
; CHECK-NEXT: bx lr
231+
%2 = icmp slt <4 x i32> zeroinitializer, %0
232+
%3 = sext <4 x i1> %2 to <4 x i32>
233+
ret <4 x i32> %3
234+
}
235+
236+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_sle(<4 x i32> %0) {
237+
; CHECK-LABEL: vcmpz_zl_sle:
238+
; CHECK: @ %bb.0:
239+
; CHECK-NEXT: vcge.s32 q0, q0, #0
240+
; CHECK-NEXT: bx lr
241+
%2 = icmp sle <4 x i32> zeroinitializer, %0
242+
%3 = sext <4 x i1> %2 to <4 x i32>
243+
ret <4 x i32> %3
244+
}
245+
246+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_sgt(<4 x i32> %0) {
247+
; CHECK-LABEL: vcmpz_zl_sgt:
248+
; CHECK: @ %bb.0:
249+
; CHECK-NEXT: vclt.s32 q0, q0, #0
250+
; CHECK-NEXT: bx lr
251+
%2 = icmp sgt <4 x i32> zeroinitializer, %0
252+
%3 = sext <4 x i1> %2 to <4 x i32>
253+
ret <4 x i32> %3
254+
}
255+
256+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_sge(<4 x i32> %0) {
257+
; CHECK-LABEL: vcmpz_zl_sge:
258+
; CHECK: @ %bb.0:
259+
; CHECK-NEXT: vcle.s32 q0, q0, #0
260+
; CHECK-NEXT: bx lr
261+
%2 = icmp sge <4 x i32> zeroinitializer, %0
262+
%3 = sext <4 x i1> %2 to <4 x i32>
263+
ret <4 x i32> %3
264+
}
265+
266+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_ult(<4 x i32> %0) {
267+
; CHECK-LABEL: vcmpz_zl_ult:
268+
; CHECK: @ %bb.0:
269+
; CHECK-NEXT: vceq.i32 q8, q0, #0
270+
; CHECK-NEXT: vmvn q0, q8
271+
; CHECK-NEXT: bx lr
272+
%2 = icmp ult <4 x i32> zeroinitializer, %0
273+
%3 = sext <4 x i1> %2 to <4 x i32>
274+
ret <4 x i32> %3
275+
}
276+
277+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_ule(<4 x i32> %0) {
278+
; CHECK-LABEL: vcmpz_zl_ule:
279+
; CHECK: @ %bb.0:
280+
; CHECK-NEXT: vmov.i8 q0, #0xff
281+
; CHECK-NEXT: bx lr
282+
%2 = icmp ule <4 x i32> zeroinitializer, %0
283+
%3 = sext <4 x i1> %2 to <4 x i32>
284+
ret <4 x i32> %3
285+
}
286+
287+
define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_ugt(<4 x i32> %0) {
288+
; CHECK-LABEL: vcmpz_zl_ugt:
289+
; CHECK: @ %bb.0:
290+
; CHECK-NEXT: vmov.i32 q0, #0x0
291+
; CHECK-NEXT: bx lr
292+
%2 = icmp ugt <4 x i32> zeroinitializer, %0
293+
%3 = sext <4 x i1> %2 to <4 x i32>
294+
ret <4 x i32> %3
295+
}
296+
297+
;define arm_aapcs_vfpcc <4 x i32> @vcmpz_zl_uge(<4 x i32> %0) {
298+
; %2 = icmp uge <4 x i32> zeroinitializer, %0
299+
; %3 = sext <4 x i1> %2 to <4 x i32>
300+
; ret <4 x i32> %3
301+
;}

0 commit comments

Comments
 (0)