1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve,+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-MVE
3 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-MVEFP
5 define arm_aapcs_vfpcc <4 x float> @vcmp_oeq_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
6 ; CHECK-MVE-LABEL: vcmp_oeq_v4f32:
7 ; CHECK-MVE: @ %bb.0: @ %entry
8 ; CHECK-MVE-NEXT: vcmp.f32 s1, s5
9 ; CHECK-MVE-NEXT: movs r1, #0
10 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
11 ; CHECK-MVE-NEXT: it eq
12 ; CHECK-MVE-NEXT: moveq r1, #1
13 ; CHECK-MVE-NEXT: cmp r1, #0
14 ; CHECK-MVE-NEXT: vcmp.f32 s0, s4
15 ; CHECK-MVE-NEXT: it ne
16 ; CHECK-MVE-NEXT: movne r1, #1
17 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
18 ; CHECK-MVE-NEXT: mov.w r2, #0
19 ; CHECK-MVE-NEXT: vcmp.f32 s3, s7
20 ; CHECK-MVE-NEXT: it eq
21 ; CHECK-MVE-NEXT: moveq r2, #1
22 ; CHECK-MVE-NEXT: cmp r2, #0
23 ; CHECK-MVE-NEXT: it ne
24 ; CHECK-MVE-NEXT: movne r2, #1
25 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
26 ; CHECK-MVE-NEXT: mov.w r3, #0
27 ; CHECK-MVE-NEXT: vcmp.f32 s2, s6
28 ; CHECK-MVE-NEXT: it eq
29 ; CHECK-MVE-NEXT: moveq r3, #1
30 ; CHECK-MVE-NEXT: cmp r3, #0
31 ; CHECK-MVE-NEXT: it ne
32 ; CHECK-MVE-NEXT: movne r3, #1
33 ; CHECK-MVE-NEXT: movs r0, #0
34 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
35 ; CHECK-MVE-NEXT: it eq
36 ; CHECK-MVE-NEXT: moveq r0, #1
37 ; CHECK-MVE-NEXT: cmp r0, #0
38 ; CHECK-MVE-NEXT: it ne
39 ; CHECK-MVE-NEXT: movne r0, #1
40 ; CHECK-MVE-NEXT: cmp r3, #0
41 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
42 ; CHECK-MVE-NEXT: cmp r0, #0
43 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
44 ; CHECK-MVE-NEXT: cmp r1, #0
45 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
46 ; CHECK-MVE-NEXT: cmp r2, #0
47 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
48 ; CHECK-MVE-NEXT: bx lr
50 ; CHECK-MVEFP-LABEL: vcmp_oeq_v4f32:
51 ; CHECK-MVEFP: @ %bb.0: @ %entry
52 ; CHECK-MVEFP-NEXT: vcmp.f32 eq, q0, q1
53 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
54 ; CHECK-MVEFP-NEXT: bx lr
56 %c = fcmp oeq <4 x float> %src, %src2
57 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
61 define arm_aapcs_vfpcc <4 x float> @vcmp_one_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
62 ; CHECK-MVE-LABEL: vcmp_one_v4f32:
63 ; CHECK-MVE: @ %bb.0: @ %entry
64 ; CHECK-MVE-NEXT: vcmp.f32 s1, s5
65 ; CHECK-MVE-NEXT: movs r1, #0
66 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
67 ; CHECK-MVE-NEXT: vcmp.f32 s1, s5
68 ; CHECK-MVE-NEXT: it mi
69 ; CHECK-MVE-NEXT: movmi r1, #1
70 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
71 ; CHECK-MVE-NEXT: it gt
72 ; CHECK-MVE-NEXT: movgt r1, #1
73 ; CHECK-MVE-NEXT: cmp r1, #0
74 ; CHECK-MVE-NEXT: vcmp.f32 s0, s4
75 ; CHECK-MVE-NEXT: mov.w r2, #0
76 ; CHECK-MVE-NEXT: it ne
77 ; CHECK-MVE-NEXT: movne r1, #1
78 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
79 ; CHECK-MVE-NEXT: it mi
80 ; CHECK-MVE-NEXT: movmi r2, #1
81 ; CHECK-MVE-NEXT: vcmp.f32 s3, s7
82 ; CHECK-MVE-NEXT: it gt
83 ; CHECK-MVE-NEXT: movgt r2, #1
84 ; CHECK-MVE-NEXT: cmp r2, #0
85 ; CHECK-MVE-NEXT: mov.w r3, #0
86 ; CHECK-MVE-NEXT: it ne
87 ; CHECK-MVE-NEXT: movne r2, #1
88 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
89 ; CHECK-MVE-NEXT: it mi
90 ; CHECK-MVE-NEXT: movmi r3, #1
91 ; CHECK-MVE-NEXT: it gt
92 ; CHECK-MVE-NEXT: movgt r3, #1
93 ; CHECK-MVE-NEXT: cmp r3, #0
94 ; CHECK-MVE-NEXT: mov.w r0, #0
95 ; CHECK-MVE-NEXT: vcmp.f32 s2, s6
96 ; CHECK-MVE-NEXT: it ne
97 ; CHECK-MVE-NEXT: movne r3, #1
98 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
99 ; CHECK-MVE-NEXT: it mi
100 ; CHECK-MVE-NEXT: movmi r0, #1
101 ; CHECK-MVE-NEXT: it gt
102 ; CHECK-MVE-NEXT: movgt r0, #1
103 ; CHECK-MVE-NEXT: cmp r0, #0
104 ; CHECK-MVE-NEXT: it ne
105 ; CHECK-MVE-NEXT: movne r0, #1
106 ; CHECK-MVE-NEXT: cmp r3, #0
107 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
108 ; CHECK-MVE-NEXT: cmp r0, #0
109 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
110 ; CHECK-MVE-NEXT: cmp r1, #0
111 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
112 ; CHECK-MVE-NEXT: cmp r2, #0
113 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
114 ; CHECK-MVE-NEXT: bx lr
116 ; CHECK-MVEFP-LABEL: vcmp_one_v4f32:
117 ; CHECK-MVEFP: @ %bb.0: @ %entry
118 ; CHECK-MVEFP-NEXT: vcmp.f32 le, q1, q0
119 ; CHECK-MVEFP-NEXT: movw r1, #65535
120 ; CHECK-MVEFP-NEXT: vpst
121 ; CHECK-MVEFP-NEXT: vcmpt.f32 le, q0, q1
122 ; CHECK-MVEFP-NEXT: vmrs r0, p0
123 ; CHECK-MVEFP-NEXT: eors r0, r1
124 ; CHECK-MVEFP-NEXT: vmsr p0, r0
125 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
126 ; CHECK-MVEFP-NEXT: bx lr
128 %c = fcmp one <4 x float> %src, %src2
129 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
133 define arm_aapcs_vfpcc <4 x float> @vcmp_ogt_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
134 ; CHECK-MVE-LABEL: vcmp_ogt_v4f32:
135 ; CHECK-MVE: @ %bb.0: @ %entry
136 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
137 ; CHECK-MVE-NEXT: movs r1, #0
138 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
139 ; CHECK-MVE-NEXT: it gt
140 ; CHECK-MVE-NEXT: movgt r1, #1
141 ; CHECK-MVE-NEXT: cmp r1, #0
142 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
143 ; CHECK-MVE-NEXT: it ne
144 ; CHECK-MVE-NEXT: movne r1, #1
145 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
146 ; CHECK-MVE-NEXT: mov.w r2, #0
147 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
148 ; CHECK-MVE-NEXT: it gt
149 ; CHECK-MVE-NEXT: movgt r2, #1
150 ; CHECK-MVE-NEXT: cmp r2, #0
151 ; CHECK-MVE-NEXT: it ne
152 ; CHECK-MVE-NEXT: movne r2, #1
153 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
154 ; CHECK-MVE-NEXT: mov.w r3, #0
155 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
156 ; CHECK-MVE-NEXT: it gt
157 ; CHECK-MVE-NEXT: movgt r3, #1
158 ; CHECK-MVE-NEXT: cmp r3, #0
159 ; CHECK-MVE-NEXT: it ne
160 ; CHECK-MVE-NEXT: movne r3, #1
161 ; CHECK-MVE-NEXT: movs r0, #0
162 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
163 ; CHECK-MVE-NEXT: it gt
164 ; CHECK-MVE-NEXT: movgt r0, #1
165 ; CHECK-MVE-NEXT: cmp r0, #0
166 ; CHECK-MVE-NEXT: it ne
167 ; CHECK-MVE-NEXT: movne r0, #1
168 ; CHECK-MVE-NEXT: cmp r3, #0
169 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
170 ; CHECK-MVE-NEXT: cmp r0, #0
171 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
172 ; CHECK-MVE-NEXT: cmp r1, #0
173 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
174 ; CHECK-MVE-NEXT: cmp r2, #0
175 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
176 ; CHECK-MVE-NEXT: bx lr
178 ; CHECK-MVEFP-LABEL: vcmp_ogt_v4f32:
179 ; CHECK-MVEFP: @ %bb.0: @ %entry
180 ; CHECK-MVEFP-NEXT: vcmp.f32 gt, q0, q1
181 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
182 ; CHECK-MVEFP-NEXT: bx lr
184 %c = fcmp ogt <4 x float> %src, %src2
185 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
189 define arm_aapcs_vfpcc <4 x float> @vcmp_oge_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
190 ; CHECK-MVE-LABEL: vcmp_oge_v4f32:
191 ; CHECK-MVE: @ %bb.0: @ %entry
192 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
193 ; CHECK-MVE-NEXT: movs r1, #0
194 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
195 ; CHECK-MVE-NEXT: it ge
196 ; CHECK-MVE-NEXT: movge r1, #1
197 ; CHECK-MVE-NEXT: cmp r1, #0
198 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
199 ; CHECK-MVE-NEXT: it ne
200 ; CHECK-MVE-NEXT: movne r1, #1
201 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
202 ; CHECK-MVE-NEXT: mov.w r2, #0
203 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
204 ; CHECK-MVE-NEXT: it ge
205 ; CHECK-MVE-NEXT: movge r2, #1
206 ; CHECK-MVE-NEXT: cmp r2, #0
207 ; CHECK-MVE-NEXT: it ne
208 ; CHECK-MVE-NEXT: movne r2, #1
209 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
210 ; CHECK-MVE-NEXT: mov.w r3, #0
211 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
212 ; CHECK-MVE-NEXT: it ge
213 ; CHECK-MVE-NEXT: movge r3, #1
214 ; CHECK-MVE-NEXT: cmp r3, #0
215 ; CHECK-MVE-NEXT: it ne
216 ; CHECK-MVE-NEXT: movne r3, #1
217 ; CHECK-MVE-NEXT: movs r0, #0
218 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
219 ; CHECK-MVE-NEXT: it ge
220 ; CHECK-MVE-NEXT: movge r0, #1
221 ; CHECK-MVE-NEXT: cmp r0, #0
222 ; CHECK-MVE-NEXT: it ne
223 ; CHECK-MVE-NEXT: movne r0, #1
224 ; CHECK-MVE-NEXT: cmp r3, #0
225 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
226 ; CHECK-MVE-NEXT: cmp r0, #0
227 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
228 ; CHECK-MVE-NEXT: cmp r1, #0
229 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
230 ; CHECK-MVE-NEXT: cmp r2, #0
231 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
232 ; CHECK-MVE-NEXT: bx lr
234 ; CHECK-MVEFP-LABEL: vcmp_oge_v4f32:
235 ; CHECK-MVEFP: @ %bb.0: @ %entry
236 ; CHECK-MVEFP-NEXT: vcmp.f32 ge, q0, q1
237 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
238 ; CHECK-MVEFP-NEXT: bx lr
240 %c = fcmp oge <4 x float> %src, %src2
241 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
245 define arm_aapcs_vfpcc <4 x float> @vcmp_olt_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
246 ; CHECK-MVE-LABEL: vcmp_olt_v4f32:
247 ; CHECK-MVE: @ %bb.0: @ %entry
248 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
249 ; CHECK-MVE-NEXT: movs r1, #0
250 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
251 ; CHECK-MVE-NEXT: it mi
252 ; CHECK-MVE-NEXT: movmi r1, #1
253 ; CHECK-MVE-NEXT: cmp r1, #0
254 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
255 ; CHECK-MVE-NEXT: it ne
256 ; CHECK-MVE-NEXT: movne r1, #1
257 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
258 ; CHECK-MVE-NEXT: mov.w r2, #0
259 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
260 ; CHECK-MVE-NEXT: it mi
261 ; CHECK-MVE-NEXT: movmi r2, #1
262 ; CHECK-MVE-NEXT: cmp r2, #0
263 ; CHECK-MVE-NEXT: it ne
264 ; CHECK-MVE-NEXT: movne r2, #1
265 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
266 ; CHECK-MVE-NEXT: mov.w r3, #0
267 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
268 ; CHECK-MVE-NEXT: it mi
269 ; CHECK-MVE-NEXT: movmi r3, #1
270 ; CHECK-MVE-NEXT: cmp r3, #0
271 ; CHECK-MVE-NEXT: it ne
272 ; CHECK-MVE-NEXT: movne r3, #1
273 ; CHECK-MVE-NEXT: movs r0, #0
274 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
275 ; CHECK-MVE-NEXT: it mi
276 ; CHECK-MVE-NEXT: movmi r0, #1
277 ; CHECK-MVE-NEXT: cmp r0, #0
278 ; CHECK-MVE-NEXT: it ne
279 ; CHECK-MVE-NEXT: movne r0, #1
280 ; CHECK-MVE-NEXT: cmp r3, #0
281 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
282 ; CHECK-MVE-NEXT: cmp r0, #0
283 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
284 ; CHECK-MVE-NEXT: cmp r1, #0
285 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
286 ; CHECK-MVE-NEXT: cmp r2, #0
287 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
288 ; CHECK-MVE-NEXT: bx lr
290 ; CHECK-MVEFP-LABEL: vcmp_olt_v4f32:
291 ; CHECK-MVEFP: @ %bb.0: @ %entry
292 ; CHECK-MVEFP-NEXT: vcmp.f32 gt, q1, q0
293 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
294 ; CHECK-MVEFP-NEXT: bx lr
296 %c = fcmp olt <4 x float> %src, %src2
297 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
301 define arm_aapcs_vfpcc <4 x float> @vcmp_ole_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
302 ; CHECK-MVE-LABEL: vcmp_ole_v4f32:
303 ; CHECK-MVE: @ %bb.0: @ %entry
304 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
305 ; CHECK-MVE-NEXT: movs r1, #0
306 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
307 ; CHECK-MVE-NEXT: it ls
308 ; CHECK-MVE-NEXT: movls r1, #1
309 ; CHECK-MVE-NEXT: cmp r1, #0
310 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
311 ; CHECK-MVE-NEXT: it ne
312 ; CHECK-MVE-NEXT: movne r1, #1
313 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
314 ; CHECK-MVE-NEXT: mov.w r2, #0
315 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
316 ; CHECK-MVE-NEXT: it ls
317 ; CHECK-MVE-NEXT: movls r2, #1
318 ; CHECK-MVE-NEXT: cmp r2, #0
319 ; CHECK-MVE-NEXT: it ne
320 ; CHECK-MVE-NEXT: movne r2, #1
321 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
322 ; CHECK-MVE-NEXT: mov.w r3, #0
323 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
324 ; CHECK-MVE-NEXT: it ls
325 ; CHECK-MVE-NEXT: movls r3, #1
326 ; CHECK-MVE-NEXT: cmp r3, #0
327 ; CHECK-MVE-NEXT: it ne
328 ; CHECK-MVE-NEXT: movne r3, #1
329 ; CHECK-MVE-NEXT: movs r0, #0
330 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
331 ; CHECK-MVE-NEXT: it ls
332 ; CHECK-MVE-NEXT: movls r0, #1
333 ; CHECK-MVE-NEXT: cmp r0, #0
334 ; CHECK-MVE-NEXT: it ne
335 ; CHECK-MVE-NEXT: movne r0, #1
336 ; CHECK-MVE-NEXT: cmp r3, #0
337 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
338 ; CHECK-MVE-NEXT: cmp r0, #0
339 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
340 ; CHECK-MVE-NEXT: cmp r1, #0
341 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
342 ; CHECK-MVE-NEXT: cmp r2, #0
343 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
344 ; CHECK-MVE-NEXT: bx lr
346 ; CHECK-MVEFP-LABEL: vcmp_ole_v4f32:
347 ; CHECK-MVEFP: @ %bb.0: @ %entry
348 ; CHECK-MVEFP-NEXT: vcmp.f32 ge, q1, q0
349 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
350 ; CHECK-MVEFP-NEXT: bx lr
352 %c = fcmp ole <4 x float> %src, %src2
353 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
357 define arm_aapcs_vfpcc <4 x float> @vcmp_ueq_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
358 ; CHECK-MVE-LABEL: vcmp_ueq_v4f32:
359 ; CHECK-MVE: @ %bb.0: @ %entry
360 ; CHECK-MVE-NEXT: vcmp.f32 s1, s5
361 ; CHECK-MVE-NEXT: movs r1, #0
362 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
363 ; CHECK-MVE-NEXT: vcmp.f32 s1, s5
364 ; CHECK-MVE-NEXT: it eq
365 ; CHECK-MVE-NEXT: moveq r1, #1
366 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
367 ; CHECK-MVE-NEXT: it vs
368 ; CHECK-MVE-NEXT: movvs r1, #1
369 ; CHECK-MVE-NEXT: cmp r1, #0
370 ; CHECK-MVE-NEXT: vcmp.f32 s0, s4
371 ; CHECK-MVE-NEXT: mov.w r2, #0
372 ; CHECK-MVE-NEXT: it ne
373 ; CHECK-MVE-NEXT: movne r1, #1
374 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
375 ; CHECK-MVE-NEXT: it eq
376 ; CHECK-MVE-NEXT: moveq r2, #1
377 ; CHECK-MVE-NEXT: vcmp.f32 s3, s7
378 ; CHECK-MVE-NEXT: it vs
379 ; CHECK-MVE-NEXT: movvs r2, #1
380 ; CHECK-MVE-NEXT: cmp r2, #0
381 ; CHECK-MVE-NEXT: mov.w r3, #0
382 ; CHECK-MVE-NEXT: it ne
383 ; CHECK-MVE-NEXT: movne r2, #1
384 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
385 ; CHECK-MVE-NEXT: it eq
386 ; CHECK-MVE-NEXT: moveq r3, #1
387 ; CHECK-MVE-NEXT: it vs
388 ; CHECK-MVE-NEXT: movvs r3, #1
389 ; CHECK-MVE-NEXT: cmp r3, #0
390 ; CHECK-MVE-NEXT: mov.w r0, #0
391 ; CHECK-MVE-NEXT: vcmp.f32 s2, s6
392 ; CHECK-MVE-NEXT: it ne
393 ; CHECK-MVE-NEXT: movne r3, #1
394 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
395 ; CHECK-MVE-NEXT: it eq
396 ; CHECK-MVE-NEXT: moveq r0, #1
397 ; CHECK-MVE-NEXT: it vs
398 ; CHECK-MVE-NEXT: movvs r0, #1
399 ; CHECK-MVE-NEXT: cmp r0, #0
400 ; CHECK-MVE-NEXT: it ne
401 ; CHECK-MVE-NEXT: movne r0, #1
402 ; CHECK-MVE-NEXT: cmp r3, #0
403 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
404 ; CHECK-MVE-NEXT: cmp r0, #0
405 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
406 ; CHECK-MVE-NEXT: cmp r1, #0
407 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
408 ; CHECK-MVE-NEXT: cmp r2, #0
409 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
410 ; CHECK-MVE-NEXT: bx lr
412 ; CHECK-MVEFP-LABEL: vcmp_ueq_v4f32:
413 ; CHECK-MVEFP: @ %bb.0: @ %entry
414 ; CHECK-MVEFP-NEXT: vcmp.f32 le, q1, q0
415 ; CHECK-MVEFP-NEXT: vpst
416 ; CHECK-MVEFP-NEXT: vcmpt.f32 le, q0, q1
417 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
418 ; CHECK-MVEFP-NEXT: bx lr
420 %c = fcmp ueq <4 x float> %src, %src2
421 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
425 define arm_aapcs_vfpcc <4 x float> @vcmp_une_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
426 ; CHECK-MVE-LABEL: vcmp_une_v4f32:
427 ; CHECK-MVE: @ %bb.0: @ %entry
428 ; CHECK-MVE-NEXT: vcmp.f32 s1, s5
429 ; CHECK-MVE-NEXT: movs r1, #0
430 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
431 ; CHECK-MVE-NEXT: it ne
432 ; CHECK-MVE-NEXT: movne r1, #1
433 ; CHECK-MVE-NEXT: cmp r1, #0
434 ; CHECK-MVE-NEXT: vcmp.f32 s0, s4
435 ; CHECK-MVE-NEXT: it ne
436 ; CHECK-MVE-NEXT: movne r1, #1
437 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
438 ; CHECK-MVE-NEXT: mov.w r2, #0
439 ; CHECK-MVE-NEXT: vcmp.f32 s3, s7
440 ; CHECK-MVE-NEXT: it ne
441 ; CHECK-MVE-NEXT: movne r2, #1
442 ; CHECK-MVE-NEXT: cmp r2, #0
443 ; CHECK-MVE-NEXT: it ne
444 ; CHECK-MVE-NEXT: movne r2, #1
445 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
446 ; CHECK-MVE-NEXT: mov.w r3, #0
447 ; CHECK-MVE-NEXT: vcmp.f32 s2, s6
448 ; CHECK-MVE-NEXT: it ne
449 ; CHECK-MVE-NEXT: movne r3, #1
450 ; CHECK-MVE-NEXT: cmp r3, #0
451 ; CHECK-MVE-NEXT: it ne
452 ; CHECK-MVE-NEXT: movne r3, #1
453 ; CHECK-MVE-NEXT: movs r0, #0
454 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
455 ; CHECK-MVE-NEXT: it ne
456 ; CHECK-MVE-NEXT: movne r0, #1
457 ; CHECK-MVE-NEXT: cmp r0, #0
458 ; CHECK-MVE-NEXT: it ne
459 ; CHECK-MVE-NEXT: movne r0, #1
460 ; CHECK-MVE-NEXT: cmp r3, #0
461 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
462 ; CHECK-MVE-NEXT: cmp r0, #0
463 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
464 ; CHECK-MVE-NEXT: cmp r1, #0
465 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
466 ; CHECK-MVE-NEXT: cmp r2, #0
467 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
468 ; CHECK-MVE-NEXT: bx lr
470 ; CHECK-MVEFP-LABEL: vcmp_une_v4f32:
471 ; CHECK-MVEFP: @ %bb.0: @ %entry
472 ; CHECK-MVEFP-NEXT: vcmp.f32 ne, q0, q1
473 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
474 ; CHECK-MVEFP-NEXT: bx lr
476 %c = fcmp une <4 x float> %src, %src2
477 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
481 define arm_aapcs_vfpcc <4 x float> @vcmp_ugt_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
482 ; CHECK-MVE-LABEL: vcmp_ugt_v4f32:
483 ; CHECK-MVE: @ %bb.0: @ %entry
484 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
485 ; CHECK-MVE-NEXT: movs r1, #0
486 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
487 ; CHECK-MVE-NEXT: it hi
488 ; CHECK-MVE-NEXT: movhi r1, #1
489 ; CHECK-MVE-NEXT: cmp r1, #0
490 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
491 ; CHECK-MVE-NEXT: it ne
492 ; CHECK-MVE-NEXT: movne r1, #1
493 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
494 ; CHECK-MVE-NEXT: mov.w r2, #0
495 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
496 ; CHECK-MVE-NEXT: it hi
497 ; CHECK-MVE-NEXT: movhi r2, #1
498 ; CHECK-MVE-NEXT: cmp r2, #0
499 ; CHECK-MVE-NEXT: it ne
500 ; CHECK-MVE-NEXT: movne r2, #1
501 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
502 ; CHECK-MVE-NEXT: mov.w r3, #0
503 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
504 ; CHECK-MVE-NEXT: it hi
505 ; CHECK-MVE-NEXT: movhi r3, #1
506 ; CHECK-MVE-NEXT: cmp r3, #0
507 ; CHECK-MVE-NEXT: it ne
508 ; CHECK-MVE-NEXT: movne r3, #1
509 ; CHECK-MVE-NEXT: movs r0, #0
510 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
511 ; CHECK-MVE-NEXT: it hi
512 ; CHECK-MVE-NEXT: movhi r0, #1
513 ; CHECK-MVE-NEXT: cmp r0, #0
514 ; CHECK-MVE-NEXT: it ne
515 ; CHECK-MVE-NEXT: movne r0, #1
516 ; CHECK-MVE-NEXT: cmp r3, #0
517 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
518 ; CHECK-MVE-NEXT: cmp r0, #0
519 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
520 ; CHECK-MVE-NEXT: cmp r1, #0
521 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
522 ; CHECK-MVE-NEXT: cmp r2, #0
523 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
524 ; CHECK-MVE-NEXT: bx lr
526 ; CHECK-MVEFP-LABEL: vcmp_ugt_v4f32:
527 ; CHECK-MVEFP: @ %bb.0: @ %entry
528 ; CHECK-MVEFP-NEXT: vcmp.f32 ge, q1, q0
529 ; CHECK-MVEFP-NEXT: movw r1, #65535
530 ; CHECK-MVEFP-NEXT: vmrs r0, p0
531 ; CHECK-MVEFP-NEXT: eors r0, r1
532 ; CHECK-MVEFP-NEXT: vmsr p0, r0
533 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
534 ; CHECK-MVEFP-NEXT: bx lr
536 %c = fcmp ugt <4 x float> %src, %src2
537 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
541 define arm_aapcs_vfpcc <4 x float> @vcmp_uge_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
542 ; CHECK-MVE-LABEL: vcmp_uge_v4f32:
543 ; CHECK-MVE: @ %bb.0: @ %entry
544 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
545 ; CHECK-MVE-NEXT: movs r1, #0
546 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
547 ; CHECK-MVE-NEXT: it pl
548 ; CHECK-MVE-NEXT: movpl r1, #1
549 ; CHECK-MVE-NEXT: cmp r1, #0
550 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
551 ; CHECK-MVE-NEXT: it ne
552 ; CHECK-MVE-NEXT: movne r1, #1
553 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
554 ; CHECK-MVE-NEXT: mov.w r2, #0
555 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
556 ; CHECK-MVE-NEXT: it pl
557 ; CHECK-MVE-NEXT: movpl r2, #1
558 ; CHECK-MVE-NEXT: cmp r2, #0
559 ; CHECK-MVE-NEXT: it ne
560 ; CHECK-MVE-NEXT: movne r2, #1
561 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
562 ; CHECK-MVE-NEXT: mov.w r3, #0
563 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
564 ; CHECK-MVE-NEXT: it pl
565 ; CHECK-MVE-NEXT: movpl r3, #1
566 ; CHECK-MVE-NEXT: cmp r3, #0
567 ; CHECK-MVE-NEXT: it ne
568 ; CHECK-MVE-NEXT: movne r3, #1
569 ; CHECK-MVE-NEXT: movs r0, #0
570 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
571 ; CHECK-MVE-NEXT: it pl
572 ; CHECK-MVE-NEXT: movpl r0, #1
573 ; CHECK-MVE-NEXT: cmp r0, #0
574 ; CHECK-MVE-NEXT: it ne
575 ; CHECK-MVE-NEXT: movne r0, #1
576 ; CHECK-MVE-NEXT: cmp r3, #0
577 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
578 ; CHECK-MVE-NEXT: cmp r0, #0
579 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
580 ; CHECK-MVE-NEXT: cmp r1, #0
581 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
582 ; CHECK-MVE-NEXT: cmp r2, #0
583 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
584 ; CHECK-MVE-NEXT: bx lr
586 ; CHECK-MVEFP-LABEL: vcmp_uge_v4f32:
587 ; CHECK-MVEFP: @ %bb.0: @ %entry
588 ; CHECK-MVEFP-NEXT: vcmp.f32 gt, q1, q0
589 ; CHECK-MVEFP-NEXT: movw r1, #65535
590 ; CHECK-MVEFP-NEXT: vmrs r0, p0
591 ; CHECK-MVEFP-NEXT: eors r0, r1
592 ; CHECK-MVEFP-NEXT: vmsr p0, r0
593 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
594 ; CHECK-MVEFP-NEXT: bx lr
596 %c = fcmp uge <4 x float> %src, %src2
597 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
601 define arm_aapcs_vfpcc <4 x float> @vcmp_ult_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
602 ; CHECK-MVE-LABEL: vcmp_ult_v4f32:
603 ; CHECK-MVE: @ %bb.0: @ %entry
604 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
605 ; CHECK-MVE-NEXT: movs r1, #0
606 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
607 ; CHECK-MVE-NEXT: it lt
608 ; CHECK-MVE-NEXT: movlt r1, #1
609 ; CHECK-MVE-NEXT: cmp r1, #0
610 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
611 ; CHECK-MVE-NEXT: it ne
612 ; CHECK-MVE-NEXT: movne r1, #1
613 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
614 ; CHECK-MVE-NEXT: mov.w r2, #0
615 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
616 ; CHECK-MVE-NEXT: it lt
617 ; CHECK-MVE-NEXT: movlt r2, #1
618 ; CHECK-MVE-NEXT: cmp r2, #0
619 ; CHECK-MVE-NEXT: it ne
620 ; CHECK-MVE-NEXT: movne r2, #1
621 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
622 ; CHECK-MVE-NEXT: mov.w r3, #0
623 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
624 ; CHECK-MVE-NEXT: it lt
625 ; CHECK-MVE-NEXT: movlt r3, #1
626 ; CHECK-MVE-NEXT: cmp r3, #0
627 ; CHECK-MVE-NEXT: it ne
628 ; CHECK-MVE-NEXT: movne r3, #1
629 ; CHECK-MVE-NEXT: movs r0, #0
630 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
631 ; CHECK-MVE-NEXT: it lt
632 ; CHECK-MVE-NEXT: movlt r0, #1
633 ; CHECK-MVE-NEXT: cmp r0, #0
634 ; CHECK-MVE-NEXT: it ne
635 ; CHECK-MVE-NEXT: movne r0, #1
636 ; CHECK-MVE-NEXT: cmp r3, #0
637 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
638 ; CHECK-MVE-NEXT: cmp r0, #0
639 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
640 ; CHECK-MVE-NEXT: cmp r1, #0
641 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
642 ; CHECK-MVE-NEXT: cmp r2, #0
643 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
644 ; CHECK-MVE-NEXT: bx lr
646 ; CHECK-MVEFP-LABEL: vcmp_ult_v4f32:
647 ; CHECK-MVEFP: @ %bb.0: @ %entry
648 ; CHECK-MVEFP-NEXT: vcmp.f32 ge, q0, q1
649 ; CHECK-MVEFP-NEXT: movw r1, #65535
650 ; CHECK-MVEFP-NEXT: vmrs r0, p0
651 ; CHECK-MVEFP-NEXT: eors r0, r1
652 ; CHECK-MVEFP-NEXT: vmsr p0, r0
653 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
654 ; CHECK-MVEFP-NEXT: bx lr
656 %c = fcmp ult <4 x float> %src, %src2
657 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
661 define arm_aapcs_vfpcc <4 x float> @vcmp_ule_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
662 ; CHECK-MVE-LABEL: vcmp_ule_v4f32:
663 ; CHECK-MVE: @ %bb.0: @ %entry
664 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
665 ; CHECK-MVE-NEXT: movs r1, #0
666 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
667 ; CHECK-MVE-NEXT: it le
668 ; CHECK-MVE-NEXT: movle r1, #1
669 ; CHECK-MVE-NEXT: cmp r1, #0
670 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
671 ; CHECK-MVE-NEXT: it ne
672 ; CHECK-MVE-NEXT: movne r1, #1
673 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
674 ; CHECK-MVE-NEXT: mov.w r2, #0
675 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
676 ; CHECK-MVE-NEXT: it le
677 ; CHECK-MVE-NEXT: movle r2, #1
678 ; CHECK-MVE-NEXT: cmp r2, #0
679 ; CHECK-MVE-NEXT: it ne
680 ; CHECK-MVE-NEXT: movne r2, #1
681 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
682 ; CHECK-MVE-NEXT: mov.w r3, #0
683 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
684 ; CHECK-MVE-NEXT: it le
685 ; CHECK-MVE-NEXT: movle r3, #1
686 ; CHECK-MVE-NEXT: cmp r3, #0
687 ; CHECK-MVE-NEXT: it ne
688 ; CHECK-MVE-NEXT: movne r3, #1
689 ; CHECK-MVE-NEXT: movs r0, #0
690 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
691 ; CHECK-MVE-NEXT: it le
692 ; CHECK-MVE-NEXT: movle r0, #1
693 ; CHECK-MVE-NEXT: cmp r0, #0
694 ; CHECK-MVE-NEXT: it ne
695 ; CHECK-MVE-NEXT: movne r0, #1
696 ; CHECK-MVE-NEXT: cmp r3, #0
697 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
698 ; CHECK-MVE-NEXT: cmp r0, #0
699 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
700 ; CHECK-MVE-NEXT: cmp r1, #0
701 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
702 ; CHECK-MVE-NEXT: cmp r2, #0
703 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
704 ; CHECK-MVE-NEXT: bx lr
706 ; CHECK-MVEFP-LABEL: vcmp_ule_v4f32:
707 ; CHECK-MVEFP: @ %bb.0: @ %entry
708 ; CHECK-MVEFP-NEXT: vcmp.f32 gt, q0, q1
709 ; CHECK-MVEFP-NEXT: movw r1, #65535
710 ; CHECK-MVEFP-NEXT: vmrs r0, p0
711 ; CHECK-MVEFP-NEXT: eors r0, r1
712 ; CHECK-MVEFP-NEXT: vmsr p0, r0
713 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
714 ; CHECK-MVEFP-NEXT: bx lr
716 %c = fcmp ule <4 x float> %src, %src2
717 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
721 define arm_aapcs_vfpcc <4 x float> @vcmp_ord_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
722 ; CHECK-MVE-LABEL: vcmp_ord_v4f32:
723 ; CHECK-MVE: @ %bb.0: @ %entry
724 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
725 ; CHECK-MVE-NEXT: movs r1, #0
726 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
727 ; CHECK-MVE-NEXT: it vc
728 ; CHECK-MVE-NEXT: movvc r1, #1
729 ; CHECK-MVE-NEXT: cmp r1, #0
730 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
731 ; CHECK-MVE-NEXT: it ne
732 ; CHECK-MVE-NEXT: movne r1, #1
733 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
734 ; CHECK-MVE-NEXT: mov.w r2, #0
735 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
736 ; CHECK-MVE-NEXT: it vc
737 ; CHECK-MVE-NEXT: movvc r2, #1
738 ; CHECK-MVE-NEXT: cmp r2, #0
739 ; CHECK-MVE-NEXT: it ne
740 ; CHECK-MVE-NEXT: movne r2, #1
741 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
742 ; CHECK-MVE-NEXT: mov.w r3, #0
743 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
744 ; CHECK-MVE-NEXT: it vc
745 ; CHECK-MVE-NEXT: movvc r3, #1
746 ; CHECK-MVE-NEXT: cmp r3, #0
747 ; CHECK-MVE-NEXT: it ne
748 ; CHECK-MVE-NEXT: movne r3, #1
749 ; CHECK-MVE-NEXT: movs r0, #0
750 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
751 ; CHECK-MVE-NEXT: it vc
752 ; CHECK-MVE-NEXT: movvc r0, #1
753 ; CHECK-MVE-NEXT: cmp r0, #0
754 ; CHECK-MVE-NEXT: it ne
755 ; CHECK-MVE-NEXT: movne r0, #1
756 ; CHECK-MVE-NEXT: cmp r3, #0
757 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
758 ; CHECK-MVE-NEXT: cmp r0, #0
759 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
760 ; CHECK-MVE-NEXT: cmp r1, #0
761 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
762 ; CHECK-MVE-NEXT: cmp r2, #0
763 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
764 ; CHECK-MVE-NEXT: bx lr
766 ; CHECK-MVEFP-LABEL: vcmp_ord_v4f32:
767 ; CHECK-MVEFP: @ %bb.0: @ %entry
768 ; CHECK-MVEFP-NEXT: vcmp.f32 le, q1, q0
769 ; CHECK-MVEFP-NEXT: movw r1, #65535
770 ; CHECK-MVEFP-NEXT: vpst
771 ; CHECK-MVEFP-NEXT: vcmpt.f32 lt, q0, q1
772 ; CHECK-MVEFP-NEXT: vmrs r0, p0
773 ; CHECK-MVEFP-NEXT: eors r0, r1
774 ; CHECK-MVEFP-NEXT: vmsr p0, r0
775 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
776 ; CHECK-MVEFP-NEXT: bx lr
778 %c = fcmp ord <4 x float> %src, %src2
779 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
783 define arm_aapcs_vfpcc <4 x float> @vcmp_uno_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
784 ; CHECK-MVE-LABEL: vcmp_uno_v4f32:
785 ; CHECK-MVE: @ %bb.0: @ %entry
786 ; CHECK-MVE-NEXT: vcmpe.f32 s1, s5
787 ; CHECK-MVE-NEXT: movs r1, #0
788 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
789 ; CHECK-MVE-NEXT: it vs
790 ; CHECK-MVE-NEXT: movvs r1, #1
791 ; CHECK-MVE-NEXT: cmp r1, #0
792 ; CHECK-MVE-NEXT: vcmpe.f32 s0, s4
793 ; CHECK-MVE-NEXT: it ne
794 ; CHECK-MVE-NEXT: movne r1, #1
795 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
796 ; CHECK-MVE-NEXT: mov.w r2, #0
797 ; CHECK-MVE-NEXT: vcmpe.f32 s3, s7
798 ; CHECK-MVE-NEXT: it vs
799 ; CHECK-MVE-NEXT: movvs r2, #1
800 ; CHECK-MVE-NEXT: cmp r2, #0
801 ; CHECK-MVE-NEXT: it ne
802 ; CHECK-MVE-NEXT: movne r2, #1
803 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
804 ; CHECK-MVE-NEXT: mov.w r3, #0
805 ; CHECK-MVE-NEXT: vcmpe.f32 s2, s6
806 ; CHECK-MVE-NEXT: it vs
807 ; CHECK-MVE-NEXT: movvs r3, #1
808 ; CHECK-MVE-NEXT: cmp r3, #0
809 ; CHECK-MVE-NEXT: it ne
810 ; CHECK-MVE-NEXT: movne r3, #1
811 ; CHECK-MVE-NEXT: movs r0, #0
812 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
813 ; CHECK-MVE-NEXT: it vs
814 ; CHECK-MVE-NEXT: movvs r0, #1
815 ; CHECK-MVE-NEXT: cmp r0, #0
816 ; CHECK-MVE-NEXT: it ne
817 ; CHECK-MVE-NEXT: movne r0, #1
818 ; CHECK-MVE-NEXT: cmp r3, #0
819 ; CHECK-MVE-NEXT: vseleq.f32 s3, s15, s11
820 ; CHECK-MVE-NEXT: cmp r0, #0
821 ; CHECK-MVE-NEXT: vseleq.f32 s2, s14, s10
822 ; CHECK-MVE-NEXT: cmp r1, #0
823 ; CHECK-MVE-NEXT: vseleq.f32 s1, s13, s9
824 ; CHECK-MVE-NEXT: cmp r2, #0
825 ; CHECK-MVE-NEXT: vseleq.f32 s0, s12, s8
826 ; CHECK-MVE-NEXT: bx lr
828 ; CHECK-MVEFP-LABEL: vcmp_uno_v4f32:
829 ; CHECK-MVEFP: @ %bb.0: @ %entry
830 ; CHECK-MVEFP-NEXT: vcmp.f32 le, q1, q0
831 ; CHECK-MVEFP-NEXT: vpst
832 ; CHECK-MVEFP-NEXT: vcmpt.f32 lt, q0, q1
833 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
834 ; CHECK-MVEFP-NEXT: bx lr
836 %c = fcmp uno <4 x float> %src, %src2
837 %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
843 define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
844 ; CHECK-MVE-LABEL: vcmp_oeq_v8f16:
845 ; CHECK-MVE: @ %bb.0: @ %entry
846 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
847 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
848 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
849 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
850 ; CHECK-MVE-NEXT: vmov s16, r1
851 ; CHECK-MVE-NEXT: movs r1, #0
852 ; CHECK-MVE-NEXT: vmov s18, r2
853 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
854 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
855 ; CHECK-MVE-NEXT: vmov s16, r2
856 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
857 ; CHECK-MVE-NEXT: it eq
858 ; CHECK-MVE-NEXT: moveq r1, #1
859 ; CHECK-MVE-NEXT: cmp r1, #0
860 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
861 ; CHECK-MVE-NEXT: it ne
862 ; CHECK-MVE-NEXT: movne r1, #1
863 ; CHECK-MVE-NEXT: vmov s18, r2
864 ; CHECK-MVE-NEXT: cmp r1, #0
865 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
866 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
867 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
868 ; CHECK-MVE-NEXT: vmov r1, s16
869 ; CHECK-MVE-NEXT: movs r0, #0
870 ; CHECK-MVE-NEXT: vmov s16, r2
871 ; CHECK-MVE-NEXT: movs r2, #0
872 ; CHECK-MVE-NEXT: vmov s18, r3
873 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
874 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
875 ; CHECK-MVE-NEXT: vmov s16, r3
876 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
877 ; CHECK-MVE-NEXT: it eq
878 ; CHECK-MVE-NEXT: moveq r2, #1
879 ; CHECK-MVE-NEXT: cmp r2, #0
880 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
881 ; CHECK-MVE-NEXT: it ne
882 ; CHECK-MVE-NEXT: movne r2, #1
883 ; CHECK-MVE-NEXT: vmov s18, r3
884 ; CHECK-MVE-NEXT: cmp r2, #0
885 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
886 ; CHECK-MVE-NEXT: vmov r2, s16
887 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
888 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
889 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
890 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
891 ; CHECK-MVE-NEXT: vmov s20, r1
892 ; CHECK-MVE-NEXT: movs r1, #0
893 ; CHECK-MVE-NEXT: vmov s22, r2
894 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
895 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
896 ; CHECK-MVE-NEXT: vmov s20, r2
897 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
898 ; CHECK-MVE-NEXT: it eq
899 ; CHECK-MVE-NEXT: moveq r1, #1
900 ; CHECK-MVE-NEXT: cmp r1, #0
901 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
902 ; CHECK-MVE-NEXT: it ne
903 ; CHECK-MVE-NEXT: movne r1, #1
904 ; CHECK-MVE-NEXT: vmov s22, r2
905 ; CHECK-MVE-NEXT: cmp r1, #0
906 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
907 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
908 ; CHECK-MVE-NEXT: vmov s22, r2
909 ; CHECK-MVE-NEXT: vmov r1, s20
910 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
911 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
912 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
913 ; CHECK-MVE-NEXT: vmov s20, r1
914 ; CHECK-MVE-NEXT: movs r1, #0
915 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
916 ; CHECK-MVE-NEXT: vmov s20, r2
917 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
918 ; CHECK-MVE-NEXT: it eq
919 ; CHECK-MVE-NEXT: moveq r1, #1
920 ; CHECK-MVE-NEXT: cmp r1, #0
921 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
922 ; CHECK-MVE-NEXT: it ne
923 ; CHECK-MVE-NEXT: movne r1, #1
924 ; CHECK-MVE-NEXT: vmov s22, r2
925 ; CHECK-MVE-NEXT: cmp r1, #0
926 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
927 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
928 ; CHECK-MVE-NEXT: vmov s22, r2
929 ; CHECK-MVE-NEXT: vmov r1, s20
930 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
931 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
932 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
933 ; CHECK-MVE-NEXT: vmov s20, r1
934 ; CHECK-MVE-NEXT: movs r1, #0
935 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
936 ; CHECK-MVE-NEXT: vmov s20, r2
937 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
938 ; CHECK-MVE-NEXT: it eq
939 ; CHECK-MVE-NEXT: moveq r1, #1
940 ; CHECK-MVE-NEXT: cmp r1, #0
941 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
942 ; CHECK-MVE-NEXT: it ne
943 ; CHECK-MVE-NEXT: movne r1, #1
944 ; CHECK-MVE-NEXT: vmov s22, r2
945 ; CHECK-MVE-NEXT: cmp r1, #0
946 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
947 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
948 ; CHECK-MVE-NEXT: vmov s22, r2
949 ; CHECK-MVE-NEXT: vmov r1, s20
950 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
951 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
952 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
953 ; CHECK-MVE-NEXT: vmov s20, r1
954 ; CHECK-MVE-NEXT: movs r1, #0
955 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
956 ; CHECK-MVE-NEXT: vmov s20, r2
957 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
958 ; CHECK-MVE-NEXT: it eq
959 ; CHECK-MVE-NEXT: moveq r1, #1
960 ; CHECK-MVE-NEXT: cmp r1, #0
961 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
962 ; CHECK-MVE-NEXT: it ne
963 ; CHECK-MVE-NEXT: movne r1, #1
964 ; CHECK-MVE-NEXT: vmov s22, r2
965 ; CHECK-MVE-NEXT: cmp r1, #0
966 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
967 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
968 ; CHECK-MVE-NEXT: vmov s22, r2
969 ; CHECK-MVE-NEXT: vmov r1, s20
970 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
971 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
972 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
973 ; CHECK-MVE-NEXT: vmov s20, r1
974 ; CHECK-MVE-NEXT: movs r1, #0
975 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
976 ; CHECK-MVE-NEXT: vmov s20, r2
977 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
978 ; CHECK-MVE-NEXT: it eq
979 ; CHECK-MVE-NEXT: moveq r1, #1
980 ; CHECK-MVE-NEXT: cmp r1, #0
981 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
982 ; CHECK-MVE-NEXT: it ne
983 ; CHECK-MVE-NEXT: movne r1, #1
984 ; CHECK-MVE-NEXT: vmov s22, r2
985 ; CHECK-MVE-NEXT: cmp r1, #0
986 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
987 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
988 ; CHECK-MVE-NEXT: vmov s2, r2
989 ; CHECK-MVE-NEXT: vmov r1, s20
990 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
991 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
992 ; CHECK-MVE-NEXT: vmov s0, r1
993 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
994 ; CHECK-MVE-NEXT: vcmp.f16 s2, s0
995 ; CHECK-MVE-NEXT: vmov s0, r1
996 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
997 ; CHECK-MVE-NEXT: it eq
998 ; CHECK-MVE-NEXT: moveq r0, #1
999 ; CHECK-MVE-NEXT: cmp r0, #0
1000 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
1001 ; CHECK-MVE-NEXT: it ne
1002 ; CHECK-MVE-NEXT: movne r0, #1
1003 ; CHECK-MVE-NEXT: vmov s2, r1
1004 ; CHECK-MVE-NEXT: cmp r0, #0
1005 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
1006 ; CHECK-MVE-NEXT: vmov r0, s0
1007 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
1008 ; CHECK-MVE-NEXT: vmov q0, q4
1009 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
1010 ; CHECK-MVE-NEXT: bx lr
1012 ; CHECK-MVEFP-LABEL: vcmp_oeq_v8f16:
1013 ; CHECK-MVEFP: @ %bb.0: @ %entry
1014 ; CHECK-MVEFP-NEXT: vcmp.f16 eq, q0, q1
1015 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
1016 ; CHECK-MVEFP-NEXT: bx lr
1018 %c = fcmp oeq <8 x half> %src, %src2
1019 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1023 define arm_aapcs_vfpcc <8 x half> @vcmp_one_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1024 ; CHECK-MVE-LABEL: vcmp_one_v8f16:
1025 ; CHECK-MVE: @ %bb.0: @ %entry
1026 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
1027 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
1028 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
1029 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
1030 ; CHECK-MVE-NEXT: vmov s16, r1
1031 ; CHECK-MVE-NEXT: movs r1, #0
1032 ; CHECK-MVE-NEXT: vmov s18, r2
1033 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
1034 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
1035 ; CHECK-MVE-NEXT: vmov s16, r2
1036 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1037 ; CHECK-MVE-NEXT: it mi
1038 ; CHECK-MVE-NEXT: movmi r1, #1
1039 ; CHECK-MVE-NEXT: it gt
1040 ; CHECK-MVE-NEXT: movgt r1, #1
1041 ; CHECK-MVE-NEXT: cmp r1, #0
1042 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
1043 ; CHECK-MVE-NEXT: it ne
1044 ; CHECK-MVE-NEXT: movne r1, #1
1045 ; CHECK-MVE-NEXT: vmov s18, r2
1046 ; CHECK-MVE-NEXT: cmp r1, #0
1047 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1048 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
1049 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
1050 ; CHECK-MVE-NEXT: vmov r1, s16
1051 ; CHECK-MVE-NEXT: vmov s16, r2
1052 ; CHECK-MVE-NEXT: movs r2, #0
1053 ; CHECK-MVE-NEXT: vmov s18, r3
1054 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
1055 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
1056 ; CHECK-MVE-NEXT: vmov s16, r3
1057 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1058 ; CHECK-MVE-NEXT: it mi
1059 ; CHECK-MVE-NEXT: movmi r2, #1
1060 ; CHECK-MVE-NEXT: it gt
1061 ; CHECK-MVE-NEXT: movgt r2, #1
1062 ; CHECK-MVE-NEXT: cmp r2, #0
1063 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
1064 ; CHECK-MVE-NEXT: it ne
1065 ; CHECK-MVE-NEXT: movne r2, #1
1066 ; CHECK-MVE-NEXT: vmov s18, r3
1067 ; CHECK-MVE-NEXT: cmp r2, #0
1068 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1069 ; CHECK-MVE-NEXT: movs r0, #0
1070 ; CHECK-MVE-NEXT: vmov r2, s16
1071 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
1072 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
1073 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
1074 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
1075 ; CHECK-MVE-NEXT: vmov s20, r1
1076 ; CHECK-MVE-NEXT: movs r1, #0
1077 ; CHECK-MVE-NEXT: vmov s22, r2
1078 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
1079 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
1080 ; CHECK-MVE-NEXT: vmov s20, r2
1081 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1082 ; CHECK-MVE-NEXT: it mi
1083 ; CHECK-MVE-NEXT: movmi r1, #1
1084 ; CHECK-MVE-NEXT: it gt
1085 ; CHECK-MVE-NEXT: movgt r1, #1
1086 ; CHECK-MVE-NEXT: cmp r1, #0
1087 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
1088 ; CHECK-MVE-NEXT: it ne
1089 ; CHECK-MVE-NEXT: movne r1, #1
1090 ; CHECK-MVE-NEXT: vmov s22, r2
1091 ; CHECK-MVE-NEXT: cmp r1, #0
1092 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1093 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
1094 ; CHECK-MVE-NEXT: vmov r1, s20
1095 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
1096 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
1097 ; CHECK-MVE-NEXT: vmov s20, r1
1098 ; CHECK-MVE-NEXT: movs r1, #0
1099 ; CHECK-MVE-NEXT: vmov s22, r2
1100 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
1101 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
1102 ; CHECK-MVE-NEXT: vmov s20, r2
1103 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1104 ; CHECK-MVE-NEXT: it mi
1105 ; CHECK-MVE-NEXT: movmi r1, #1
1106 ; CHECK-MVE-NEXT: it gt
1107 ; CHECK-MVE-NEXT: movgt r1, #1
1108 ; CHECK-MVE-NEXT: cmp r1, #0
1109 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
1110 ; CHECK-MVE-NEXT: it ne
1111 ; CHECK-MVE-NEXT: movne r1, #1
1112 ; CHECK-MVE-NEXT: vmov s22, r2
1113 ; CHECK-MVE-NEXT: cmp r1, #0
1114 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1115 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
1116 ; CHECK-MVE-NEXT: vmov r1, s20
1117 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
1118 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
1119 ; CHECK-MVE-NEXT: vmov s20, r1
1120 ; CHECK-MVE-NEXT: movs r1, #0
1121 ; CHECK-MVE-NEXT: vmov s22, r2
1122 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
1123 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
1124 ; CHECK-MVE-NEXT: vmov s20, r2
1125 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1126 ; CHECK-MVE-NEXT: it mi
1127 ; CHECK-MVE-NEXT: movmi r1, #1
1128 ; CHECK-MVE-NEXT: it gt
1129 ; CHECK-MVE-NEXT: movgt r1, #1
1130 ; CHECK-MVE-NEXT: cmp r1, #0
1131 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
1132 ; CHECK-MVE-NEXT: it ne
1133 ; CHECK-MVE-NEXT: movne r1, #1
1134 ; CHECK-MVE-NEXT: vmov s22, r2
1135 ; CHECK-MVE-NEXT: cmp r1, #0
1136 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1137 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
1138 ; CHECK-MVE-NEXT: vmov r1, s20
1139 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
1140 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
1141 ; CHECK-MVE-NEXT: vmov s20, r1
1142 ; CHECK-MVE-NEXT: movs r1, #0
1143 ; CHECK-MVE-NEXT: vmov s22, r2
1144 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
1145 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
1146 ; CHECK-MVE-NEXT: vmov s20, r2
1147 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1148 ; CHECK-MVE-NEXT: it mi
1149 ; CHECK-MVE-NEXT: movmi r1, #1
1150 ; CHECK-MVE-NEXT: it gt
1151 ; CHECK-MVE-NEXT: movgt r1, #1
1152 ; CHECK-MVE-NEXT: cmp r1, #0
1153 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
1154 ; CHECK-MVE-NEXT: it ne
1155 ; CHECK-MVE-NEXT: movne r1, #1
1156 ; CHECK-MVE-NEXT: vmov s22, r2
1157 ; CHECK-MVE-NEXT: cmp r1, #0
1158 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1159 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
1160 ; CHECK-MVE-NEXT: vmov r1, s20
1161 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
1162 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
1163 ; CHECK-MVE-NEXT: vmov s20, r1
1164 ; CHECK-MVE-NEXT: movs r1, #0
1165 ; CHECK-MVE-NEXT: vmov s22, r2
1166 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
1167 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
1168 ; CHECK-MVE-NEXT: vmov s20, r2
1169 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1170 ; CHECK-MVE-NEXT: it mi
1171 ; CHECK-MVE-NEXT: movmi r1, #1
1172 ; CHECK-MVE-NEXT: it gt
1173 ; CHECK-MVE-NEXT: movgt r1, #1
1174 ; CHECK-MVE-NEXT: cmp r1, #0
1175 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
1176 ; CHECK-MVE-NEXT: it ne
1177 ; CHECK-MVE-NEXT: movne r1, #1
1178 ; CHECK-MVE-NEXT: vmov s22, r2
1179 ; CHECK-MVE-NEXT: cmp r1, #0
1180 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1181 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
1182 ; CHECK-MVE-NEXT: vmov r1, s20
1183 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
1184 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
1185 ; CHECK-MVE-NEXT: vmov s0, r1
1186 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
1187 ; CHECK-MVE-NEXT: vmov s2, r2
1188 ; CHECK-MVE-NEXT: vcmp.f16 s2, s0
1189 ; CHECK-MVE-NEXT: vmov s0, r1
1190 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1191 ; CHECK-MVE-NEXT: it mi
1192 ; CHECK-MVE-NEXT: movmi r0, #1
1193 ; CHECK-MVE-NEXT: it gt
1194 ; CHECK-MVE-NEXT: movgt r0, #1
1195 ; CHECK-MVE-NEXT: cmp r0, #0
1196 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
1197 ; CHECK-MVE-NEXT: it ne
1198 ; CHECK-MVE-NEXT: movne r0, #1
1199 ; CHECK-MVE-NEXT: vmov s2, r1
1200 ; CHECK-MVE-NEXT: cmp r0, #0
1201 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
1202 ; CHECK-MVE-NEXT: vmov r0, s0
1203 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
1204 ; CHECK-MVE-NEXT: vmov q0, q4
1205 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
1206 ; CHECK-MVE-NEXT: bx lr
1208 ; CHECK-MVEFP-LABEL: vcmp_one_v8f16:
1209 ; CHECK-MVEFP: @ %bb.0: @ %entry
1210 ; CHECK-MVEFP-NEXT: vcmp.f16 le, q1, q0
1211 ; CHECK-MVEFP-NEXT: movw r1, #65535
1212 ; CHECK-MVEFP-NEXT: vpst
1213 ; CHECK-MVEFP-NEXT: vcmpt.f16 le, q0, q1
1214 ; CHECK-MVEFP-NEXT: vmrs r0, p0
1215 ; CHECK-MVEFP-NEXT: eors r0, r1
1216 ; CHECK-MVEFP-NEXT: vmsr p0, r0
1217 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
1218 ; CHECK-MVEFP-NEXT: bx lr
1220 %c = fcmp one <8 x half> %src, %src2
1221 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1225 define arm_aapcs_vfpcc <8 x half> @vcmp_ogt_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1226 ; CHECK-MVE-LABEL: vcmp_ogt_v8f16:
1227 ; CHECK-MVE: @ %bb.0: @ %entry
1228 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
1229 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
1230 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
1231 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
1232 ; CHECK-MVE-NEXT: vmov s16, r1
1233 ; CHECK-MVE-NEXT: movs r1, #0
1234 ; CHECK-MVE-NEXT: vmov s18, r2
1235 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
1236 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1237 ; CHECK-MVE-NEXT: vmov s16, r2
1238 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1239 ; CHECK-MVE-NEXT: it gt
1240 ; CHECK-MVE-NEXT: movgt r1, #1
1241 ; CHECK-MVE-NEXT: cmp r1, #0
1242 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
1243 ; CHECK-MVE-NEXT: it ne
1244 ; CHECK-MVE-NEXT: movne r1, #1
1245 ; CHECK-MVE-NEXT: vmov s18, r2
1246 ; CHECK-MVE-NEXT: cmp r1, #0
1247 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
1248 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1249 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
1250 ; CHECK-MVE-NEXT: vmov r1, s16
1251 ; CHECK-MVE-NEXT: movs r0, #0
1252 ; CHECK-MVE-NEXT: vmov s16, r2
1253 ; CHECK-MVE-NEXT: movs r2, #0
1254 ; CHECK-MVE-NEXT: vmov s18, r3
1255 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
1256 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1257 ; CHECK-MVE-NEXT: vmov s16, r3
1258 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1259 ; CHECK-MVE-NEXT: it gt
1260 ; CHECK-MVE-NEXT: movgt r2, #1
1261 ; CHECK-MVE-NEXT: cmp r2, #0
1262 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
1263 ; CHECK-MVE-NEXT: it ne
1264 ; CHECK-MVE-NEXT: movne r2, #1
1265 ; CHECK-MVE-NEXT: vmov s18, r3
1266 ; CHECK-MVE-NEXT: cmp r2, #0
1267 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1268 ; CHECK-MVE-NEXT: vmov r2, s16
1269 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
1270 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
1271 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
1272 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
1273 ; CHECK-MVE-NEXT: vmov s20, r1
1274 ; CHECK-MVE-NEXT: movs r1, #0
1275 ; CHECK-MVE-NEXT: vmov s22, r2
1276 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
1277 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1278 ; CHECK-MVE-NEXT: vmov s20, r2
1279 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1280 ; CHECK-MVE-NEXT: it gt
1281 ; CHECK-MVE-NEXT: movgt r1, #1
1282 ; CHECK-MVE-NEXT: cmp r1, #0
1283 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
1284 ; CHECK-MVE-NEXT: it ne
1285 ; CHECK-MVE-NEXT: movne r1, #1
1286 ; CHECK-MVE-NEXT: vmov s22, r2
1287 ; CHECK-MVE-NEXT: cmp r1, #0
1288 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
1289 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1290 ; CHECK-MVE-NEXT: vmov s22, r2
1291 ; CHECK-MVE-NEXT: vmov r1, s20
1292 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
1293 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
1294 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
1295 ; CHECK-MVE-NEXT: vmov s20, r1
1296 ; CHECK-MVE-NEXT: movs r1, #0
1297 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1298 ; CHECK-MVE-NEXT: vmov s20, r2
1299 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1300 ; CHECK-MVE-NEXT: it gt
1301 ; CHECK-MVE-NEXT: movgt r1, #1
1302 ; CHECK-MVE-NEXT: cmp r1, #0
1303 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
1304 ; CHECK-MVE-NEXT: it ne
1305 ; CHECK-MVE-NEXT: movne r1, #1
1306 ; CHECK-MVE-NEXT: vmov s22, r2
1307 ; CHECK-MVE-NEXT: cmp r1, #0
1308 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
1309 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1310 ; CHECK-MVE-NEXT: vmov s22, r2
1311 ; CHECK-MVE-NEXT: vmov r1, s20
1312 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
1313 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
1314 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
1315 ; CHECK-MVE-NEXT: vmov s20, r1
1316 ; CHECK-MVE-NEXT: movs r1, #0
1317 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1318 ; CHECK-MVE-NEXT: vmov s20, r2
1319 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1320 ; CHECK-MVE-NEXT: it gt
1321 ; CHECK-MVE-NEXT: movgt r1, #1
1322 ; CHECK-MVE-NEXT: cmp r1, #0
1323 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
1324 ; CHECK-MVE-NEXT: it ne
1325 ; CHECK-MVE-NEXT: movne r1, #1
1326 ; CHECK-MVE-NEXT: vmov s22, r2
1327 ; CHECK-MVE-NEXT: cmp r1, #0
1328 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
1329 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1330 ; CHECK-MVE-NEXT: vmov s22, r2
1331 ; CHECK-MVE-NEXT: vmov r1, s20
1332 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
1333 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
1334 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
1335 ; CHECK-MVE-NEXT: vmov s20, r1
1336 ; CHECK-MVE-NEXT: movs r1, #0
1337 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1338 ; CHECK-MVE-NEXT: vmov s20, r2
1339 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1340 ; CHECK-MVE-NEXT: it gt
1341 ; CHECK-MVE-NEXT: movgt r1, #1
1342 ; CHECK-MVE-NEXT: cmp r1, #0
1343 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
1344 ; CHECK-MVE-NEXT: it ne
1345 ; CHECK-MVE-NEXT: movne r1, #1
1346 ; CHECK-MVE-NEXT: vmov s22, r2
1347 ; CHECK-MVE-NEXT: cmp r1, #0
1348 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
1349 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1350 ; CHECK-MVE-NEXT: vmov s22, r2
1351 ; CHECK-MVE-NEXT: vmov r1, s20
1352 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
1353 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
1354 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
1355 ; CHECK-MVE-NEXT: vmov s20, r1
1356 ; CHECK-MVE-NEXT: movs r1, #0
1357 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1358 ; CHECK-MVE-NEXT: vmov s20, r2
1359 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1360 ; CHECK-MVE-NEXT: it gt
1361 ; CHECK-MVE-NEXT: movgt r1, #1
1362 ; CHECK-MVE-NEXT: cmp r1, #0
1363 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
1364 ; CHECK-MVE-NEXT: it ne
1365 ; CHECK-MVE-NEXT: movne r1, #1
1366 ; CHECK-MVE-NEXT: vmov s22, r2
1367 ; CHECK-MVE-NEXT: cmp r1, #0
1368 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
1369 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1370 ; CHECK-MVE-NEXT: vmov s2, r2
1371 ; CHECK-MVE-NEXT: vmov r1, s20
1372 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
1373 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
1374 ; CHECK-MVE-NEXT: vmov s0, r1
1375 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
1376 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
1377 ; CHECK-MVE-NEXT: vmov s0, r1
1378 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1379 ; CHECK-MVE-NEXT: it gt
1380 ; CHECK-MVE-NEXT: movgt r0, #1
1381 ; CHECK-MVE-NEXT: cmp r0, #0
1382 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
1383 ; CHECK-MVE-NEXT: it ne
1384 ; CHECK-MVE-NEXT: movne r0, #1
1385 ; CHECK-MVE-NEXT: vmov s2, r1
1386 ; CHECK-MVE-NEXT: cmp r0, #0
1387 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
1388 ; CHECK-MVE-NEXT: vmov r0, s0
1389 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
1390 ; CHECK-MVE-NEXT: vmov q0, q4
1391 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
1392 ; CHECK-MVE-NEXT: bx lr
1394 ; CHECK-MVEFP-LABEL: vcmp_ogt_v8f16:
1395 ; CHECK-MVEFP: @ %bb.0: @ %entry
1396 ; CHECK-MVEFP-NEXT: vcmp.f16 gt, q0, q1
1397 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
1398 ; CHECK-MVEFP-NEXT: bx lr
1400 %c = fcmp ogt <8 x half> %src, %src2
1401 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1405 define arm_aapcs_vfpcc <8 x half> @vcmp_oge_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1406 ; CHECK-MVE-LABEL: vcmp_oge_v8f16:
1407 ; CHECK-MVE: @ %bb.0: @ %entry
1408 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
1409 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
1410 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
1411 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
1412 ; CHECK-MVE-NEXT: vmov s16, r1
1413 ; CHECK-MVE-NEXT: movs r1, #0
1414 ; CHECK-MVE-NEXT: vmov s18, r2
1415 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
1416 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1417 ; CHECK-MVE-NEXT: vmov s16, r2
1418 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1419 ; CHECK-MVE-NEXT: it ge
1420 ; CHECK-MVE-NEXT: movge r1, #1
1421 ; CHECK-MVE-NEXT: cmp r1, #0
1422 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
1423 ; CHECK-MVE-NEXT: it ne
1424 ; CHECK-MVE-NEXT: movne r1, #1
1425 ; CHECK-MVE-NEXT: vmov s18, r2
1426 ; CHECK-MVE-NEXT: cmp r1, #0
1427 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
1428 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1429 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
1430 ; CHECK-MVE-NEXT: vmov r1, s16
1431 ; CHECK-MVE-NEXT: movs r0, #0
1432 ; CHECK-MVE-NEXT: vmov s16, r2
1433 ; CHECK-MVE-NEXT: movs r2, #0
1434 ; CHECK-MVE-NEXT: vmov s18, r3
1435 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
1436 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1437 ; CHECK-MVE-NEXT: vmov s16, r3
1438 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1439 ; CHECK-MVE-NEXT: it ge
1440 ; CHECK-MVE-NEXT: movge r2, #1
1441 ; CHECK-MVE-NEXT: cmp r2, #0
1442 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
1443 ; CHECK-MVE-NEXT: it ne
1444 ; CHECK-MVE-NEXT: movne r2, #1
1445 ; CHECK-MVE-NEXT: vmov s18, r3
1446 ; CHECK-MVE-NEXT: cmp r2, #0
1447 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1448 ; CHECK-MVE-NEXT: vmov r2, s16
1449 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
1450 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
1451 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
1452 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
1453 ; CHECK-MVE-NEXT: vmov s20, r1
1454 ; CHECK-MVE-NEXT: movs r1, #0
1455 ; CHECK-MVE-NEXT: vmov s22, r2
1456 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
1457 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1458 ; CHECK-MVE-NEXT: vmov s20, r2
1459 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1460 ; CHECK-MVE-NEXT: it ge
1461 ; CHECK-MVE-NEXT: movge r1, #1
1462 ; CHECK-MVE-NEXT: cmp r1, #0
1463 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
1464 ; CHECK-MVE-NEXT: it ne
1465 ; CHECK-MVE-NEXT: movne r1, #1
1466 ; CHECK-MVE-NEXT: vmov s22, r2
1467 ; CHECK-MVE-NEXT: cmp r1, #0
1468 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
1469 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1470 ; CHECK-MVE-NEXT: vmov s22, r2
1471 ; CHECK-MVE-NEXT: vmov r1, s20
1472 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
1473 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
1474 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
1475 ; CHECK-MVE-NEXT: vmov s20, r1
1476 ; CHECK-MVE-NEXT: movs r1, #0
1477 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1478 ; CHECK-MVE-NEXT: vmov s20, r2
1479 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1480 ; CHECK-MVE-NEXT: it ge
1481 ; CHECK-MVE-NEXT: movge r1, #1
1482 ; CHECK-MVE-NEXT: cmp r1, #0
1483 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
1484 ; CHECK-MVE-NEXT: it ne
1485 ; CHECK-MVE-NEXT: movne r1, #1
1486 ; CHECK-MVE-NEXT: vmov s22, r2
1487 ; CHECK-MVE-NEXT: cmp r1, #0
1488 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
1489 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1490 ; CHECK-MVE-NEXT: vmov s22, r2
1491 ; CHECK-MVE-NEXT: vmov r1, s20
1492 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
1493 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
1494 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
1495 ; CHECK-MVE-NEXT: vmov s20, r1
1496 ; CHECK-MVE-NEXT: movs r1, #0
1497 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1498 ; CHECK-MVE-NEXT: vmov s20, r2
1499 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1500 ; CHECK-MVE-NEXT: it ge
1501 ; CHECK-MVE-NEXT: movge r1, #1
1502 ; CHECK-MVE-NEXT: cmp r1, #0
1503 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
1504 ; CHECK-MVE-NEXT: it ne
1505 ; CHECK-MVE-NEXT: movne r1, #1
1506 ; CHECK-MVE-NEXT: vmov s22, r2
1507 ; CHECK-MVE-NEXT: cmp r1, #0
1508 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
1509 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1510 ; CHECK-MVE-NEXT: vmov s22, r2
1511 ; CHECK-MVE-NEXT: vmov r1, s20
1512 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
1513 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
1514 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
1515 ; CHECK-MVE-NEXT: vmov s20, r1
1516 ; CHECK-MVE-NEXT: movs r1, #0
1517 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1518 ; CHECK-MVE-NEXT: vmov s20, r2
1519 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1520 ; CHECK-MVE-NEXT: it ge
1521 ; CHECK-MVE-NEXT: movge r1, #1
1522 ; CHECK-MVE-NEXT: cmp r1, #0
1523 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
1524 ; CHECK-MVE-NEXT: it ne
1525 ; CHECK-MVE-NEXT: movne r1, #1
1526 ; CHECK-MVE-NEXT: vmov s22, r2
1527 ; CHECK-MVE-NEXT: cmp r1, #0
1528 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
1529 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1530 ; CHECK-MVE-NEXT: vmov s22, r2
1531 ; CHECK-MVE-NEXT: vmov r1, s20
1532 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
1533 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
1534 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
1535 ; CHECK-MVE-NEXT: vmov s20, r1
1536 ; CHECK-MVE-NEXT: movs r1, #0
1537 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1538 ; CHECK-MVE-NEXT: vmov s20, r2
1539 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1540 ; CHECK-MVE-NEXT: it ge
1541 ; CHECK-MVE-NEXT: movge r1, #1
1542 ; CHECK-MVE-NEXT: cmp r1, #0
1543 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
1544 ; CHECK-MVE-NEXT: it ne
1545 ; CHECK-MVE-NEXT: movne r1, #1
1546 ; CHECK-MVE-NEXT: vmov s22, r2
1547 ; CHECK-MVE-NEXT: cmp r1, #0
1548 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
1549 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1550 ; CHECK-MVE-NEXT: vmov s2, r2
1551 ; CHECK-MVE-NEXT: vmov r1, s20
1552 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
1553 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
1554 ; CHECK-MVE-NEXT: vmov s0, r1
1555 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
1556 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
1557 ; CHECK-MVE-NEXT: vmov s0, r1
1558 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1559 ; CHECK-MVE-NEXT: it ge
1560 ; CHECK-MVE-NEXT: movge r0, #1
1561 ; CHECK-MVE-NEXT: cmp r0, #0
1562 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
1563 ; CHECK-MVE-NEXT: it ne
1564 ; CHECK-MVE-NEXT: movne r0, #1
1565 ; CHECK-MVE-NEXT: vmov s2, r1
1566 ; CHECK-MVE-NEXT: cmp r0, #0
1567 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
1568 ; CHECK-MVE-NEXT: vmov r0, s0
1569 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
1570 ; CHECK-MVE-NEXT: vmov q0, q4
1571 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
1572 ; CHECK-MVE-NEXT: bx lr
1574 ; CHECK-MVEFP-LABEL: vcmp_oge_v8f16:
1575 ; CHECK-MVEFP: @ %bb.0: @ %entry
1576 ; CHECK-MVEFP-NEXT: vcmp.f16 ge, q0, q1
1577 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
1578 ; CHECK-MVEFP-NEXT: bx lr
1580 %c = fcmp oge <8 x half> %src, %src2
1581 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1585 define arm_aapcs_vfpcc <8 x half> @vcmp_olt_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1586 ; CHECK-MVE-LABEL: vcmp_olt_v8f16:
1587 ; CHECK-MVE: @ %bb.0: @ %entry
1588 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
1589 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
1590 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
1591 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
1592 ; CHECK-MVE-NEXT: vmov s16, r1
1593 ; CHECK-MVE-NEXT: movs r1, #0
1594 ; CHECK-MVE-NEXT: vmov s18, r2
1595 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
1596 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1597 ; CHECK-MVE-NEXT: vmov s16, r2
1598 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1599 ; CHECK-MVE-NEXT: it mi
1600 ; CHECK-MVE-NEXT: movmi r1, #1
1601 ; CHECK-MVE-NEXT: cmp r1, #0
1602 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
1603 ; CHECK-MVE-NEXT: it ne
1604 ; CHECK-MVE-NEXT: movne r1, #1
1605 ; CHECK-MVE-NEXT: vmov s18, r2
1606 ; CHECK-MVE-NEXT: cmp r1, #0
1607 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
1608 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1609 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
1610 ; CHECK-MVE-NEXT: vmov r1, s16
1611 ; CHECK-MVE-NEXT: movs r0, #0
1612 ; CHECK-MVE-NEXT: vmov s16, r2
1613 ; CHECK-MVE-NEXT: movs r2, #0
1614 ; CHECK-MVE-NEXT: vmov s18, r3
1615 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
1616 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1617 ; CHECK-MVE-NEXT: vmov s16, r3
1618 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1619 ; CHECK-MVE-NEXT: it mi
1620 ; CHECK-MVE-NEXT: movmi r2, #1
1621 ; CHECK-MVE-NEXT: cmp r2, #0
1622 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
1623 ; CHECK-MVE-NEXT: it ne
1624 ; CHECK-MVE-NEXT: movne r2, #1
1625 ; CHECK-MVE-NEXT: vmov s18, r3
1626 ; CHECK-MVE-NEXT: cmp r2, #0
1627 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1628 ; CHECK-MVE-NEXT: vmov r2, s16
1629 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
1630 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
1631 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
1632 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
1633 ; CHECK-MVE-NEXT: vmov s20, r1
1634 ; CHECK-MVE-NEXT: movs r1, #0
1635 ; CHECK-MVE-NEXT: vmov s22, r2
1636 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
1637 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1638 ; CHECK-MVE-NEXT: vmov s20, r2
1639 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1640 ; CHECK-MVE-NEXT: it mi
1641 ; CHECK-MVE-NEXT: movmi r1, #1
1642 ; CHECK-MVE-NEXT: cmp r1, #0
1643 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
1644 ; CHECK-MVE-NEXT: it ne
1645 ; CHECK-MVE-NEXT: movne r1, #1
1646 ; CHECK-MVE-NEXT: vmov s22, r2
1647 ; CHECK-MVE-NEXT: cmp r1, #0
1648 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
1649 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1650 ; CHECK-MVE-NEXT: vmov s22, r2
1651 ; CHECK-MVE-NEXT: vmov r1, s20
1652 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
1653 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
1654 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
1655 ; CHECK-MVE-NEXT: vmov s20, r1
1656 ; CHECK-MVE-NEXT: movs r1, #0
1657 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1658 ; CHECK-MVE-NEXT: vmov s20, r2
1659 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1660 ; CHECK-MVE-NEXT: it mi
1661 ; CHECK-MVE-NEXT: movmi r1, #1
1662 ; CHECK-MVE-NEXT: cmp r1, #0
1663 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
1664 ; CHECK-MVE-NEXT: it ne
1665 ; CHECK-MVE-NEXT: movne r1, #1
1666 ; CHECK-MVE-NEXT: vmov s22, r2
1667 ; CHECK-MVE-NEXT: cmp r1, #0
1668 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
1669 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1670 ; CHECK-MVE-NEXT: vmov s22, r2
1671 ; CHECK-MVE-NEXT: vmov r1, s20
1672 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
1673 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
1674 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
1675 ; CHECK-MVE-NEXT: vmov s20, r1
1676 ; CHECK-MVE-NEXT: movs r1, #0
1677 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1678 ; CHECK-MVE-NEXT: vmov s20, r2
1679 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1680 ; CHECK-MVE-NEXT: it mi
1681 ; CHECK-MVE-NEXT: movmi r1, #1
1682 ; CHECK-MVE-NEXT: cmp r1, #0
1683 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
1684 ; CHECK-MVE-NEXT: it ne
1685 ; CHECK-MVE-NEXT: movne r1, #1
1686 ; CHECK-MVE-NEXT: vmov s22, r2
1687 ; CHECK-MVE-NEXT: cmp r1, #0
1688 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
1689 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1690 ; CHECK-MVE-NEXT: vmov s22, r2
1691 ; CHECK-MVE-NEXT: vmov r1, s20
1692 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
1693 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
1694 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
1695 ; CHECK-MVE-NEXT: vmov s20, r1
1696 ; CHECK-MVE-NEXT: movs r1, #0
1697 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1698 ; CHECK-MVE-NEXT: vmov s20, r2
1699 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1700 ; CHECK-MVE-NEXT: it mi
1701 ; CHECK-MVE-NEXT: movmi r1, #1
1702 ; CHECK-MVE-NEXT: cmp r1, #0
1703 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
1704 ; CHECK-MVE-NEXT: it ne
1705 ; CHECK-MVE-NEXT: movne r1, #1
1706 ; CHECK-MVE-NEXT: vmov s22, r2
1707 ; CHECK-MVE-NEXT: cmp r1, #0
1708 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
1709 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1710 ; CHECK-MVE-NEXT: vmov s22, r2
1711 ; CHECK-MVE-NEXT: vmov r1, s20
1712 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
1713 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
1714 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
1715 ; CHECK-MVE-NEXT: vmov s20, r1
1716 ; CHECK-MVE-NEXT: movs r1, #0
1717 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1718 ; CHECK-MVE-NEXT: vmov s20, r2
1719 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1720 ; CHECK-MVE-NEXT: it mi
1721 ; CHECK-MVE-NEXT: movmi r1, #1
1722 ; CHECK-MVE-NEXT: cmp r1, #0
1723 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
1724 ; CHECK-MVE-NEXT: it ne
1725 ; CHECK-MVE-NEXT: movne r1, #1
1726 ; CHECK-MVE-NEXT: vmov s22, r2
1727 ; CHECK-MVE-NEXT: cmp r1, #0
1728 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
1729 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1730 ; CHECK-MVE-NEXT: vmov s2, r2
1731 ; CHECK-MVE-NEXT: vmov r1, s20
1732 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
1733 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
1734 ; CHECK-MVE-NEXT: vmov s0, r1
1735 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
1736 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
1737 ; CHECK-MVE-NEXT: vmov s0, r1
1738 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1739 ; CHECK-MVE-NEXT: it mi
1740 ; CHECK-MVE-NEXT: movmi r0, #1
1741 ; CHECK-MVE-NEXT: cmp r0, #0
1742 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
1743 ; CHECK-MVE-NEXT: it ne
1744 ; CHECK-MVE-NEXT: movne r0, #1
1745 ; CHECK-MVE-NEXT: vmov s2, r1
1746 ; CHECK-MVE-NEXT: cmp r0, #0
1747 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
1748 ; CHECK-MVE-NEXT: vmov r0, s0
1749 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
1750 ; CHECK-MVE-NEXT: vmov q0, q4
1751 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
1752 ; CHECK-MVE-NEXT: bx lr
1754 ; CHECK-MVEFP-LABEL: vcmp_olt_v8f16:
1755 ; CHECK-MVEFP: @ %bb.0: @ %entry
1756 ; CHECK-MVEFP-NEXT: vcmp.f16 gt, q1, q0
1757 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
1758 ; CHECK-MVEFP-NEXT: bx lr
1760 %c = fcmp olt <8 x half> %src, %src2
1761 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1765 define arm_aapcs_vfpcc <8 x half> @vcmp_ole_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1766 ; CHECK-MVE-LABEL: vcmp_ole_v8f16:
1767 ; CHECK-MVE: @ %bb.0: @ %entry
1768 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
1769 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
1770 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
1771 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
1772 ; CHECK-MVE-NEXT: vmov s16, r1
1773 ; CHECK-MVE-NEXT: movs r1, #0
1774 ; CHECK-MVE-NEXT: vmov s18, r2
1775 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
1776 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1777 ; CHECK-MVE-NEXT: vmov s16, r2
1778 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1779 ; CHECK-MVE-NEXT: it ls
1780 ; CHECK-MVE-NEXT: movls r1, #1
1781 ; CHECK-MVE-NEXT: cmp r1, #0
1782 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
1783 ; CHECK-MVE-NEXT: it ne
1784 ; CHECK-MVE-NEXT: movne r1, #1
1785 ; CHECK-MVE-NEXT: vmov s18, r2
1786 ; CHECK-MVE-NEXT: cmp r1, #0
1787 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
1788 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1789 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
1790 ; CHECK-MVE-NEXT: vmov r1, s16
1791 ; CHECK-MVE-NEXT: movs r0, #0
1792 ; CHECK-MVE-NEXT: vmov s16, r2
1793 ; CHECK-MVE-NEXT: movs r2, #0
1794 ; CHECK-MVE-NEXT: vmov s18, r3
1795 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
1796 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
1797 ; CHECK-MVE-NEXT: vmov s16, r3
1798 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1799 ; CHECK-MVE-NEXT: it ls
1800 ; CHECK-MVE-NEXT: movls r2, #1
1801 ; CHECK-MVE-NEXT: cmp r2, #0
1802 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
1803 ; CHECK-MVE-NEXT: it ne
1804 ; CHECK-MVE-NEXT: movne r2, #1
1805 ; CHECK-MVE-NEXT: vmov s18, r3
1806 ; CHECK-MVE-NEXT: cmp r2, #0
1807 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1808 ; CHECK-MVE-NEXT: vmov r2, s16
1809 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
1810 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
1811 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
1812 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
1813 ; CHECK-MVE-NEXT: vmov s20, r1
1814 ; CHECK-MVE-NEXT: movs r1, #0
1815 ; CHECK-MVE-NEXT: vmov s22, r2
1816 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
1817 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1818 ; CHECK-MVE-NEXT: vmov s20, r2
1819 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1820 ; CHECK-MVE-NEXT: it ls
1821 ; CHECK-MVE-NEXT: movls r1, #1
1822 ; CHECK-MVE-NEXT: cmp r1, #0
1823 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
1824 ; CHECK-MVE-NEXT: it ne
1825 ; CHECK-MVE-NEXT: movne r1, #1
1826 ; CHECK-MVE-NEXT: vmov s22, r2
1827 ; CHECK-MVE-NEXT: cmp r1, #0
1828 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
1829 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1830 ; CHECK-MVE-NEXT: vmov s22, r2
1831 ; CHECK-MVE-NEXT: vmov r1, s20
1832 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
1833 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
1834 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
1835 ; CHECK-MVE-NEXT: vmov s20, r1
1836 ; CHECK-MVE-NEXT: movs r1, #0
1837 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1838 ; CHECK-MVE-NEXT: vmov s20, r2
1839 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1840 ; CHECK-MVE-NEXT: it ls
1841 ; CHECK-MVE-NEXT: movls r1, #1
1842 ; CHECK-MVE-NEXT: cmp r1, #0
1843 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
1844 ; CHECK-MVE-NEXT: it ne
1845 ; CHECK-MVE-NEXT: movne r1, #1
1846 ; CHECK-MVE-NEXT: vmov s22, r2
1847 ; CHECK-MVE-NEXT: cmp r1, #0
1848 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
1849 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1850 ; CHECK-MVE-NEXT: vmov s22, r2
1851 ; CHECK-MVE-NEXT: vmov r1, s20
1852 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
1853 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
1854 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
1855 ; CHECK-MVE-NEXT: vmov s20, r1
1856 ; CHECK-MVE-NEXT: movs r1, #0
1857 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1858 ; CHECK-MVE-NEXT: vmov s20, r2
1859 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1860 ; CHECK-MVE-NEXT: it ls
1861 ; CHECK-MVE-NEXT: movls r1, #1
1862 ; CHECK-MVE-NEXT: cmp r1, #0
1863 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
1864 ; CHECK-MVE-NEXT: it ne
1865 ; CHECK-MVE-NEXT: movne r1, #1
1866 ; CHECK-MVE-NEXT: vmov s22, r2
1867 ; CHECK-MVE-NEXT: cmp r1, #0
1868 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
1869 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1870 ; CHECK-MVE-NEXT: vmov s22, r2
1871 ; CHECK-MVE-NEXT: vmov r1, s20
1872 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
1873 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
1874 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
1875 ; CHECK-MVE-NEXT: vmov s20, r1
1876 ; CHECK-MVE-NEXT: movs r1, #0
1877 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1878 ; CHECK-MVE-NEXT: vmov s20, r2
1879 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1880 ; CHECK-MVE-NEXT: it ls
1881 ; CHECK-MVE-NEXT: movls r1, #1
1882 ; CHECK-MVE-NEXT: cmp r1, #0
1883 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
1884 ; CHECK-MVE-NEXT: it ne
1885 ; CHECK-MVE-NEXT: movne r1, #1
1886 ; CHECK-MVE-NEXT: vmov s22, r2
1887 ; CHECK-MVE-NEXT: cmp r1, #0
1888 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
1889 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1890 ; CHECK-MVE-NEXT: vmov s22, r2
1891 ; CHECK-MVE-NEXT: vmov r1, s20
1892 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
1893 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
1894 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
1895 ; CHECK-MVE-NEXT: vmov s20, r1
1896 ; CHECK-MVE-NEXT: movs r1, #0
1897 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
1898 ; CHECK-MVE-NEXT: vmov s20, r2
1899 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1900 ; CHECK-MVE-NEXT: it ls
1901 ; CHECK-MVE-NEXT: movls r1, #1
1902 ; CHECK-MVE-NEXT: cmp r1, #0
1903 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
1904 ; CHECK-MVE-NEXT: it ne
1905 ; CHECK-MVE-NEXT: movne r1, #1
1906 ; CHECK-MVE-NEXT: vmov s22, r2
1907 ; CHECK-MVE-NEXT: cmp r1, #0
1908 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
1909 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
1910 ; CHECK-MVE-NEXT: vmov s2, r2
1911 ; CHECK-MVE-NEXT: vmov r1, s20
1912 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
1913 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
1914 ; CHECK-MVE-NEXT: vmov s0, r1
1915 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
1916 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
1917 ; CHECK-MVE-NEXT: vmov s0, r1
1918 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1919 ; CHECK-MVE-NEXT: it ls
1920 ; CHECK-MVE-NEXT: movls r0, #1
1921 ; CHECK-MVE-NEXT: cmp r0, #0
1922 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
1923 ; CHECK-MVE-NEXT: it ne
1924 ; CHECK-MVE-NEXT: movne r0, #1
1925 ; CHECK-MVE-NEXT: vmov s2, r1
1926 ; CHECK-MVE-NEXT: cmp r0, #0
1927 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
1928 ; CHECK-MVE-NEXT: vmov r0, s0
1929 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
1930 ; CHECK-MVE-NEXT: vmov q0, q4
1931 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
1932 ; CHECK-MVE-NEXT: bx lr
1934 ; CHECK-MVEFP-LABEL: vcmp_ole_v8f16:
1935 ; CHECK-MVEFP: @ %bb.0: @ %entry
1936 ; CHECK-MVEFP-NEXT: vcmp.f16 ge, q1, q0
1937 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
1938 ; CHECK-MVEFP-NEXT: bx lr
1940 %c = fcmp ole <8 x half> %src, %src2
1941 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1945 define arm_aapcs_vfpcc <8 x half> @vcmp_ueq_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1946 ; CHECK-MVE-LABEL: vcmp_ueq_v8f16:
1947 ; CHECK-MVE: @ %bb.0: @ %entry
1948 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
1949 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
1950 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
1951 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
1952 ; CHECK-MVE-NEXT: vmov s16, r1
1953 ; CHECK-MVE-NEXT: movs r1, #0
1954 ; CHECK-MVE-NEXT: vmov s18, r2
1955 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
1956 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
1957 ; CHECK-MVE-NEXT: vmov s16, r2
1958 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1959 ; CHECK-MVE-NEXT: it eq
1960 ; CHECK-MVE-NEXT: moveq r1, #1
1961 ; CHECK-MVE-NEXT: it vs
1962 ; CHECK-MVE-NEXT: movvs r1, #1
1963 ; CHECK-MVE-NEXT: cmp r1, #0
1964 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
1965 ; CHECK-MVE-NEXT: it ne
1966 ; CHECK-MVE-NEXT: movne r1, #1
1967 ; CHECK-MVE-NEXT: vmov s18, r2
1968 ; CHECK-MVE-NEXT: cmp r1, #0
1969 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1970 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
1971 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
1972 ; CHECK-MVE-NEXT: vmov r1, s16
1973 ; CHECK-MVE-NEXT: vmov s16, r2
1974 ; CHECK-MVE-NEXT: movs r2, #0
1975 ; CHECK-MVE-NEXT: vmov s18, r3
1976 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
1977 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
1978 ; CHECK-MVE-NEXT: vmov s16, r3
1979 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
1980 ; CHECK-MVE-NEXT: it eq
1981 ; CHECK-MVE-NEXT: moveq r2, #1
1982 ; CHECK-MVE-NEXT: it vs
1983 ; CHECK-MVE-NEXT: movvs r2, #1
1984 ; CHECK-MVE-NEXT: cmp r2, #0
1985 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
1986 ; CHECK-MVE-NEXT: it ne
1987 ; CHECK-MVE-NEXT: movne r2, #1
1988 ; CHECK-MVE-NEXT: vmov s18, r3
1989 ; CHECK-MVE-NEXT: cmp r2, #0
1990 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
1991 ; CHECK-MVE-NEXT: movs r0, #0
1992 ; CHECK-MVE-NEXT: vmov r2, s16
1993 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
1994 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
1995 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
1996 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
1997 ; CHECK-MVE-NEXT: vmov s20, r1
1998 ; CHECK-MVE-NEXT: movs r1, #0
1999 ; CHECK-MVE-NEXT: vmov s22, r2
2000 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
2001 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2002 ; CHECK-MVE-NEXT: vmov s20, r2
2003 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2004 ; CHECK-MVE-NEXT: it eq
2005 ; CHECK-MVE-NEXT: moveq r1, #1
2006 ; CHECK-MVE-NEXT: it vs
2007 ; CHECK-MVE-NEXT: movvs r1, #1
2008 ; CHECK-MVE-NEXT: cmp r1, #0
2009 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
2010 ; CHECK-MVE-NEXT: it ne
2011 ; CHECK-MVE-NEXT: movne r1, #1
2012 ; CHECK-MVE-NEXT: vmov s22, r2
2013 ; CHECK-MVE-NEXT: cmp r1, #0
2014 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2015 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
2016 ; CHECK-MVE-NEXT: vmov r1, s20
2017 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
2018 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
2019 ; CHECK-MVE-NEXT: vmov s20, r1
2020 ; CHECK-MVE-NEXT: movs r1, #0
2021 ; CHECK-MVE-NEXT: vmov s22, r2
2022 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
2023 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2024 ; CHECK-MVE-NEXT: vmov s20, r2
2025 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2026 ; CHECK-MVE-NEXT: it eq
2027 ; CHECK-MVE-NEXT: moveq r1, #1
2028 ; CHECK-MVE-NEXT: it vs
2029 ; CHECK-MVE-NEXT: movvs r1, #1
2030 ; CHECK-MVE-NEXT: cmp r1, #0
2031 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
2032 ; CHECK-MVE-NEXT: it ne
2033 ; CHECK-MVE-NEXT: movne r1, #1
2034 ; CHECK-MVE-NEXT: vmov s22, r2
2035 ; CHECK-MVE-NEXT: cmp r1, #0
2036 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2037 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
2038 ; CHECK-MVE-NEXT: vmov r1, s20
2039 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
2040 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
2041 ; CHECK-MVE-NEXT: vmov s20, r1
2042 ; CHECK-MVE-NEXT: movs r1, #0
2043 ; CHECK-MVE-NEXT: vmov s22, r2
2044 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
2045 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2046 ; CHECK-MVE-NEXT: vmov s20, r2
2047 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2048 ; CHECK-MVE-NEXT: it eq
2049 ; CHECK-MVE-NEXT: moveq r1, #1
2050 ; CHECK-MVE-NEXT: it vs
2051 ; CHECK-MVE-NEXT: movvs r1, #1
2052 ; CHECK-MVE-NEXT: cmp r1, #0
2053 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
2054 ; CHECK-MVE-NEXT: it ne
2055 ; CHECK-MVE-NEXT: movne r1, #1
2056 ; CHECK-MVE-NEXT: vmov s22, r2
2057 ; CHECK-MVE-NEXT: cmp r1, #0
2058 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2059 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
2060 ; CHECK-MVE-NEXT: vmov r1, s20
2061 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
2062 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
2063 ; CHECK-MVE-NEXT: vmov s20, r1
2064 ; CHECK-MVE-NEXT: movs r1, #0
2065 ; CHECK-MVE-NEXT: vmov s22, r2
2066 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
2067 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2068 ; CHECK-MVE-NEXT: vmov s20, r2
2069 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2070 ; CHECK-MVE-NEXT: it eq
2071 ; CHECK-MVE-NEXT: moveq r1, #1
2072 ; CHECK-MVE-NEXT: it vs
2073 ; CHECK-MVE-NEXT: movvs r1, #1
2074 ; CHECK-MVE-NEXT: cmp r1, #0
2075 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
2076 ; CHECK-MVE-NEXT: it ne
2077 ; CHECK-MVE-NEXT: movne r1, #1
2078 ; CHECK-MVE-NEXT: vmov s22, r2
2079 ; CHECK-MVE-NEXT: cmp r1, #0
2080 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2081 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
2082 ; CHECK-MVE-NEXT: vmov r1, s20
2083 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
2084 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
2085 ; CHECK-MVE-NEXT: vmov s20, r1
2086 ; CHECK-MVE-NEXT: movs r1, #0
2087 ; CHECK-MVE-NEXT: vmov s22, r2
2088 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
2089 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2090 ; CHECK-MVE-NEXT: vmov s20, r2
2091 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2092 ; CHECK-MVE-NEXT: it eq
2093 ; CHECK-MVE-NEXT: moveq r1, #1
2094 ; CHECK-MVE-NEXT: it vs
2095 ; CHECK-MVE-NEXT: movvs r1, #1
2096 ; CHECK-MVE-NEXT: cmp r1, #0
2097 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
2098 ; CHECK-MVE-NEXT: it ne
2099 ; CHECK-MVE-NEXT: movne r1, #1
2100 ; CHECK-MVE-NEXT: vmov s22, r2
2101 ; CHECK-MVE-NEXT: cmp r1, #0
2102 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2103 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
2104 ; CHECK-MVE-NEXT: vmov r1, s20
2105 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
2106 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
2107 ; CHECK-MVE-NEXT: vmov s0, r1
2108 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
2109 ; CHECK-MVE-NEXT: vmov s2, r2
2110 ; CHECK-MVE-NEXT: vcmp.f16 s2, s0
2111 ; CHECK-MVE-NEXT: vmov s0, r1
2112 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2113 ; CHECK-MVE-NEXT: it eq
2114 ; CHECK-MVE-NEXT: moveq r0, #1
2115 ; CHECK-MVE-NEXT: it vs
2116 ; CHECK-MVE-NEXT: movvs r0, #1
2117 ; CHECK-MVE-NEXT: cmp r0, #0
2118 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
2119 ; CHECK-MVE-NEXT: it ne
2120 ; CHECK-MVE-NEXT: movne r0, #1
2121 ; CHECK-MVE-NEXT: vmov s2, r1
2122 ; CHECK-MVE-NEXT: cmp r0, #0
2123 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
2124 ; CHECK-MVE-NEXT: vmov r0, s0
2125 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
2126 ; CHECK-MVE-NEXT: vmov q0, q4
2127 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
2128 ; CHECK-MVE-NEXT: bx lr
2130 ; CHECK-MVEFP-LABEL: vcmp_ueq_v8f16:
2131 ; CHECK-MVEFP: @ %bb.0: @ %entry
2132 ; CHECK-MVEFP-NEXT: vcmp.f16 le, q1, q0
2133 ; CHECK-MVEFP-NEXT: vpst
2134 ; CHECK-MVEFP-NEXT: vcmpt.f16 le, q0, q1
2135 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
2136 ; CHECK-MVEFP-NEXT: bx lr
2138 %c = fcmp ueq <8 x half> %src, %src2
2139 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2143 define arm_aapcs_vfpcc <8 x half> @vcmp_une_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
2144 ; CHECK-MVE-LABEL: vcmp_une_v8f16:
2145 ; CHECK-MVE: @ %bb.0: @ %entry
2146 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
2147 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
2148 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
2149 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
2150 ; CHECK-MVE-NEXT: vmov s16, r1
2151 ; CHECK-MVE-NEXT: movs r1, #0
2152 ; CHECK-MVE-NEXT: vmov s18, r2
2153 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
2154 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
2155 ; CHECK-MVE-NEXT: vmov s16, r2
2156 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2157 ; CHECK-MVE-NEXT: it ne
2158 ; CHECK-MVE-NEXT: movne r1, #1
2159 ; CHECK-MVE-NEXT: cmp r1, #0
2160 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
2161 ; CHECK-MVE-NEXT: it ne
2162 ; CHECK-MVE-NEXT: movne r1, #1
2163 ; CHECK-MVE-NEXT: vmov s18, r2
2164 ; CHECK-MVE-NEXT: cmp r1, #0
2165 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
2166 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2167 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
2168 ; CHECK-MVE-NEXT: vmov r1, s16
2169 ; CHECK-MVE-NEXT: movs r0, #0
2170 ; CHECK-MVE-NEXT: vmov s16, r2
2171 ; CHECK-MVE-NEXT: movs r2, #0
2172 ; CHECK-MVE-NEXT: vmov s18, r3
2173 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
2174 ; CHECK-MVE-NEXT: vcmp.f16 s18, s16
2175 ; CHECK-MVE-NEXT: vmov s16, r3
2176 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2177 ; CHECK-MVE-NEXT: it ne
2178 ; CHECK-MVE-NEXT: movne r2, #1
2179 ; CHECK-MVE-NEXT: cmp r2, #0
2180 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
2181 ; CHECK-MVE-NEXT: it ne
2182 ; CHECK-MVE-NEXT: movne r2, #1
2183 ; CHECK-MVE-NEXT: vmov s18, r3
2184 ; CHECK-MVE-NEXT: cmp r2, #0
2185 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2186 ; CHECK-MVE-NEXT: vmov r2, s16
2187 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
2188 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
2189 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
2190 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
2191 ; CHECK-MVE-NEXT: vmov s20, r1
2192 ; CHECK-MVE-NEXT: movs r1, #0
2193 ; CHECK-MVE-NEXT: vmov s22, r2
2194 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
2195 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2196 ; CHECK-MVE-NEXT: vmov s20, r2
2197 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2198 ; CHECK-MVE-NEXT: it ne
2199 ; CHECK-MVE-NEXT: movne r1, #1
2200 ; CHECK-MVE-NEXT: cmp r1, #0
2201 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
2202 ; CHECK-MVE-NEXT: it ne
2203 ; CHECK-MVE-NEXT: movne r1, #1
2204 ; CHECK-MVE-NEXT: vmov s22, r2
2205 ; CHECK-MVE-NEXT: cmp r1, #0
2206 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
2207 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2208 ; CHECK-MVE-NEXT: vmov s22, r2
2209 ; CHECK-MVE-NEXT: vmov r1, s20
2210 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
2211 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
2212 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
2213 ; CHECK-MVE-NEXT: vmov s20, r1
2214 ; CHECK-MVE-NEXT: movs r1, #0
2215 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2216 ; CHECK-MVE-NEXT: vmov s20, r2
2217 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2218 ; CHECK-MVE-NEXT: it ne
2219 ; CHECK-MVE-NEXT: movne r1, #1
2220 ; CHECK-MVE-NEXT: cmp r1, #0
2221 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
2222 ; CHECK-MVE-NEXT: it ne
2223 ; CHECK-MVE-NEXT: movne r1, #1
2224 ; CHECK-MVE-NEXT: vmov s22, r2
2225 ; CHECK-MVE-NEXT: cmp r1, #0
2226 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
2227 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2228 ; CHECK-MVE-NEXT: vmov s22, r2
2229 ; CHECK-MVE-NEXT: vmov r1, s20
2230 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
2231 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
2232 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
2233 ; CHECK-MVE-NEXT: vmov s20, r1
2234 ; CHECK-MVE-NEXT: movs r1, #0
2235 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2236 ; CHECK-MVE-NEXT: vmov s20, r2
2237 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2238 ; CHECK-MVE-NEXT: it ne
2239 ; CHECK-MVE-NEXT: movne r1, #1
2240 ; CHECK-MVE-NEXT: cmp r1, #0
2241 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
2242 ; CHECK-MVE-NEXT: it ne
2243 ; CHECK-MVE-NEXT: movne r1, #1
2244 ; CHECK-MVE-NEXT: vmov s22, r2
2245 ; CHECK-MVE-NEXT: cmp r1, #0
2246 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
2247 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2248 ; CHECK-MVE-NEXT: vmov s22, r2
2249 ; CHECK-MVE-NEXT: vmov r1, s20
2250 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
2251 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
2252 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
2253 ; CHECK-MVE-NEXT: vmov s20, r1
2254 ; CHECK-MVE-NEXT: movs r1, #0
2255 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2256 ; CHECK-MVE-NEXT: vmov s20, r2
2257 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2258 ; CHECK-MVE-NEXT: it ne
2259 ; CHECK-MVE-NEXT: movne r1, #1
2260 ; CHECK-MVE-NEXT: cmp r1, #0
2261 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
2262 ; CHECK-MVE-NEXT: it ne
2263 ; CHECK-MVE-NEXT: movne r1, #1
2264 ; CHECK-MVE-NEXT: vmov s22, r2
2265 ; CHECK-MVE-NEXT: cmp r1, #0
2266 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
2267 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2268 ; CHECK-MVE-NEXT: vmov s22, r2
2269 ; CHECK-MVE-NEXT: vmov r1, s20
2270 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
2271 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
2272 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
2273 ; CHECK-MVE-NEXT: vmov s20, r1
2274 ; CHECK-MVE-NEXT: movs r1, #0
2275 ; CHECK-MVE-NEXT: vcmp.f16 s22, s20
2276 ; CHECK-MVE-NEXT: vmov s20, r2
2277 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2278 ; CHECK-MVE-NEXT: it ne
2279 ; CHECK-MVE-NEXT: movne r1, #1
2280 ; CHECK-MVE-NEXT: cmp r1, #0
2281 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
2282 ; CHECK-MVE-NEXT: it ne
2283 ; CHECK-MVE-NEXT: movne r1, #1
2284 ; CHECK-MVE-NEXT: vmov s22, r2
2285 ; CHECK-MVE-NEXT: cmp r1, #0
2286 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
2287 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2288 ; CHECK-MVE-NEXT: vmov s2, r2
2289 ; CHECK-MVE-NEXT: vmov r1, s20
2290 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
2291 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
2292 ; CHECK-MVE-NEXT: vmov s0, r1
2293 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
2294 ; CHECK-MVE-NEXT: vcmp.f16 s2, s0
2295 ; CHECK-MVE-NEXT: vmov s0, r1
2296 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2297 ; CHECK-MVE-NEXT: it ne
2298 ; CHECK-MVE-NEXT: movne r0, #1
2299 ; CHECK-MVE-NEXT: cmp r0, #0
2300 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
2301 ; CHECK-MVE-NEXT: it ne
2302 ; CHECK-MVE-NEXT: movne r0, #1
2303 ; CHECK-MVE-NEXT: vmov s2, r1
2304 ; CHECK-MVE-NEXT: cmp r0, #0
2305 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
2306 ; CHECK-MVE-NEXT: vmov r0, s0
2307 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
2308 ; CHECK-MVE-NEXT: vmov q0, q4
2309 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
2310 ; CHECK-MVE-NEXT: bx lr
2312 ; CHECK-MVEFP-LABEL: vcmp_une_v8f16:
2313 ; CHECK-MVEFP: @ %bb.0: @ %entry
2314 ; CHECK-MVEFP-NEXT: vcmp.f16 ne, q0, q1
2315 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
2316 ; CHECK-MVEFP-NEXT: bx lr
2318 %c = fcmp une <8 x half> %src, %src2
2319 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2323 define arm_aapcs_vfpcc <8 x half> @vcmp_ugt_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
2324 ; CHECK-MVE-LABEL: vcmp_ugt_v8f16:
2325 ; CHECK-MVE: @ %bb.0: @ %entry
2326 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
2327 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
2328 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
2329 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
2330 ; CHECK-MVE-NEXT: vmov s16, r1
2331 ; CHECK-MVE-NEXT: movs r1, #0
2332 ; CHECK-MVE-NEXT: vmov s18, r2
2333 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
2334 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2335 ; CHECK-MVE-NEXT: vmov s16, r2
2336 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2337 ; CHECK-MVE-NEXT: it hi
2338 ; CHECK-MVE-NEXT: movhi r1, #1
2339 ; CHECK-MVE-NEXT: cmp r1, #0
2340 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
2341 ; CHECK-MVE-NEXT: it ne
2342 ; CHECK-MVE-NEXT: movne r1, #1
2343 ; CHECK-MVE-NEXT: vmov s18, r2
2344 ; CHECK-MVE-NEXT: cmp r1, #0
2345 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
2346 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2347 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
2348 ; CHECK-MVE-NEXT: vmov r1, s16
2349 ; CHECK-MVE-NEXT: movs r0, #0
2350 ; CHECK-MVE-NEXT: vmov s16, r2
2351 ; CHECK-MVE-NEXT: movs r2, #0
2352 ; CHECK-MVE-NEXT: vmov s18, r3
2353 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
2354 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2355 ; CHECK-MVE-NEXT: vmov s16, r3
2356 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2357 ; CHECK-MVE-NEXT: it hi
2358 ; CHECK-MVE-NEXT: movhi r2, #1
2359 ; CHECK-MVE-NEXT: cmp r2, #0
2360 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
2361 ; CHECK-MVE-NEXT: it ne
2362 ; CHECK-MVE-NEXT: movne r2, #1
2363 ; CHECK-MVE-NEXT: vmov s18, r3
2364 ; CHECK-MVE-NEXT: cmp r2, #0
2365 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2366 ; CHECK-MVE-NEXT: vmov r2, s16
2367 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
2368 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
2369 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
2370 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
2371 ; CHECK-MVE-NEXT: vmov s20, r1
2372 ; CHECK-MVE-NEXT: movs r1, #0
2373 ; CHECK-MVE-NEXT: vmov s22, r2
2374 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
2375 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2376 ; CHECK-MVE-NEXT: vmov s20, r2
2377 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2378 ; CHECK-MVE-NEXT: it hi
2379 ; CHECK-MVE-NEXT: movhi r1, #1
2380 ; CHECK-MVE-NEXT: cmp r1, #0
2381 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
2382 ; CHECK-MVE-NEXT: it ne
2383 ; CHECK-MVE-NEXT: movne r1, #1
2384 ; CHECK-MVE-NEXT: vmov s22, r2
2385 ; CHECK-MVE-NEXT: cmp r1, #0
2386 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
2387 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2388 ; CHECK-MVE-NEXT: vmov s22, r2
2389 ; CHECK-MVE-NEXT: vmov r1, s20
2390 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
2391 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
2392 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
2393 ; CHECK-MVE-NEXT: vmov s20, r1
2394 ; CHECK-MVE-NEXT: movs r1, #0
2395 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2396 ; CHECK-MVE-NEXT: vmov s20, r2
2397 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2398 ; CHECK-MVE-NEXT: it hi
2399 ; CHECK-MVE-NEXT: movhi r1, #1
2400 ; CHECK-MVE-NEXT: cmp r1, #0
2401 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
2402 ; CHECK-MVE-NEXT: it ne
2403 ; CHECK-MVE-NEXT: movne r1, #1
2404 ; CHECK-MVE-NEXT: vmov s22, r2
2405 ; CHECK-MVE-NEXT: cmp r1, #0
2406 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
2407 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2408 ; CHECK-MVE-NEXT: vmov s22, r2
2409 ; CHECK-MVE-NEXT: vmov r1, s20
2410 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
2411 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
2412 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
2413 ; CHECK-MVE-NEXT: vmov s20, r1
2414 ; CHECK-MVE-NEXT: movs r1, #0
2415 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2416 ; CHECK-MVE-NEXT: vmov s20, r2
2417 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2418 ; CHECK-MVE-NEXT: it hi
2419 ; CHECK-MVE-NEXT: movhi r1, #1
2420 ; CHECK-MVE-NEXT: cmp r1, #0
2421 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
2422 ; CHECK-MVE-NEXT: it ne
2423 ; CHECK-MVE-NEXT: movne r1, #1
2424 ; CHECK-MVE-NEXT: vmov s22, r2
2425 ; CHECK-MVE-NEXT: cmp r1, #0
2426 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
2427 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2428 ; CHECK-MVE-NEXT: vmov s22, r2
2429 ; CHECK-MVE-NEXT: vmov r1, s20
2430 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
2431 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
2432 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
2433 ; CHECK-MVE-NEXT: vmov s20, r1
2434 ; CHECK-MVE-NEXT: movs r1, #0
2435 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2436 ; CHECK-MVE-NEXT: vmov s20, r2
2437 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2438 ; CHECK-MVE-NEXT: it hi
2439 ; CHECK-MVE-NEXT: movhi r1, #1
2440 ; CHECK-MVE-NEXT: cmp r1, #0
2441 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
2442 ; CHECK-MVE-NEXT: it ne
2443 ; CHECK-MVE-NEXT: movne r1, #1
2444 ; CHECK-MVE-NEXT: vmov s22, r2
2445 ; CHECK-MVE-NEXT: cmp r1, #0
2446 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
2447 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2448 ; CHECK-MVE-NEXT: vmov s22, r2
2449 ; CHECK-MVE-NEXT: vmov r1, s20
2450 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
2451 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
2452 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
2453 ; CHECK-MVE-NEXT: vmov s20, r1
2454 ; CHECK-MVE-NEXT: movs r1, #0
2455 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2456 ; CHECK-MVE-NEXT: vmov s20, r2
2457 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2458 ; CHECK-MVE-NEXT: it hi
2459 ; CHECK-MVE-NEXT: movhi r1, #1
2460 ; CHECK-MVE-NEXT: cmp r1, #0
2461 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
2462 ; CHECK-MVE-NEXT: it ne
2463 ; CHECK-MVE-NEXT: movne r1, #1
2464 ; CHECK-MVE-NEXT: vmov s22, r2
2465 ; CHECK-MVE-NEXT: cmp r1, #0
2466 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
2467 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2468 ; CHECK-MVE-NEXT: vmov s2, r2
2469 ; CHECK-MVE-NEXT: vmov r1, s20
2470 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
2471 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
2472 ; CHECK-MVE-NEXT: vmov s0, r1
2473 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
2474 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
2475 ; CHECK-MVE-NEXT: vmov s0, r1
2476 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2477 ; CHECK-MVE-NEXT: it hi
2478 ; CHECK-MVE-NEXT: movhi r0, #1
2479 ; CHECK-MVE-NEXT: cmp r0, #0
2480 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
2481 ; CHECK-MVE-NEXT: it ne
2482 ; CHECK-MVE-NEXT: movne r0, #1
2483 ; CHECK-MVE-NEXT: vmov s2, r1
2484 ; CHECK-MVE-NEXT: cmp r0, #0
2485 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
2486 ; CHECK-MVE-NEXT: vmov r0, s0
2487 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
2488 ; CHECK-MVE-NEXT: vmov q0, q4
2489 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
2490 ; CHECK-MVE-NEXT: bx lr
2492 ; CHECK-MVEFP-LABEL: vcmp_ugt_v8f16:
2493 ; CHECK-MVEFP: @ %bb.0: @ %entry
2494 ; CHECK-MVEFP-NEXT: vcmp.f16 ge, q1, q0
2495 ; CHECK-MVEFP-NEXT: movw r1, #65535
2496 ; CHECK-MVEFP-NEXT: vmrs r0, p0
2497 ; CHECK-MVEFP-NEXT: eors r0, r1
2498 ; CHECK-MVEFP-NEXT: vmsr p0, r0
2499 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
2500 ; CHECK-MVEFP-NEXT: bx lr
2502 %c = fcmp ugt <8 x half> %src, %src2
2503 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2507 define arm_aapcs_vfpcc <8 x half> @vcmp_uge_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
2508 ; CHECK-MVE-LABEL: vcmp_uge_v8f16:
2509 ; CHECK-MVE: @ %bb.0: @ %entry
2510 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
2511 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
2512 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
2513 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
2514 ; CHECK-MVE-NEXT: vmov s16, r1
2515 ; CHECK-MVE-NEXT: movs r1, #0
2516 ; CHECK-MVE-NEXT: vmov s18, r2
2517 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
2518 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2519 ; CHECK-MVE-NEXT: vmov s16, r2
2520 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2521 ; CHECK-MVE-NEXT: it pl
2522 ; CHECK-MVE-NEXT: movpl r1, #1
2523 ; CHECK-MVE-NEXT: cmp r1, #0
2524 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
2525 ; CHECK-MVE-NEXT: it ne
2526 ; CHECK-MVE-NEXT: movne r1, #1
2527 ; CHECK-MVE-NEXT: vmov s18, r2
2528 ; CHECK-MVE-NEXT: cmp r1, #0
2529 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
2530 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2531 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
2532 ; CHECK-MVE-NEXT: vmov r1, s16
2533 ; CHECK-MVE-NEXT: movs r0, #0
2534 ; CHECK-MVE-NEXT: vmov s16, r2
2535 ; CHECK-MVE-NEXT: movs r2, #0
2536 ; CHECK-MVE-NEXT: vmov s18, r3
2537 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
2538 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2539 ; CHECK-MVE-NEXT: vmov s16, r3
2540 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2541 ; CHECK-MVE-NEXT: it pl
2542 ; CHECK-MVE-NEXT: movpl r2, #1
2543 ; CHECK-MVE-NEXT: cmp r2, #0
2544 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
2545 ; CHECK-MVE-NEXT: it ne
2546 ; CHECK-MVE-NEXT: movne r2, #1
2547 ; CHECK-MVE-NEXT: vmov s18, r3
2548 ; CHECK-MVE-NEXT: cmp r2, #0
2549 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2550 ; CHECK-MVE-NEXT: vmov r2, s16
2551 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
2552 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
2553 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
2554 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
2555 ; CHECK-MVE-NEXT: vmov s20, r1
2556 ; CHECK-MVE-NEXT: movs r1, #0
2557 ; CHECK-MVE-NEXT: vmov s22, r2
2558 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
2559 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2560 ; CHECK-MVE-NEXT: vmov s20, r2
2561 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2562 ; CHECK-MVE-NEXT: it pl
2563 ; CHECK-MVE-NEXT: movpl r1, #1
2564 ; CHECK-MVE-NEXT: cmp r1, #0
2565 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
2566 ; CHECK-MVE-NEXT: it ne
2567 ; CHECK-MVE-NEXT: movne r1, #1
2568 ; CHECK-MVE-NEXT: vmov s22, r2
2569 ; CHECK-MVE-NEXT: cmp r1, #0
2570 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
2571 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2572 ; CHECK-MVE-NEXT: vmov s22, r2
2573 ; CHECK-MVE-NEXT: vmov r1, s20
2574 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
2575 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
2576 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
2577 ; CHECK-MVE-NEXT: vmov s20, r1
2578 ; CHECK-MVE-NEXT: movs r1, #0
2579 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2580 ; CHECK-MVE-NEXT: vmov s20, r2
2581 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2582 ; CHECK-MVE-NEXT: it pl
2583 ; CHECK-MVE-NEXT: movpl r1, #1
2584 ; CHECK-MVE-NEXT: cmp r1, #0
2585 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
2586 ; CHECK-MVE-NEXT: it ne
2587 ; CHECK-MVE-NEXT: movne r1, #1
2588 ; CHECK-MVE-NEXT: vmov s22, r2
2589 ; CHECK-MVE-NEXT: cmp r1, #0
2590 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
2591 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2592 ; CHECK-MVE-NEXT: vmov s22, r2
2593 ; CHECK-MVE-NEXT: vmov r1, s20
2594 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
2595 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
2596 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
2597 ; CHECK-MVE-NEXT: vmov s20, r1
2598 ; CHECK-MVE-NEXT: movs r1, #0
2599 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2600 ; CHECK-MVE-NEXT: vmov s20, r2
2601 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2602 ; CHECK-MVE-NEXT: it pl
2603 ; CHECK-MVE-NEXT: movpl r1, #1
2604 ; CHECK-MVE-NEXT: cmp r1, #0
2605 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
2606 ; CHECK-MVE-NEXT: it ne
2607 ; CHECK-MVE-NEXT: movne r1, #1
2608 ; CHECK-MVE-NEXT: vmov s22, r2
2609 ; CHECK-MVE-NEXT: cmp r1, #0
2610 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
2611 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2612 ; CHECK-MVE-NEXT: vmov s22, r2
2613 ; CHECK-MVE-NEXT: vmov r1, s20
2614 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
2615 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
2616 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
2617 ; CHECK-MVE-NEXT: vmov s20, r1
2618 ; CHECK-MVE-NEXT: movs r1, #0
2619 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2620 ; CHECK-MVE-NEXT: vmov s20, r2
2621 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2622 ; CHECK-MVE-NEXT: it pl
2623 ; CHECK-MVE-NEXT: movpl r1, #1
2624 ; CHECK-MVE-NEXT: cmp r1, #0
2625 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
2626 ; CHECK-MVE-NEXT: it ne
2627 ; CHECK-MVE-NEXT: movne r1, #1
2628 ; CHECK-MVE-NEXT: vmov s22, r2
2629 ; CHECK-MVE-NEXT: cmp r1, #0
2630 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
2631 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2632 ; CHECK-MVE-NEXT: vmov s22, r2
2633 ; CHECK-MVE-NEXT: vmov r1, s20
2634 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
2635 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
2636 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
2637 ; CHECK-MVE-NEXT: vmov s20, r1
2638 ; CHECK-MVE-NEXT: movs r1, #0
2639 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2640 ; CHECK-MVE-NEXT: vmov s20, r2
2641 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2642 ; CHECK-MVE-NEXT: it pl
2643 ; CHECK-MVE-NEXT: movpl r1, #1
2644 ; CHECK-MVE-NEXT: cmp r1, #0
2645 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
2646 ; CHECK-MVE-NEXT: it ne
2647 ; CHECK-MVE-NEXT: movne r1, #1
2648 ; CHECK-MVE-NEXT: vmov s22, r2
2649 ; CHECK-MVE-NEXT: cmp r1, #0
2650 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
2651 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2652 ; CHECK-MVE-NEXT: vmov s2, r2
2653 ; CHECK-MVE-NEXT: vmov r1, s20
2654 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
2655 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
2656 ; CHECK-MVE-NEXT: vmov s0, r1
2657 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
2658 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
2659 ; CHECK-MVE-NEXT: vmov s0, r1
2660 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2661 ; CHECK-MVE-NEXT: it pl
2662 ; CHECK-MVE-NEXT: movpl r0, #1
2663 ; CHECK-MVE-NEXT: cmp r0, #0
2664 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
2665 ; CHECK-MVE-NEXT: it ne
2666 ; CHECK-MVE-NEXT: movne r0, #1
2667 ; CHECK-MVE-NEXT: vmov s2, r1
2668 ; CHECK-MVE-NEXT: cmp r0, #0
2669 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
2670 ; CHECK-MVE-NEXT: vmov r0, s0
2671 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
2672 ; CHECK-MVE-NEXT: vmov q0, q4
2673 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
2674 ; CHECK-MVE-NEXT: bx lr
2676 ; CHECK-MVEFP-LABEL: vcmp_uge_v8f16:
2677 ; CHECK-MVEFP: @ %bb.0: @ %entry
2678 ; CHECK-MVEFP-NEXT: vcmp.f16 gt, q1, q0
2679 ; CHECK-MVEFP-NEXT: movw r1, #65535
2680 ; CHECK-MVEFP-NEXT: vmrs r0, p0
2681 ; CHECK-MVEFP-NEXT: eors r0, r1
2682 ; CHECK-MVEFP-NEXT: vmsr p0, r0
2683 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
2684 ; CHECK-MVEFP-NEXT: bx lr
2686 %c = fcmp uge <8 x half> %src, %src2
2687 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2691 define arm_aapcs_vfpcc <8 x half> @vcmp_ult_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
2692 ; CHECK-MVE-LABEL: vcmp_ult_v8f16:
2693 ; CHECK-MVE: @ %bb.0: @ %entry
2694 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
2695 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
2696 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
2697 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
2698 ; CHECK-MVE-NEXT: vmov s16, r1
2699 ; CHECK-MVE-NEXT: movs r1, #0
2700 ; CHECK-MVE-NEXT: vmov s18, r2
2701 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
2702 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2703 ; CHECK-MVE-NEXT: vmov s16, r2
2704 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2705 ; CHECK-MVE-NEXT: it lt
2706 ; CHECK-MVE-NEXT: movlt r1, #1
2707 ; CHECK-MVE-NEXT: cmp r1, #0
2708 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
2709 ; CHECK-MVE-NEXT: it ne
2710 ; CHECK-MVE-NEXT: movne r1, #1
2711 ; CHECK-MVE-NEXT: vmov s18, r2
2712 ; CHECK-MVE-NEXT: cmp r1, #0
2713 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
2714 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2715 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
2716 ; CHECK-MVE-NEXT: vmov r1, s16
2717 ; CHECK-MVE-NEXT: movs r0, #0
2718 ; CHECK-MVE-NEXT: vmov s16, r2
2719 ; CHECK-MVE-NEXT: movs r2, #0
2720 ; CHECK-MVE-NEXT: vmov s18, r3
2721 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
2722 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2723 ; CHECK-MVE-NEXT: vmov s16, r3
2724 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2725 ; CHECK-MVE-NEXT: it lt
2726 ; CHECK-MVE-NEXT: movlt r2, #1
2727 ; CHECK-MVE-NEXT: cmp r2, #0
2728 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
2729 ; CHECK-MVE-NEXT: it ne
2730 ; CHECK-MVE-NEXT: movne r2, #1
2731 ; CHECK-MVE-NEXT: vmov s18, r3
2732 ; CHECK-MVE-NEXT: cmp r2, #0
2733 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2734 ; CHECK-MVE-NEXT: vmov r2, s16
2735 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
2736 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
2737 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
2738 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
2739 ; CHECK-MVE-NEXT: vmov s20, r1
2740 ; CHECK-MVE-NEXT: movs r1, #0
2741 ; CHECK-MVE-NEXT: vmov s22, r2
2742 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
2743 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2744 ; CHECK-MVE-NEXT: vmov s20, r2
2745 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2746 ; CHECK-MVE-NEXT: it lt
2747 ; CHECK-MVE-NEXT: movlt r1, #1
2748 ; CHECK-MVE-NEXT: cmp r1, #0
2749 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
2750 ; CHECK-MVE-NEXT: it ne
2751 ; CHECK-MVE-NEXT: movne r1, #1
2752 ; CHECK-MVE-NEXT: vmov s22, r2
2753 ; CHECK-MVE-NEXT: cmp r1, #0
2754 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
2755 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2756 ; CHECK-MVE-NEXT: vmov s22, r2
2757 ; CHECK-MVE-NEXT: vmov r1, s20
2758 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
2759 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
2760 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
2761 ; CHECK-MVE-NEXT: vmov s20, r1
2762 ; CHECK-MVE-NEXT: movs r1, #0
2763 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2764 ; CHECK-MVE-NEXT: vmov s20, r2
2765 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2766 ; CHECK-MVE-NEXT: it lt
2767 ; CHECK-MVE-NEXT: movlt r1, #1
2768 ; CHECK-MVE-NEXT: cmp r1, #0
2769 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
2770 ; CHECK-MVE-NEXT: it ne
2771 ; CHECK-MVE-NEXT: movne r1, #1
2772 ; CHECK-MVE-NEXT: vmov s22, r2
2773 ; CHECK-MVE-NEXT: cmp r1, #0
2774 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
2775 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2776 ; CHECK-MVE-NEXT: vmov s22, r2
2777 ; CHECK-MVE-NEXT: vmov r1, s20
2778 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
2779 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
2780 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
2781 ; CHECK-MVE-NEXT: vmov s20, r1
2782 ; CHECK-MVE-NEXT: movs r1, #0
2783 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2784 ; CHECK-MVE-NEXT: vmov s20, r2
2785 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2786 ; CHECK-MVE-NEXT: it lt
2787 ; CHECK-MVE-NEXT: movlt r1, #1
2788 ; CHECK-MVE-NEXT: cmp r1, #0
2789 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
2790 ; CHECK-MVE-NEXT: it ne
2791 ; CHECK-MVE-NEXT: movne r1, #1
2792 ; CHECK-MVE-NEXT: vmov s22, r2
2793 ; CHECK-MVE-NEXT: cmp r1, #0
2794 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
2795 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2796 ; CHECK-MVE-NEXT: vmov s22, r2
2797 ; CHECK-MVE-NEXT: vmov r1, s20
2798 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
2799 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
2800 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
2801 ; CHECK-MVE-NEXT: vmov s20, r1
2802 ; CHECK-MVE-NEXT: movs r1, #0
2803 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2804 ; CHECK-MVE-NEXT: vmov s20, r2
2805 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2806 ; CHECK-MVE-NEXT: it lt
2807 ; CHECK-MVE-NEXT: movlt r1, #1
2808 ; CHECK-MVE-NEXT: cmp r1, #0
2809 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
2810 ; CHECK-MVE-NEXT: it ne
2811 ; CHECK-MVE-NEXT: movne r1, #1
2812 ; CHECK-MVE-NEXT: vmov s22, r2
2813 ; CHECK-MVE-NEXT: cmp r1, #0
2814 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
2815 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2816 ; CHECK-MVE-NEXT: vmov s22, r2
2817 ; CHECK-MVE-NEXT: vmov r1, s20
2818 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
2819 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
2820 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
2821 ; CHECK-MVE-NEXT: vmov s20, r1
2822 ; CHECK-MVE-NEXT: movs r1, #0
2823 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2824 ; CHECK-MVE-NEXT: vmov s20, r2
2825 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2826 ; CHECK-MVE-NEXT: it lt
2827 ; CHECK-MVE-NEXT: movlt r1, #1
2828 ; CHECK-MVE-NEXT: cmp r1, #0
2829 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
2830 ; CHECK-MVE-NEXT: it ne
2831 ; CHECK-MVE-NEXT: movne r1, #1
2832 ; CHECK-MVE-NEXT: vmov s22, r2
2833 ; CHECK-MVE-NEXT: cmp r1, #0
2834 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
2835 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2836 ; CHECK-MVE-NEXT: vmov s2, r2
2837 ; CHECK-MVE-NEXT: vmov r1, s20
2838 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
2839 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
2840 ; CHECK-MVE-NEXT: vmov s0, r1
2841 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
2842 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
2843 ; CHECK-MVE-NEXT: vmov s0, r1
2844 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2845 ; CHECK-MVE-NEXT: it lt
2846 ; CHECK-MVE-NEXT: movlt r0, #1
2847 ; CHECK-MVE-NEXT: cmp r0, #0
2848 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
2849 ; CHECK-MVE-NEXT: it ne
2850 ; CHECK-MVE-NEXT: movne r0, #1
2851 ; CHECK-MVE-NEXT: vmov s2, r1
2852 ; CHECK-MVE-NEXT: cmp r0, #0
2853 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
2854 ; CHECK-MVE-NEXT: vmov r0, s0
2855 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
2856 ; CHECK-MVE-NEXT: vmov q0, q4
2857 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
2858 ; CHECK-MVE-NEXT: bx lr
2860 ; CHECK-MVEFP-LABEL: vcmp_ult_v8f16:
2861 ; CHECK-MVEFP: @ %bb.0: @ %entry
2862 ; CHECK-MVEFP-NEXT: vcmp.f16 ge, q0, q1
2863 ; CHECK-MVEFP-NEXT: movw r1, #65535
2864 ; CHECK-MVEFP-NEXT: vmrs r0, p0
2865 ; CHECK-MVEFP-NEXT: eors r0, r1
2866 ; CHECK-MVEFP-NEXT: vmsr p0, r0
2867 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
2868 ; CHECK-MVEFP-NEXT: bx lr
2870 %c = fcmp ult <8 x half> %src, %src2
2871 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2875 define arm_aapcs_vfpcc <8 x half> @vcmp_ule_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
2876 ; CHECK-MVE-LABEL: vcmp_ule_v8f16:
2877 ; CHECK-MVE: @ %bb.0: @ %entry
2878 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
2879 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
2880 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
2881 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
2882 ; CHECK-MVE-NEXT: vmov s16, r1
2883 ; CHECK-MVE-NEXT: movs r1, #0
2884 ; CHECK-MVE-NEXT: vmov s18, r2
2885 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
2886 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2887 ; CHECK-MVE-NEXT: vmov s16, r2
2888 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2889 ; CHECK-MVE-NEXT: it le
2890 ; CHECK-MVE-NEXT: movle r1, #1
2891 ; CHECK-MVE-NEXT: cmp r1, #0
2892 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
2893 ; CHECK-MVE-NEXT: it ne
2894 ; CHECK-MVE-NEXT: movne r1, #1
2895 ; CHECK-MVE-NEXT: vmov s18, r2
2896 ; CHECK-MVE-NEXT: cmp r1, #0
2897 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
2898 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2899 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
2900 ; CHECK-MVE-NEXT: vmov r1, s16
2901 ; CHECK-MVE-NEXT: movs r0, #0
2902 ; CHECK-MVE-NEXT: vmov s16, r2
2903 ; CHECK-MVE-NEXT: movs r2, #0
2904 ; CHECK-MVE-NEXT: vmov s18, r3
2905 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
2906 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
2907 ; CHECK-MVE-NEXT: vmov s16, r3
2908 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2909 ; CHECK-MVE-NEXT: it le
2910 ; CHECK-MVE-NEXT: movle r2, #1
2911 ; CHECK-MVE-NEXT: cmp r2, #0
2912 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
2913 ; CHECK-MVE-NEXT: it ne
2914 ; CHECK-MVE-NEXT: movne r2, #1
2915 ; CHECK-MVE-NEXT: vmov s18, r3
2916 ; CHECK-MVE-NEXT: cmp r2, #0
2917 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
2918 ; CHECK-MVE-NEXT: vmov r2, s16
2919 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
2920 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
2921 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
2922 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
2923 ; CHECK-MVE-NEXT: vmov s20, r1
2924 ; CHECK-MVE-NEXT: movs r1, #0
2925 ; CHECK-MVE-NEXT: vmov s22, r2
2926 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
2927 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2928 ; CHECK-MVE-NEXT: vmov s20, r2
2929 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2930 ; CHECK-MVE-NEXT: it le
2931 ; CHECK-MVE-NEXT: movle r1, #1
2932 ; CHECK-MVE-NEXT: cmp r1, #0
2933 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
2934 ; CHECK-MVE-NEXT: it ne
2935 ; CHECK-MVE-NEXT: movne r1, #1
2936 ; CHECK-MVE-NEXT: vmov s22, r2
2937 ; CHECK-MVE-NEXT: cmp r1, #0
2938 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
2939 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2940 ; CHECK-MVE-NEXT: vmov s22, r2
2941 ; CHECK-MVE-NEXT: vmov r1, s20
2942 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
2943 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
2944 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
2945 ; CHECK-MVE-NEXT: vmov s20, r1
2946 ; CHECK-MVE-NEXT: movs r1, #0
2947 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2948 ; CHECK-MVE-NEXT: vmov s20, r2
2949 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2950 ; CHECK-MVE-NEXT: it le
2951 ; CHECK-MVE-NEXT: movle r1, #1
2952 ; CHECK-MVE-NEXT: cmp r1, #0
2953 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
2954 ; CHECK-MVE-NEXT: it ne
2955 ; CHECK-MVE-NEXT: movne r1, #1
2956 ; CHECK-MVE-NEXT: vmov s22, r2
2957 ; CHECK-MVE-NEXT: cmp r1, #0
2958 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
2959 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2960 ; CHECK-MVE-NEXT: vmov s22, r2
2961 ; CHECK-MVE-NEXT: vmov r1, s20
2962 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
2963 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
2964 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
2965 ; CHECK-MVE-NEXT: vmov s20, r1
2966 ; CHECK-MVE-NEXT: movs r1, #0
2967 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2968 ; CHECK-MVE-NEXT: vmov s20, r2
2969 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2970 ; CHECK-MVE-NEXT: it le
2971 ; CHECK-MVE-NEXT: movle r1, #1
2972 ; CHECK-MVE-NEXT: cmp r1, #0
2973 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
2974 ; CHECK-MVE-NEXT: it ne
2975 ; CHECK-MVE-NEXT: movne r1, #1
2976 ; CHECK-MVE-NEXT: vmov s22, r2
2977 ; CHECK-MVE-NEXT: cmp r1, #0
2978 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
2979 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
2980 ; CHECK-MVE-NEXT: vmov s22, r2
2981 ; CHECK-MVE-NEXT: vmov r1, s20
2982 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
2983 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
2984 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
2985 ; CHECK-MVE-NEXT: vmov s20, r1
2986 ; CHECK-MVE-NEXT: movs r1, #0
2987 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
2988 ; CHECK-MVE-NEXT: vmov s20, r2
2989 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
2990 ; CHECK-MVE-NEXT: it le
2991 ; CHECK-MVE-NEXT: movle r1, #1
2992 ; CHECK-MVE-NEXT: cmp r1, #0
2993 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
2994 ; CHECK-MVE-NEXT: it ne
2995 ; CHECK-MVE-NEXT: movne r1, #1
2996 ; CHECK-MVE-NEXT: vmov s22, r2
2997 ; CHECK-MVE-NEXT: cmp r1, #0
2998 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
2999 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3000 ; CHECK-MVE-NEXT: vmov s22, r2
3001 ; CHECK-MVE-NEXT: vmov r1, s20
3002 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
3003 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
3004 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
3005 ; CHECK-MVE-NEXT: vmov s20, r1
3006 ; CHECK-MVE-NEXT: movs r1, #0
3007 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3008 ; CHECK-MVE-NEXT: vmov s20, r2
3009 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3010 ; CHECK-MVE-NEXT: it le
3011 ; CHECK-MVE-NEXT: movle r1, #1
3012 ; CHECK-MVE-NEXT: cmp r1, #0
3013 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
3014 ; CHECK-MVE-NEXT: it ne
3015 ; CHECK-MVE-NEXT: movne r1, #1
3016 ; CHECK-MVE-NEXT: vmov s22, r2
3017 ; CHECK-MVE-NEXT: cmp r1, #0
3018 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
3019 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3020 ; CHECK-MVE-NEXT: vmov s2, r2
3021 ; CHECK-MVE-NEXT: vmov r1, s20
3022 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
3023 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
3024 ; CHECK-MVE-NEXT: vmov s0, r1
3025 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
3026 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
3027 ; CHECK-MVE-NEXT: vmov s0, r1
3028 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3029 ; CHECK-MVE-NEXT: it le
3030 ; CHECK-MVE-NEXT: movle r0, #1
3031 ; CHECK-MVE-NEXT: cmp r0, #0
3032 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
3033 ; CHECK-MVE-NEXT: it ne
3034 ; CHECK-MVE-NEXT: movne r0, #1
3035 ; CHECK-MVE-NEXT: vmov s2, r1
3036 ; CHECK-MVE-NEXT: cmp r0, #0
3037 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
3038 ; CHECK-MVE-NEXT: vmov r0, s0
3039 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
3040 ; CHECK-MVE-NEXT: vmov q0, q4
3041 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
3042 ; CHECK-MVE-NEXT: bx lr
3044 ; CHECK-MVEFP-LABEL: vcmp_ule_v8f16:
3045 ; CHECK-MVEFP: @ %bb.0: @ %entry
3046 ; CHECK-MVEFP-NEXT: vcmp.f16 gt, q0, q1
3047 ; CHECK-MVEFP-NEXT: movw r1, #65535
3048 ; CHECK-MVEFP-NEXT: vmrs r0, p0
3049 ; CHECK-MVEFP-NEXT: eors r0, r1
3050 ; CHECK-MVEFP-NEXT: vmsr p0, r0
3051 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
3052 ; CHECK-MVEFP-NEXT: bx lr
3054 %c = fcmp ule <8 x half> %src, %src2
3055 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3059 define arm_aapcs_vfpcc <8 x half> @vcmp_ord_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
3060 ; CHECK-MVE-LABEL: vcmp_ord_v8f16:
3061 ; CHECK-MVE: @ %bb.0: @ %entry
3062 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
3063 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
3064 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
3065 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
3066 ; CHECK-MVE-NEXT: vmov s16, r1
3067 ; CHECK-MVE-NEXT: movs r1, #0
3068 ; CHECK-MVE-NEXT: vmov s18, r2
3069 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
3070 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
3071 ; CHECK-MVE-NEXT: vmov s16, r2
3072 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3073 ; CHECK-MVE-NEXT: it vc
3074 ; CHECK-MVE-NEXT: movvc r1, #1
3075 ; CHECK-MVE-NEXT: cmp r1, #0
3076 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
3077 ; CHECK-MVE-NEXT: it ne
3078 ; CHECK-MVE-NEXT: movne r1, #1
3079 ; CHECK-MVE-NEXT: vmov s18, r2
3080 ; CHECK-MVE-NEXT: cmp r1, #0
3081 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
3082 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
3083 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
3084 ; CHECK-MVE-NEXT: vmov r1, s16
3085 ; CHECK-MVE-NEXT: movs r0, #0
3086 ; CHECK-MVE-NEXT: vmov s16, r2
3087 ; CHECK-MVE-NEXT: movs r2, #0
3088 ; CHECK-MVE-NEXT: vmov s18, r3
3089 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
3090 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
3091 ; CHECK-MVE-NEXT: vmov s16, r3
3092 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3093 ; CHECK-MVE-NEXT: it vc
3094 ; CHECK-MVE-NEXT: movvc r2, #1
3095 ; CHECK-MVE-NEXT: cmp r2, #0
3096 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
3097 ; CHECK-MVE-NEXT: it ne
3098 ; CHECK-MVE-NEXT: movne r2, #1
3099 ; CHECK-MVE-NEXT: vmov s18, r3
3100 ; CHECK-MVE-NEXT: cmp r2, #0
3101 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
3102 ; CHECK-MVE-NEXT: vmov r2, s16
3103 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
3104 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
3105 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
3106 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
3107 ; CHECK-MVE-NEXT: vmov s20, r1
3108 ; CHECK-MVE-NEXT: movs r1, #0
3109 ; CHECK-MVE-NEXT: vmov s22, r2
3110 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
3111 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3112 ; CHECK-MVE-NEXT: vmov s20, r2
3113 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3114 ; CHECK-MVE-NEXT: it vc
3115 ; CHECK-MVE-NEXT: movvc r1, #1
3116 ; CHECK-MVE-NEXT: cmp r1, #0
3117 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
3118 ; CHECK-MVE-NEXT: it ne
3119 ; CHECK-MVE-NEXT: movne r1, #1
3120 ; CHECK-MVE-NEXT: vmov s22, r2
3121 ; CHECK-MVE-NEXT: cmp r1, #0
3122 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
3123 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3124 ; CHECK-MVE-NEXT: vmov s22, r2
3125 ; CHECK-MVE-NEXT: vmov r1, s20
3126 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
3127 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
3128 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
3129 ; CHECK-MVE-NEXT: vmov s20, r1
3130 ; CHECK-MVE-NEXT: movs r1, #0
3131 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3132 ; CHECK-MVE-NEXT: vmov s20, r2
3133 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3134 ; CHECK-MVE-NEXT: it vc
3135 ; CHECK-MVE-NEXT: movvc r1, #1
3136 ; CHECK-MVE-NEXT: cmp r1, #0
3137 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
3138 ; CHECK-MVE-NEXT: it ne
3139 ; CHECK-MVE-NEXT: movne r1, #1
3140 ; CHECK-MVE-NEXT: vmov s22, r2
3141 ; CHECK-MVE-NEXT: cmp r1, #0
3142 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
3143 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3144 ; CHECK-MVE-NEXT: vmov s22, r2
3145 ; CHECK-MVE-NEXT: vmov r1, s20
3146 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
3147 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
3148 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
3149 ; CHECK-MVE-NEXT: vmov s20, r1
3150 ; CHECK-MVE-NEXT: movs r1, #0
3151 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3152 ; CHECK-MVE-NEXT: vmov s20, r2
3153 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3154 ; CHECK-MVE-NEXT: it vc
3155 ; CHECK-MVE-NEXT: movvc r1, #1
3156 ; CHECK-MVE-NEXT: cmp r1, #0
3157 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
3158 ; CHECK-MVE-NEXT: it ne
3159 ; CHECK-MVE-NEXT: movne r1, #1
3160 ; CHECK-MVE-NEXT: vmov s22, r2
3161 ; CHECK-MVE-NEXT: cmp r1, #0
3162 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
3163 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3164 ; CHECK-MVE-NEXT: vmov s22, r2
3165 ; CHECK-MVE-NEXT: vmov r1, s20
3166 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
3167 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
3168 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
3169 ; CHECK-MVE-NEXT: vmov s20, r1
3170 ; CHECK-MVE-NEXT: movs r1, #0
3171 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3172 ; CHECK-MVE-NEXT: vmov s20, r2
3173 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3174 ; CHECK-MVE-NEXT: it vc
3175 ; CHECK-MVE-NEXT: movvc r1, #1
3176 ; CHECK-MVE-NEXT: cmp r1, #0
3177 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
3178 ; CHECK-MVE-NEXT: it ne
3179 ; CHECK-MVE-NEXT: movne r1, #1
3180 ; CHECK-MVE-NEXT: vmov s22, r2
3181 ; CHECK-MVE-NEXT: cmp r1, #0
3182 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
3183 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3184 ; CHECK-MVE-NEXT: vmov s22, r2
3185 ; CHECK-MVE-NEXT: vmov r1, s20
3186 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
3187 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
3188 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
3189 ; CHECK-MVE-NEXT: vmov s20, r1
3190 ; CHECK-MVE-NEXT: movs r1, #0
3191 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3192 ; CHECK-MVE-NEXT: vmov s20, r2
3193 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3194 ; CHECK-MVE-NEXT: it vc
3195 ; CHECK-MVE-NEXT: movvc r1, #1
3196 ; CHECK-MVE-NEXT: cmp r1, #0
3197 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
3198 ; CHECK-MVE-NEXT: it ne
3199 ; CHECK-MVE-NEXT: movne r1, #1
3200 ; CHECK-MVE-NEXT: vmov s22, r2
3201 ; CHECK-MVE-NEXT: cmp r1, #0
3202 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
3203 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3204 ; CHECK-MVE-NEXT: vmov s2, r2
3205 ; CHECK-MVE-NEXT: vmov r1, s20
3206 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
3207 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
3208 ; CHECK-MVE-NEXT: vmov s0, r1
3209 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
3210 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
3211 ; CHECK-MVE-NEXT: vmov s0, r1
3212 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3213 ; CHECK-MVE-NEXT: it vc
3214 ; CHECK-MVE-NEXT: movvc r0, #1
3215 ; CHECK-MVE-NEXT: cmp r0, #0
3216 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
3217 ; CHECK-MVE-NEXT: it ne
3218 ; CHECK-MVE-NEXT: movne r0, #1
3219 ; CHECK-MVE-NEXT: vmov s2, r1
3220 ; CHECK-MVE-NEXT: cmp r0, #0
3221 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
3222 ; CHECK-MVE-NEXT: vmov r0, s0
3223 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
3224 ; CHECK-MVE-NEXT: vmov q0, q4
3225 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
3226 ; CHECK-MVE-NEXT: bx lr
3228 ; CHECK-MVEFP-LABEL: vcmp_ord_v8f16:
3229 ; CHECK-MVEFP: @ %bb.0: @ %entry
3230 ; CHECK-MVEFP-NEXT: vcmp.f16 le, q1, q0
3231 ; CHECK-MVEFP-NEXT: movw r1, #65535
3232 ; CHECK-MVEFP-NEXT: vpst
3233 ; CHECK-MVEFP-NEXT: vcmpt.f16 lt, q0, q1
3234 ; CHECK-MVEFP-NEXT: vmrs r0, p0
3235 ; CHECK-MVEFP-NEXT: eors r0, r1
3236 ; CHECK-MVEFP-NEXT: vmsr p0, r0
3237 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
3238 ; CHECK-MVEFP-NEXT: bx lr
3240 %c = fcmp ord <8 x half> %src, %src2
3241 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3245 define arm_aapcs_vfpcc <8 x half> @vcmp_uno_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
3246 ; CHECK-MVE-LABEL: vcmp_uno_v8f16:
3247 ; CHECK-MVE: @ %bb.0: @ %entry
3248 ; CHECK-MVE-NEXT: .vsave {d8, d9, d10, d11}
3249 ; CHECK-MVE-NEXT: vpush {d8, d9, d10, d11}
3250 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[1]
3251 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[1]
3252 ; CHECK-MVE-NEXT: vmov s16, r1
3253 ; CHECK-MVE-NEXT: movs r1, #0
3254 ; CHECK-MVE-NEXT: vmov s18, r2
3255 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[1]
3256 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
3257 ; CHECK-MVE-NEXT: vmov s16, r2
3258 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3259 ; CHECK-MVE-NEXT: it vs
3260 ; CHECK-MVE-NEXT: movvs r1, #1
3261 ; CHECK-MVE-NEXT: cmp r1, #0
3262 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[1]
3263 ; CHECK-MVE-NEXT: it ne
3264 ; CHECK-MVE-NEXT: movne r1, #1
3265 ; CHECK-MVE-NEXT: vmov s18, r2
3266 ; CHECK-MVE-NEXT: cmp r1, #0
3267 ; CHECK-MVE-NEXT: vmov.u16 r2, q1[0]
3268 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
3269 ; CHECK-MVE-NEXT: vmov.u16 r3, q0[0]
3270 ; CHECK-MVE-NEXT: vmov r1, s16
3271 ; CHECK-MVE-NEXT: movs r0, #0
3272 ; CHECK-MVE-NEXT: vmov s16, r2
3273 ; CHECK-MVE-NEXT: movs r2, #0
3274 ; CHECK-MVE-NEXT: vmov s18, r3
3275 ; CHECK-MVE-NEXT: vmov.u16 r3, q2[0]
3276 ; CHECK-MVE-NEXT: vcmpe.f16 s18, s16
3277 ; CHECK-MVE-NEXT: vmov s16, r3
3278 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3279 ; CHECK-MVE-NEXT: it vs
3280 ; CHECK-MVE-NEXT: movvs r2, #1
3281 ; CHECK-MVE-NEXT: cmp r2, #0
3282 ; CHECK-MVE-NEXT: vmov.u16 r3, q3[0]
3283 ; CHECK-MVE-NEXT: it ne
3284 ; CHECK-MVE-NEXT: movne r2, #1
3285 ; CHECK-MVE-NEXT: vmov s18, r3
3286 ; CHECK-MVE-NEXT: cmp r2, #0
3287 ; CHECK-MVE-NEXT: vseleq.f16 s16, s18, s16
3288 ; CHECK-MVE-NEXT: vmov r2, s16
3289 ; CHECK-MVE-NEXT: vmov.16 q4[0], r2
3290 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[2]
3291 ; CHECK-MVE-NEXT: vmov.16 q4[1], r1
3292 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[2]
3293 ; CHECK-MVE-NEXT: vmov s20, r1
3294 ; CHECK-MVE-NEXT: movs r1, #0
3295 ; CHECK-MVE-NEXT: vmov s22, r2
3296 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[2]
3297 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3298 ; CHECK-MVE-NEXT: vmov s20, r2
3299 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3300 ; CHECK-MVE-NEXT: it vs
3301 ; CHECK-MVE-NEXT: movvs r1, #1
3302 ; CHECK-MVE-NEXT: cmp r1, #0
3303 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[2]
3304 ; CHECK-MVE-NEXT: it ne
3305 ; CHECK-MVE-NEXT: movne r1, #1
3306 ; CHECK-MVE-NEXT: vmov s22, r2
3307 ; CHECK-MVE-NEXT: cmp r1, #0
3308 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[3]
3309 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3310 ; CHECK-MVE-NEXT: vmov s22, r2
3311 ; CHECK-MVE-NEXT: vmov r1, s20
3312 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[3]
3313 ; CHECK-MVE-NEXT: vmov.16 q4[2], r1
3314 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[3]
3315 ; CHECK-MVE-NEXT: vmov s20, r1
3316 ; CHECK-MVE-NEXT: movs r1, #0
3317 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3318 ; CHECK-MVE-NEXT: vmov s20, r2
3319 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3320 ; CHECK-MVE-NEXT: it vs
3321 ; CHECK-MVE-NEXT: movvs r1, #1
3322 ; CHECK-MVE-NEXT: cmp r1, #0
3323 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[3]
3324 ; CHECK-MVE-NEXT: it ne
3325 ; CHECK-MVE-NEXT: movne r1, #1
3326 ; CHECK-MVE-NEXT: vmov s22, r2
3327 ; CHECK-MVE-NEXT: cmp r1, #0
3328 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[4]
3329 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3330 ; CHECK-MVE-NEXT: vmov s22, r2
3331 ; CHECK-MVE-NEXT: vmov r1, s20
3332 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[4]
3333 ; CHECK-MVE-NEXT: vmov.16 q4[3], r1
3334 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[4]
3335 ; CHECK-MVE-NEXT: vmov s20, r1
3336 ; CHECK-MVE-NEXT: movs r1, #0
3337 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3338 ; CHECK-MVE-NEXT: vmov s20, r2
3339 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3340 ; CHECK-MVE-NEXT: it vs
3341 ; CHECK-MVE-NEXT: movvs r1, #1
3342 ; CHECK-MVE-NEXT: cmp r1, #0
3343 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[4]
3344 ; CHECK-MVE-NEXT: it ne
3345 ; CHECK-MVE-NEXT: movne r1, #1
3346 ; CHECK-MVE-NEXT: vmov s22, r2
3347 ; CHECK-MVE-NEXT: cmp r1, #0
3348 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[5]
3349 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3350 ; CHECK-MVE-NEXT: vmov s22, r2
3351 ; CHECK-MVE-NEXT: vmov r1, s20
3352 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[5]
3353 ; CHECK-MVE-NEXT: vmov.16 q4[4], r1
3354 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[5]
3355 ; CHECK-MVE-NEXT: vmov s20, r1
3356 ; CHECK-MVE-NEXT: movs r1, #0
3357 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3358 ; CHECK-MVE-NEXT: vmov s20, r2
3359 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3360 ; CHECK-MVE-NEXT: it vs
3361 ; CHECK-MVE-NEXT: movvs r1, #1
3362 ; CHECK-MVE-NEXT: cmp r1, #0
3363 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[5]
3364 ; CHECK-MVE-NEXT: it ne
3365 ; CHECK-MVE-NEXT: movne r1, #1
3366 ; CHECK-MVE-NEXT: vmov s22, r2
3367 ; CHECK-MVE-NEXT: cmp r1, #0
3368 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[6]
3369 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3370 ; CHECK-MVE-NEXT: vmov s22, r2
3371 ; CHECK-MVE-NEXT: vmov r1, s20
3372 ; CHECK-MVE-NEXT: vmov.u16 r2, q2[6]
3373 ; CHECK-MVE-NEXT: vmov.16 q4[5], r1
3374 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[6]
3375 ; CHECK-MVE-NEXT: vmov s20, r1
3376 ; CHECK-MVE-NEXT: movs r1, #0
3377 ; CHECK-MVE-NEXT: vcmpe.f16 s22, s20
3378 ; CHECK-MVE-NEXT: vmov s20, r2
3379 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3380 ; CHECK-MVE-NEXT: it vs
3381 ; CHECK-MVE-NEXT: movvs r1, #1
3382 ; CHECK-MVE-NEXT: cmp r1, #0
3383 ; CHECK-MVE-NEXT: vmov.u16 r2, q3[6]
3384 ; CHECK-MVE-NEXT: it ne
3385 ; CHECK-MVE-NEXT: movne r1, #1
3386 ; CHECK-MVE-NEXT: vmov s22, r2
3387 ; CHECK-MVE-NEXT: cmp r1, #0
3388 ; CHECK-MVE-NEXT: vmov.u16 r2, q0[7]
3389 ; CHECK-MVE-NEXT: vseleq.f16 s20, s22, s20
3390 ; CHECK-MVE-NEXT: vmov s2, r2
3391 ; CHECK-MVE-NEXT: vmov r1, s20
3392 ; CHECK-MVE-NEXT: vmov.16 q4[6], r1
3393 ; CHECK-MVE-NEXT: vmov.u16 r1, q1[7]
3394 ; CHECK-MVE-NEXT: vmov s0, r1
3395 ; CHECK-MVE-NEXT: vmov.u16 r1, q2[7]
3396 ; CHECK-MVE-NEXT: vcmpe.f16 s2, s0
3397 ; CHECK-MVE-NEXT: vmov s0, r1
3398 ; CHECK-MVE-NEXT: vmrs APSR_nzcv, fpscr
3399 ; CHECK-MVE-NEXT: it vs
3400 ; CHECK-MVE-NEXT: movvs r0, #1
3401 ; CHECK-MVE-NEXT: cmp r0, #0
3402 ; CHECK-MVE-NEXT: vmov.u16 r1, q3[7]
3403 ; CHECK-MVE-NEXT: it ne
3404 ; CHECK-MVE-NEXT: movne r0, #1
3405 ; CHECK-MVE-NEXT: vmov s2, r1
3406 ; CHECK-MVE-NEXT: cmp r0, #0
3407 ; CHECK-MVE-NEXT: vseleq.f16 s0, s2, s0
3408 ; CHECK-MVE-NEXT: vmov r0, s0
3409 ; CHECK-MVE-NEXT: vmov.16 q4[7], r0
3410 ; CHECK-MVE-NEXT: vmov q0, q4
3411 ; CHECK-MVE-NEXT: vpop {d8, d9, d10, d11}
3412 ; CHECK-MVE-NEXT: bx lr
3414 ; CHECK-MVEFP-LABEL: vcmp_uno_v8f16:
3415 ; CHECK-MVEFP: @ %bb.0: @ %entry
3416 ; CHECK-MVEFP-NEXT: vcmp.f16 le, q1, q0
3417 ; CHECK-MVEFP-NEXT: vpst
3418 ; CHECK-MVEFP-NEXT: vcmpt.f16 lt, q0, q1
3419 ; CHECK-MVEFP-NEXT: vpsel q0, q2, q3
3420 ; CHECK-MVEFP-NEXT: bx lr
3422 %c = fcmp uno <8 x half> %src, %src2
3423 %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b