[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-vcmpfr.ll
blobd90688d43d6e05732b769f11d8dfb6ce0a66c51c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve,+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE
3 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVEFP
5 define arm_aapcs_vfpcc <4 x float> @vcmp_oeq_v4f32(<4 x float> %src, 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, s4
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:    cset r1, ne
16 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
17 ; CHECK-MVE-NEXT:    mov.w r2, #0
18 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
19 ; CHECK-MVE-NEXT:    it eq
20 ; CHECK-MVE-NEXT:    moveq r2, #1
21 ; CHECK-MVE-NEXT:    cmp r2, #0
22 ; CHECK-MVE-NEXT:    cset r2, ne
23 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
24 ; CHECK-MVE-NEXT:    mov.w r3, #0
25 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
26 ; CHECK-MVE-NEXT:    it eq
27 ; CHECK-MVE-NEXT:    moveq r3, #1
28 ; CHECK-MVE-NEXT:    cmp r3, #0
29 ; CHECK-MVE-NEXT:    cset r3, ne
30 ; CHECK-MVE-NEXT:    movs r0, #0
31 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
32 ; CHECK-MVE-NEXT:    it eq
33 ; CHECK-MVE-NEXT:    moveq r0, #1
34 ; CHECK-MVE-NEXT:    cmp r0, #0
35 ; CHECK-MVE-NEXT:    cset r0, ne
36 ; CHECK-MVE-NEXT:    cmp r3, #0
37 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
38 ; CHECK-MVE-NEXT:    cmp r0, #0
39 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
40 ; CHECK-MVE-NEXT:    cmp r1, #0
41 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
42 ; CHECK-MVE-NEXT:    cmp r2, #0
43 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
44 ; CHECK-MVE-NEXT:    bx lr
46 ; CHECK-MVEFP-LABEL: vcmp_oeq_v4f32:
47 ; CHECK-MVEFP:       @ %bb.0: @ %entry
48 ; CHECK-MVEFP-NEXT:    vmov r0, s4
49 ; CHECK-MVEFP-NEXT:    vcmp.f32 eq, q0, r0
50 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
51 ; CHECK-MVEFP-NEXT:    bx lr
52 entry:
53   %i = insertelement <4 x float> undef, float %src2, i32 0
54   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
55   %c = fcmp oeq <4 x float> %src, %sp
56   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
57   ret <4 x float> %s
60 define arm_aapcs_vfpcc <4 x float> @vcmp_one_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
61 ; CHECK-MVE-LABEL: vcmp_one_v4f32:
62 ; CHECK-MVE:       @ %bb.0: @ %entry
63 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
64 ; CHECK-MVE-NEXT:    movs r1, #0
65 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
66 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
67 ; CHECK-MVE-NEXT:    it mi
68 ; CHECK-MVE-NEXT:    movmi r1, #1
69 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
70 ; CHECK-MVE-NEXT:    it gt
71 ; CHECK-MVE-NEXT:    movgt r1, #1
72 ; CHECK-MVE-NEXT:    cmp r1, #0
73 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
74 ; CHECK-MVE-NEXT:    mov.w r2, #0
75 ; CHECK-MVE-NEXT:    cset r1, ne
76 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
77 ; CHECK-MVE-NEXT:    it mi
78 ; CHECK-MVE-NEXT:    movmi r2, #1
79 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
80 ; CHECK-MVE-NEXT:    it gt
81 ; CHECK-MVE-NEXT:    movgt r2, #1
82 ; CHECK-MVE-NEXT:    cmp r2, #0
83 ; CHECK-MVE-NEXT:    mov.w r3, #0
84 ; CHECK-MVE-NEXT:    cset r2, ne
85 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
86 ; CHECK-MVE-NEXT:    it mi
87 ; CHECK-MVE-NEXT:    movmi r3, #1
88 ; CHECK-MVE-NEXT:    it gt
89 ; CHECK-MVE-NEXT:    movgt r3, #1
90 ; CHECK-MVE-NEXT:    cmp r3, #0
91 ; CHECK-MVE-NEXT:    mov.w r0, #0
92 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
93 ; CHECK-MVE-NEXT:    cset r3, ne
94 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
95 ; CHECK-MVE-NEXT:    it mi
96 ; CHECK-MVE-NEXT:    movmi r0, #1
97 ; CHECK-MVE-NEXT:    it gt
98 ; CHECK-MVE-NEXT:    movgt r0, #1
99 ; CHECK-MVE-NEXT:    cmp r0, #0
100 ; CHECK-MVE-NEXT:    cset r0, ne
101 ; CHECK-MVE-NEXT:    cmp r3, #0
102 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
103 ; CHECK-MVE-NEXT:    cmp r0, #0
104 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
105 ; CHECK-MVE-NEXT:    cmp r1, #0
106 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
107 ; CHECK-MVE-NEXT:    cmp r2, #0
108 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
109 ; CHECK-MVE-NEXT:    bx lr
111 ; CHECK-MVEFP-LABEL: vcmp_one_v4f32:
112 ; CHECK-MVEFP:       @ %bb.0: @ %entry
113 ; CHECK-MVEFP-NEXT:    vmov r0, s4
114 ; CHECK-MVEFP-NEXT:    vpt.f32 ge, q0, r0
115 ; CHECK-MVEFP-NEXT:    vcmpt.f32 le, q0, r0
116 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
117 ; CHECK-MVEFP-NEXT:    bx lr
118 entry:
119   %i = insertelement <4 x float> undef, float %src2, i32 0
120   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
121   %c = fcmp one <4 x float> %src, %sp
122   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
123   ret <4 x float> %s
126 define arm_aapcs_vfpcc <4 x float> @vcmp_ogt_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
127 ; CHECK-MVE-LABEL: vcmp_ogt_v4f32:
128 ; CHECK-MVE:       @ %bb.0: @ %entry
129 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
130 ; CHECK-MVE-NEXT:    movs r1, #0
131 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
132 ; CHECK-MVE-NEXT:    it gt
133 ; CHECK-MVE-NEXT:    movgt r1, #1
134 ; CHECK-MVE-NEXT:    cmp r1, #0
135 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
136 ; CHECK-MVE-NEXT:    cset r1, ne
137 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
138 ; CHECK-MVE-NEXT:    mov.w r2, #0
139 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
140 ; CHECK-MVE-NEXT:    it gt
141 ; CHECK-MVE-NEXT:    movgt r2, #1
142 ; CHECK-MVE-NEXT:    cmp r2, #0
143 ; CHECK-MVE-NEXT:    cset r2, ne
144 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
145 ; CHECK-MVE-NEXT:    mov.w r3, #0
146 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
147 ; CHECK-MVE-NEXT:    it gt
148 ; CHECK-MVE-NEXT:    movgt r3, #1
149 ; CHECK-MVE-NEXT:    cmp r3, #0
150 ; CHECK-MVE-NEXT:    cset r3, ne
151 ; CHECK-MVE-NEXT:    movs r0, #0
152 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
153 ; CHECK-MVE-NEXT:    it gt
154 ; CHECK-MVE-NEXT:    movgt r0, #1
155 ; CHECK-MVE-NEXT:    cmp r0, #0
156 ; CHECK-MVE-NEXT:    cset r0, ne
157 ; CHECK-MVE-NEXT:    cmp r3, #0
158 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
159 ; CHECK-MVE-NEXT:    cmp r0, #0
160 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
161 ; CHECK-MVE-NEXT:    cmp r1, #0
162 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
163 ; CHECK-MVE-NEXT:    cmp r2, #0
164 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
165 ; CHECK-MVE-NEXT:    bx lr
167 ; CHECK-MVEFP-LABEL: vcmp_ogt_v4f32:
168 ; CHECK-MVEFP:       @ %bb.0: @ %entry
169 ; CHECK-MVEFP-NEXT:    vmov r0, s4
170 ; CHECK-MVEFP-NEXT:    vcmp.f32 gt, q0, r0
171 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
172 ; CHECK-MVEFP-NEXT:    bx lr
173 entry:
174   %i = insertelement <4 x float> undef, float %src2, i32 0
175   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
176   %c = fcmp ogt <4 x float> %src, %sp
177   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
178   ret <4 x float> %s
181 define arm_aapcs_vfpcc <4 x float> @vcmp_oge_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
182 ; CHECK-MVE-LABEL: vcmp_oge_v4f32:
183 ; CHECK-MVE:       @ %bb.0: @ %entry
184 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
185 ; CHECK-MVE-NEXT:    movs r1, #0
186 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
187 ; CHECK-MVE-NEXT:    it ge
188 ; CHECK-MVE-NEXT:    movge r1, #1
189 ; CHECK-MVE-NEXT:    cmp r1, #0
190 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
191 ; CHECK-MVE-NEXT:    cset r1, ne
192 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
193 ; CHECK-MVE-NEXT:    mov.w r2, #0
194 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
195 ; CHECK-MVE-NEXT:    it ge
196 ; CHECK-MVE-NEXT:    movge r2, #1
197 ; CHECK-MVE-NEXT:    cmp r2, #0
198 ; CHECK-MVE-NEXT:    cset r2, ne
199 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
200 ; CHECK-MVE-NEXT:    mov.w r3, #0
201 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
202 ; CHECK-MVE-NEXT:    it ge
203 ; CHECK-MVE-NEXT:    movge r3, #1
204 ; CHECK-MVE-NEXT:    cmp r3, #0
205 ; CHECK-MVE-NEXT:    cset r3, ne
206 ; CHECK-MVE-NEXT:    movs r0, #0
207 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
208 ; CHECK-MVE-NEXT:    it ge
209 ; CHECK-MVE-NEXT:    movge r0, #1
210 ; CHECK-MVE-NEXT:    cmp r0, #0
211 ; CHECK-MVE-NEXT:    cset r0, ne
212 ; CHECK-MVE-NEXT:    cmp r3, #0
213 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
214 ; CHECK-MVE-NEXT:    cmp r0, #0
215 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
216 ; CHECK-MVE-NEXT:    cmp r1, #0
217 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
218 ; CHECK-MVE-NEXT:    cmp r2, #0
219 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
220 ; CHECK-MVE-NEXT:    bx lr
222 ; CHECK-MVEFP-LABEL: vcmp_oge_v4f32:
223 ; CHECK-MVEFP:       @ %bb.0: @ %entry
224 ; CHECK-MVEFP-NEXT:    vmov r0, s4
225 ; CHECK-MVEFP-NEXT:    vcmp.f32 ge, q0, r0
226 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
227 ; CHECK-MVEFP-NEXT:    bx lr
228 entry:
229   %i = insertelement <4 x float> undef, float %src2, i32 0
230   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
231   %c = fcmp oge <4 x float> %src, %sp
232   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
233   ret <4 x float> %s
236 define arm_aapcs_vfpcc <4 x float> @vcmp_olt_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
237 ; CHECK-MVE-LABEL: vcmp_olt_v4f32:
238 ; CHECK-MVE:       @ %bb.0: @ %entry
239 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
240 ; CHECK-MVE-NEXT:    movs r1, #0
241 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
242 ; CHECK-MVE-NEXT:    it mi
243 ; CHECK-MVE-NEXT:    movmi r1, #1
244 ; CHECK-MVE-NEXT:    cmp r1, #0
245 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
246 ; CHECK-MVE-NEXT:    cset r1, ne
247 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
248 ; CHECK-MVE-NEXT:    mov.w r2, #0
249 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
250 ; CHECK-MVE-NEXT:    it mi
251 ; CHECK-MVE-NEXT:    movmi r2, #1
252 ; CHECK-MVE-NEXT:    cmp r2, #0
253 ; CHECK-MVE-NEXT:    cset r2, ne
254 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
255 ; CHECK-MVE-NEXT:    mov.w r3, #0
256 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
257 ; CHECK-MVE-NEXT:    it mi
258 ; CHECK-MVE-NEXT:    movmi r3, #1
259 ; CHECK-MVE-NEXT:    cmp r3, #0
260 ; CHECK-MVE-NEXT:    cset r3, ne
261 ; CHECK-MVE-NEXT:    movs r0, #0
262 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
263 ; CHECK-MVE-NEXT:    it mi
264 ; CHECK-MVE-NEXT:    movmi r0, #1
265 ; CHECK-MVE-NEXT:    cmp r0, #0
266 ; CHECK-MVE-NEXT:    cset r0, ne
267 ; CHECK-MVE-NEXT:    cmp r3, #0
268 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
269 ; CHECK-MVE-NEXT:    cmp r0, #0
270 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
271 ; CHECK-MVE-NEXT:    cmp r1, #0
272 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
273 ; CHECK-MVE-NEXT:    cmp r2, #0
274 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
275 ; CHECK-MVE-NEXT:    bx lr
277 ; CHECK-MVEFP-LABEL: vcmp_olt_v4f32:
278 ; CHECK-MVEFP:       @ %bb.0: @ %entry
279 ; CHECK-MVEFP-NEXT:    vmov r0, s4
280 ; CHECK-MVEFP-NEXT:    vcmp.f32 lt, q0, r0
281 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
282 ; CHECK-MVEFP-NEXT:    bx lr
283 entry:
284   %i = insertelement <4 x float> undef, float %src2, i32 0
285   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
286   %c = fcmp olt <4 x float> %src, %sp
287   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
288   ret <4 x float> %s
291 define arm_aapcs_vfpcc <4 x float> @vcmp_ole_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
292 ; CHECK-MVE-LABEL: vcmp_ole_v4f32:
293 ; CHECK-MVE:       @ %bb.0: @ %entry
294 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
295 ; CHECK-MVE-NEXT:    movs r1, #0
296 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
297 ; CHECK-MVE-NEXT:    it ls
298 ; CHECK-MVE-NEXT:    movls r1, #1
299 ; CHECK-MVE-NEXT:    cmp r1, #0
300 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
301 ; CHECK-MVE-NEXT:    cset r1, ne
302 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
303 ; CHECK-MVE-NEXT:    mov.w r2, #0
304 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
305 ; CHECK-MVE-NEXT:    it ls
306 ; CHECK-MVE-NEXT:    movls r2, #1
307 ; CHECK-MVE-NEXT:    cmp r2, #0
308 ; CHECK-MVE-NEXT:    cset r2, ne
309 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
310 ; CHECK-MVE-NEXT:    mov.w r3, #0
311 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
312 ; CHECK-MVE-NEXT:    it ls
313 ; CHECK-MVE-NEXT:    movls r3, #1
314 ; CHECK-MVE-NEXT:    cmp r3, #0
315 ; CHECK-MVE-NEXT:    cset r3, ne
316 ; CHECK-MVE-NEXT:    movs r0, #0
317 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
318 ; CHECK-MVE-NEXT:    it ls
319 ; CHECK-MVE-NEXT:    movls r0, #1
320 ; CHECK-MVE-NEXT:    cmp r0, #0
321 ; CHECK-MVE-NEXT:    cset r0, ne
322 ; CHECK-MVE-NEXT:    cmp r3, #0
323 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
324 ; CHECK-MVE-NEXT:    cmp r0, #0
325 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
326 ; CHECK-MVE-NEXT:    cmp r1, #0
327 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
328 ; CHECK-MVE-NEXT:    cmp r2, #0
329 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
330 ; CHECK-MVE-NEXT:    bx lr
332 ; CHECK-MVEFP-LABEL: vcmp_ole_v4f32:
333 ; CHECK-MVEFP:       @ %bb.0: @ %entry
334 ; CHECK-MVEFP-NEXT:    vmov r0, s4
335 ; CHECK-MVEFP-NEXT:    vcmp.f32 le, q0, r0
336 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
337 ; CHECK-MVEFP-NEXT:    bx lr
338 entry:
339   %i = insertelement <4 x float> undef, float %src2, i32 0
340   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
341   %c = fcmp ole <4 x float> %src, %sp
342   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
343   ret <4 x float> %s
346 define arm_aapcs_vfpcc <4 x float> @vcmp_ueq_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
347 ; CHECK-MVE-LABEL: vcmp_ueq_v4f32:
348 ; CHECK-MVE:       @ %bb.0: @ %entry
349 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
350 ; CHECK-MVE-NEXT:    movs r1, #0
351 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
352 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
353 ; CHECK-MVE-NEXT:    it eq
354 ; CHECK-MVE-NEXT:    moveq r1, #1
355 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
356 ; CHECK-MVE-NEXT:    it vs
357 ; CHECK-MVE-NEXT:    movvs r1, #1
358 ; CHECK-MVE-NEXT:    cmp r1, #0
359 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
360 ; CHECK-MVE-NEXT:    mov.w r2, #0
361 ; CHECK-MVE-NEXT:    cset r1, ne
362 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
363 ; CHECK-MVE-NEXT:    it eq
364 ; CHECK-MVE-NEXT:    moveq r2, #1
365 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
366 ; CHECK-MVE-NEXT:    it vs
367 ; CHECK-MVE-NEXT:    movvs r2, #1
368 ; CHECK-MVE-NEXT:    cmp r2, #0
369 ; CHECK-MVE-NEXT:    mov.w r3, #0
370 ; CHECK-MVE-NEXT:    cset r2, ne
371 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
372 ; CHECK-MVE-NEXT:    it eq
373 ; CHECK-MVE-NEXT:    moveq r3, #1
374 ; CHECK-MVE-NEXT:    it vs
375 ; CHECK-MVE-NEXT:    movvs r3, #1
376 ; CHECK-MVE-NEXT:    cmp r3, #0
377 ; CHECK-MVE-NEXT:    mov.w r0, #0
378 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
379 ; CHECK-MVE-NEXT:    cset r3, ne
380 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
381 ; CHECK-MVE-NEXT:    it eq
382 ; CHECK-MVE-NEXT:    moveq r0, #1
383 ; CHECK-MVE-NEXT:    it vs
384 ; CHECK-MVE-NEXT:    movvs r0, #1
385 ; CHECK-MVE-NEXT:    cmp r0, #0
386 ; CHECK-MVE-NEXT:    cset r0, ne
387 ; CHECK-MVE-NEXT:    cmp r3, #0
388 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
389 ; CHECK-MVE-NEXT:    cmp r0, #0
390 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
391 ; CHECK-MVE-NEXT:    cmp r1, #0
392 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
393 ; CHECK-MVE-NEXT:    cmp r2, #0
394 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
395 ; CHECK-MVE-NEXT:    bx lr
397 ; CHECK-MVEFP-LABEL: vcmp_ueq_v4f32:
398 ; CHECK-MVEFP:       @ %bb.0: @ %entry
399 ; CHECK-MVEFP-NEXT:    vmov r0, s4
400 ; CHECK-MVEFP-NEXT:    vpt.f32 ge, q0, r0
401 ; CHECK-MVEFP-NEXT:    vcmpt.f32 le, q0, r0
402 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
403 ; CHECK-MVEFP-NEXT:    bx lr
404 entry:
405   %i = insertelement <4 x float> undef, float %src2, i32 0
406   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
407   %c = fcmp ueq <4 x float> %src, %sp
408   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
409   ret <4 x float> %s
412 define arm_aapcs_vfpcc <4 x float> @vcmp_une_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
413 ; CHECK-MVE-LABEL: vcmp_une_v4f32:
414 ; CHECK-MVE:       @ %bb.0: @ %entry
415 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
416 ; CHECK-MVE-NEXT:    movs r1, #0
417 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
418 ; CHECK-MVE-NEXT:    it ne
419 ; CHECK-MVE-NEXT:    movne r1, #1
420 ; CHECK-MVE-NEXT:    cmp r1, #0
421 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
422 ; CHECK-MVE-NEXT:    cset r1, ne
423 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
424 ; CHECK-MVE-NEXT:    mov.w r2, #0
425 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
426 ; CHECK-MVE-NEXT:    it ne
427 ; CHECK-MVE-NEXT:    movne r2, #1
428 ; CHECK-MVE-NEXT:    cmp r2, #0
429 ; CHECK-MVE-NEXT:    cset r2, ne
430 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
431 ; CHECK-MVE-NEXT:    mov.w r3, #0
432 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
433 ; CHECK-MVE-NEXT:    it ne
434 ; CHECK-MVE-NEXT:    movne r3, #1
435 ; CHECK-MVE-NEXT:    cmp r3, #0
436 ; CHECK-MVE-NEXT:    cset r3, ne
437 ; CHECK-MVE-NEXT:    movs r0, #0
438 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
439 ; CHECK-MVE-NEXT:    it ne
440 ; CHECK-MVE-NEXT:    movne r0, #1
441 ; CHECK-MVE-NEXT:    cmp r0, #0
442 ; CHECK-MVE-NEXT:    cset r0, ne
443 ; CHECK-MVE-NEXT:    cmp r3, #0
444 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
445 ; CHECK-MVE-NEXT:    cmp r0, #0
446 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
447 ; CHECK-MVE-NEXT:    cmp r1, #0
448 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
449 ; CHECK-MVE-NEXT:    cmp r2, #0
450 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
451 ; CHECK-MVE-NEXT:    bx lr
453 ; CHECK-MVEFP-LABEL: vcmp_une_v4f32:
454 ; CHECK-MVEFP:       @ %bb.0: @ %entry
455 ; CHECK-MVEFP-NEXT:    vmov r0, s4
456 ; CHECK-MVEFP-NEXT:    vcmp.f32 ne, q0, r0
457 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
458 ; CHECK-MVEFP-NEXT:    bx lr
459 entry:
460   %i = insertelement <4 x float> undef, float %src2, i32 0
461   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
462   %c = fcmp une <4 x float> %src, %sp
463   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
464   ret <4 x float> %s
467 define arm_aapcs_vfpcc <4 x float> @vcmp_ugt_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
468 ; CHECK-MVE-LABEL: vcmp_ugt_v4f32:
469 ; CHECK-MVE:       @ %bb.0: @ %entry
470 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
471 ; CHECK-MVE-NEXT:    movs r1, #0
472 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
473 ; CHECK-MVE-NEXT:    it hi
474 ; CHECK-MVE-NEXT:    movhi r1, #1
475 ; CHECK-MVE-NEXT:    cmp r1, #0
476 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
477 ; CHECK-MVE-NEXT:    cset r1, ne
478 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
479 ; CHECK-MVE-NEXT:    mov.w r2, #0
480 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
481 ; CHECK-MVE-NEXT:    it hi
482 ; CHECK-MVE-NEXT:    movhi r2, #1
483 ; CHECK-MVE-NEXT:    cmp r2, #0
484 ; CHECK-MVE-NEXT:    cset r2, ne
485 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
486 ; CHECK-MVE-NEXT:    mov.w r3, #0
487 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
488 ; CHECK-MVE-NEXT:    it hi
489 ; CHECK-MVE-NEXT:    movhi r3, #1
490 ; CHECK-MVE-NEXT:    cmp r3, #0
491 ; CHECK-MVE-NEXT:    cset r3, ne
492 ; CHECK-MVE-NEXT:    movs r0, #0
493 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
494 ; CHECK-MVE-NEXT:    it hi
495 ; CHECK-MVE-NEXT:    movhi r0, #1
496 ; CHECK-MVE-NEXT:    cmp r0, #0
497 ; CHECK-MVE-NEXT:    cset r0, ne
498 ; CHECK-MVE-NEXT:    cmp r3, #0
499 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
500 ; CHECK-MVE-NEXT:    cmp r0, #0
501 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
502 ; CHECK-MVE-NEXT:    cmp r1, #0
503 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
504 ; CHECK-MVE-NEXT:    cmp r2, #0
505 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
506 ; CHECK-MVE-NEXT:    bx lr
508 ; CHECK-MVEFP-LABEL: vcmp_ugt_v4f32:
509 ; CHECK-MVEFP:       @ %bb.0: @ %entry
510 ; CHECK-MVEFP-NEXT:    vmov r0, s4
511 ; CHECK-MVEFP-NEXT:    vcmp.f32 gt, q0, r0
512 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
513 ; CHECK-MVEFP-NEXT:    bx lr
514 entry:
515   %i = insertelement <4 x float> undef, float %src2, i32 0
516   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
517   %c = fcmp ugt <4 x float> %src, %sp
518   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
519   ret <4 x float> %s
522 define arm_aapcs_vfpcc <4 x float> @vcmp_uge_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
523 ; CHECK-MVE-LABEL: vcmp_uge_v4f32:
524 ; CHECK-MVE:       @ %bb.0: @ %entry
525 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
526 ; CHECK-MVE-NEXT:    movs r1, #0
527 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
528 ; CHECK-MVE-NEXT:    it pl
529 ; CHECK-MVE-NEXT:    movpl r1, #1
530 ; CHECK-MVE-NEXT:    cmp r1, #0
531 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
532 ; CHECK-MVE-NEXT:    cset r1, ne
533 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
534 ; CHECK-MVE-NEXT:    mov.w r2, #0
535 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
536 ; CHECK-MVE-NEXT:    it pl
537 ; CHECK-MVE-NEXT:    movpl r2, #1
538 ; CHECK-MVE-NEXT:    cmp r2, #0
539 ; CHECK-MVE-NEXT:    cset r2, ne
540 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
541 ; CHECK-MVE-NEXT:    mov.w r3, #0
542 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
543 ; CHECK-MVE-NEXT:    it pl
544 ; CHECK-MVE-NEXT:    movpl r3, #1
545 ; CHECK-MVE-NEXT:    cmp r3, #0
546 ; CHECK-MVE-NEXT:    cset r3, ne
547 ; CHECK-MVE-NEXT:    movs r0, #0
548 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
549 ; CHECK-MVE-NEXT:    it pl
550 ; CHECK-MVE-NEXT:    movpl r0, #1
551 ; CHECK-MVE-NEXT:    cmp r0, #0
552 ; CHECK-MVE-NEXT:    cset r0, ne
553 ; CHECK-MVE-NEXT:    cmp r3, #0
554 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
555 ; CHECK-MVE-NEXT:    cmp r0, #0
556 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
557 ; CHECK-MVE-NEXT:    cmp r1, #0
558 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
559 ; CHECK-MVE-NEXT:    cmp r2, #0
560 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
561 ; CHECK-MVE-NEXT:    bx lr
563 ; CHECK-MVEFP-LABEL: vcmp_uge_v4f32:
564 ; CHECK-MVEFP:       @ %bb.0: @ %entry
565 ; CHECK-MVEFP-NEXT:    vmov r0, s4
566 ; CHECK-MVEFP-NEXT:    vcmp.f32 ge, q0, r0
567 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
568 ; CHECK-MVEFP-NEXT:    bx lr
569 entry:
570   %i = insertelement <4 x float> undef, float %src2, i32 0
571   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
572   %c = fcmp uge <4 x float> %src, %sp
573   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
574   ret <4 x float> %s
577 define arm_aapcs_vfpcc <4 x float> @vcmp_ult_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
578 ; CHECK-MVE-LABEL: vcmp_ult_v4f32:
579 ; CHECK-MVE:       @ %bb.0: @ %entry
580 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
581 ; CHECK-MVE-NEXT:    movs r1, #0
582 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
583 ; CHECK-MVE-NEXT:    it lt
584 ; CHECK-MVE-NEXT:    movlt r1, #1
585 ; CHECK-MVE-NEXT:    cmp r1, #0
586 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
587 ; CHECK-MVE-NEXT:    cset r1, ne
588 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
589 ; CHECK-MVE-NEXT:    mov.w r2, #0
590 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
591 ; CHECK-MVE-NEXT:    it lt
592 ; CHECK-MVE-NEXT:    movlt r2, #1
593 ; CHECK-MVE-NEXT:    cmp r2, #0
594 ; CHECK-MVE-NEXT:    cset r2, ne
595 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
596 ; CHECK-MVE-NEXT:    mov.w r3, #0
597 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
598 ; CHECK-MVE-NEXT:    it lt
599 ; CHECK-MVE-NEXT:    movlt r3, #1
600 ; CHECK-MVE-NEXT:    cmp r3, #0
601 ; CHECK-MVE-NEXT:    cset r3, ne
602 ; CHECK-MVE-NEXT:    movs r0, #0
603 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
604 ; CHECK-MVE-NEXT:    it lt
605 ; CHECK-MVE-NEXT:    movlt r0, #1
606 ; CHECK-MVE-NEXT:    cmp r0, #0
607 ; CHECK-MVE-NEXT:    cset r0, ne
608 ; CHECK-MVE-NEXT:    cmp r3, #0
609 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
610 ; CHECK-MVE-NEXT:    cmp r0, #0
611 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
612 ; CHECK-MVE-NEXT:    cmp r1, #0
613 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
614 ; CHECK-MVE-NEXT:    cmp r2, #0
615 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
616 ; CHECK-MVE-NEXT:    bx lr
618 ; CHECK-MVEFP-LABEL: vcmp_ult_v4f32:
619 ; CHECK-MVEFP:       @ %bb.0: @ %entry
620 ; CHECK-MVEFP-NEXT:    vmov r0, s4
621 ; CHECK-MVEFP-NEXT:    vcmp.f32 lt, q0, r0
622 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
623 ; CHECK-MVEFP-NEXT:    bx lr
624 entry:
625   %i = insertelement <4 x float> undef, float %src2, i32 0
626   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
627   %c = fcmp ult <4 x float> %src, %sp
628   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
629   ret <4 x float> %s
632 define arm_aapcs_vfpcc <4 x float> @vcmp_ule_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
633 ; CHECK-MVE-LABEL: vcmp_ule_v4f32:
634 ; CHECK-MVE:       @ %bb.0: @ %entry
635 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
636 ; CHECK-MVE-NEXT:    movs r1, #0
637 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
638 ; CHECK-MVE-NEXT:    it le
639 ; CHECK-MVE-NEXT:    movle r1, #1
640 ; CHECK-MVE-NEXT:    cmp r1, #0
641 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
642 ; CHECK-MVE-NEXT:    cset r1, ne
643 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
644 ; CHECK-MVE-NEXT:    mov.w r2, #0
645 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
646 ; CHECK-MVE-NEXT:    it le
647 ; CHECK-MVE-NEXT:    movle r2, #1
648 ; CHECK-MVE-NEXT:    cmp r2, #0
649 ; CHECK-MVE-NEXT:    cset r2, ne
650 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
651 ; CHECK-MVE-NEXT:    mov.w r3, #0
652 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
653 ; CHECK-MVE-NEXT:    it le
654 ; CHECK-MVE-NEXT:    movle r3, #1
655 ; CHECK-MVE-NEXT:    cmp r3, #0
656 ; CHECK-MVE-NEXT:    cset r3, ne
657 ; CHECK-MVE-NEXT:    movs r0, #0
658 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
659 ; CHECK-MVE-NEXT:    it le
660 ; CHECK-MVE-NEXT:    movle r0, #1
661 ; CHECK-MVE-NEXT:    cmp r0, #0
662 ; CHECK-MVE-NEXT:    cset r0, ne
663 ; CHECK-MVE-NEXT:    cmp r3, #0
664 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
665 ; CHECK-MVE-NEXT:    cmp r0, #0
666 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
667 ; CHECK-MVE-NEXT:    cmp r1, #0
668 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
669 ; CHECK-MVE-NEXT:    cmp r2, #0
670 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
671 ; CHECK-MVE-NEXT:    bx lr
673 ; CHECK-MVEFP-LABEL: vcmp_ule_v4f32:
674 ; CHECK-MVEFP:       @ %bb.0: @ %entry
675 ; CHECK-MVEFP-NEXT:    vmov r0, s4
676 ; CHECK-MVEFP-NEXT:    vcmp.f32 le, q0, r0
677 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
678 ; CHECK-MVEFP-NEXT:    bx lr
679 entry:
680   %i = insertelement <4 x float> undef, float %src2, i32 0
681   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
682   %c = fcmp ule <4 x float> %src, %sp
683   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
684   ret <4 x float> %s
687 define arm_aapcs_vfpcc <4 x float> @vcmp_ord_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
688 ; CHECK-MVE-LABEL: vcmp_ord_v4f32:
689 ; CHECK-MVE:       @ %bb.0: @ %entry
690 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
691 ; CHECK-MVE-NEXT:    movs r1, #0
692 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
693 ; CHECK-MVE-NEXT:    it vc
694 ; CHECK-MVE-NEXT:    movvc r1, #1
695 ; CHECK-MVE-NEXT:    cmp r1, #0
696 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
697 ; CHECK-MVE-NEXT:    cset r1, ne
698 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
699 ; CHECK-MVE-NEXT:    mov.w r2, #0
700 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
701 ; CHECK-MVE-NEXT:    it vc
702 ; CHECK-MVE-NEXT:    movvc r2, #1
703 ; CHECK-MVE-NEXT:    cmp r2, #0
704 ; CHECK-MVE-NEXT:    cset r2, ne
705 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
706 ; CHECK-MVE-NEXT:    mov.w r3, #0
707 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
708 ; CHECK-MVE-NEXT:    it vc
709 ; CHECK-MVE-NEXT:    movvc r3, #1
710 ; CHECK-MVE-NEXT:    cmp r3, #0
711 ; CHECK-MVE-NEXT:    cset r3, ne
712 ; CHECK-MVE-NEXT:    movs r0, #0
713 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
714 ; CHECK-MVE-NEXT:    it vc
715 ; CHECK-MVE-NEXT:    movvc r0, #1
716 ; CHECK-MVE-NEXT:    cmp r0, #0
717 ; CHECK-MVE-NEXT:    cset r0, ne
718 ; CHECK-MVE-NEXT:    cmp r3, #0
719 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
720 ; CHECK-MVE-NEXT:    cmp r0, #0
721 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
722 ; CHECK-MVE-NEXT:    cmp r1, #0
723 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
724 ; CHECK-MVE-NEXT:    cmp r2, #0
725 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
726 ; CHECK-MVE-NEXT:    bx lr
728 ; CHECK-MVEFP-LABEL: vcmp_ord_v4f32:
729 ; CHECK-MVEFP:       @ %bb.0: @ %entry
730 ; CHECK-MVEFP-NEXT:    vmov r0, s4
731 ; CHECK-MVEFP-NEXT:    vpt.f32 ge, q0, r0
732 ; CHECK-MVEFP-NEXT:    vcmpt.f32 lt, q0, r0
733 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
734 ; CHECK-MVEFP-NEXT:    bx lr
735 entry:
736   %i = insertelement <4 x float> undef, float %src2, i32 0
737   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
738   %c = fcmp ord <4 x float> %src, %sp
739   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
740   ret <4 x float> %s
743 define arm_aapcs_vfpcc <4 x float> @vcmp_uno_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
744 ; CHECK-MVE-LABEL: vcmp_uno_v4f32:
745 ; CHECK-MVE:       @ %bb.0: @ %entry
746 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s4
747 ; CHECK-MVE-NEXT:    movs r1, #0
748 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
749 ; CHECK-MVE-NEXT:    it vs
750 ; CHECK-MVE-NEXT:    movvs r1, #1
751 ; CHECK-MVE-NEXT:    cmp r1, #0
752 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
753 ; CHECK-MVE-NEXT:    cset r1, ne
754 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
755 ; CHECK-MVE-NEXT:    mov.w r2, #0
756 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s4
757 ; CHECK-MVE-NEXT:    it vs
758 ; CHECK-MVE-NEXT:    movvs r2, #1
759 ; CHECK-MVE-NEXT:    cmp r2, #0
760 ; CHECK-MVE-NEXT:    cset r2, ne
761 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
762 ; CHECK-MVE-NEXT:    mov.w r3, #0
763 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s4
764 ; CHECK-MVE-NEXT:    it vs
765 ; CHECK-MVE-NEXT:    movvs r3, #1
766 ; CHECK-MVE-NEXT:    cmp r3, #0
767 ; CHECK-MVE-NEXT:    cset r3, ne
768 ; CHECK-MVE-NEXT:    movs r0, #0
769 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
770 ; CHECK-MVE-NEXT:    it vs
771 ; CHECK-MVE-NEXT:    movvs r0, #1
772 ; CHECK-MVE-NEXT:    cmp r0, #0
773 ; CHECK-MVE-NEXT:    cset r0, ne
774 ; CHECK-MVE-NEXT:    cmp r3, #0
775 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
776 ; CHECK-MVE-NEXT:    cmp r0, #0
777 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
778 ; CHECK-MVE-NEXT:    cmp r1, #0
779 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
780 ; CHECK-MVE-NEXT:    cmp r2, #0
781 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
782 ; CHECK-MVE-NEXT:    bx lr
784 ; CHECK-MVEFP-LABEL: vcmp_uno_v4f32:
785 ; CHECK-MVEFP:       @ %bb.0: @ %entry
786 ; CHECK-MVEFP-NEXT:    vmov r0, s4
787 ; CHECK-MVEFP-NEXT:    vpt.f32 ge, q0, r0
788 ; CHECK-MVEFP-NEXT:    vcmpt.f32 lt, q0, r0
789 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
790 ; CHECK-MVEFP-NEXT:    bx lr
791 entry:
792   %i = insertelement <4 x float> undef, float %src2, i32 0
793   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
794   %c = fcmp uno <4 x float> %src, %sp
795   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
796   ret <4 x float> %s
801 define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
802 ; CHECK-MVE-LABEL: vcmp_oeq_v8f16:
803 ; CHECK-MVE:       @ %bb.0: @ %entry
804 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
805 ; CHECK-MVE-NEXT:    movs r1, #0
806 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
807 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
808 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
809 ; CHECK-MVE-NEXT:    it eq
810 ; CHECK-MVE-NEXT:    moveq r1, #1
811 ; CHECK-MVE-NEXT:    cmp r1, #0
812 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
813 ; CHECK-MVE-NEXT:    cset r1, ne
814 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
815 ; CHECK-MVE-NEXT:    cmp r1, #0
816 ; CHECK-MVE-NEXT:    mov.w r1, #0
817 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
818 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
819 ; CHECK-MVE-NEXT:    it eq
820 ; CHECK-MVE-NEXT:    moveq r1, #1
821 ; CHECK-MVE-NEXT:    cmp r1, #0
822 ; CHECK-MVE-NEXT:    cset r1, ne
823 ; CHECK-MVE-NEXT:    movs r0, #0
824 ; CHECK-MVE-NEXT:    cmp r1, #0
825 ; CHECK-MVE-NEXT:    mov.w r1, #0
826 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
827 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
828 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
829 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
830 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
831 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
832 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
833 ; CHECK-MVE-NEXT:    it eq
834 ; CHECK-MVE-NEXT:    moveq r1, #1
835 ; CHECK-MVE-NEXT:    cmp r1, #0
836 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
837 ; CHECK-MVE-NEXT:    cset r1, ne
838 ; CHECK-MVE-NEXT:    cmp r1, #0
839 ; CHECK-MVE-NEXT:    mov.w r1, #0
840 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
841 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
842 ; CHECK-MVE-NEXT:    it eq
843 ; CHECK-MVE-NEXT:    moveq r1, #1
844 ; CHECK-MVE-NEXT:    cmp r1, #0
845 ; CHECK-MVE-NEXT:    cset r1, ne
846 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
847 ; CHECK-MVE-NEXT:    cmp r1, #0
848 ; CHECK-MVE-NEXT:    mov.w r1, #0
849 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
850 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
851 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
852 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
853 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
854 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
855 ; CHECK-MVE-NEXT:    it eq
856 ; CHECK-MVE-NEXT:    moveq r1, #1
857 ; CHECK-MVE-NEXT:    cmp r1, #0
858 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
859 ; CHECK-MVE-NEXT:    cset r1, ne
860 ; CHECK-MVE-NEXT:    cmp r1, #0
861 ; CHECK-MVE-NEXT:    mov.w r1, #0
862 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
863 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
864 ; CHECK-MVE-NEXT:    it eq
865 ; CHECK-MVE-NEXT:    moveq r1, #1
866 ; CHECK-MVE-NEXT:    cmp r1, #0
867 ; CHECK-MVE-NEXT:    cset r1, ne
868 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
869 ; CHECK-MVE-NEXT:    cmp r1, #0
870 ; CHECK-MVE-NEXT:    mov.w r1, #0
871 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
872 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
873 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
874 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
875 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
876 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
877 ; CHECK-MVE-NEXT:    it eq
878 ; CHECK-MVE-NEXT:    moveq r1, #1
879 ; CHECK-MVE-NEXT:    cmp r1, #0
880 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
881 ; CHECK-MVE-NEXT:    cset r1, ne
882 ; CHECK-MVE-NEXT:    cmp r1, #0
883 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
884 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
885 ; CHECK-MVE-NEXT:    it eq
886 ; CHECK-MVE-NEXT:    moveq r0, #1
887 ; CHECK-MVE-NEXT:    cmp r0, #0
888 ; CHECK-MVE-NEXT:    cset r0, ne
889 ; CHECK-MVE-NEXT:    cmp r0, #0
890 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
891 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
892 ; CHECK-MVE-NEXT:    bx lr
894 ; CHECK-MVEFP-LABEL: vcmp_oeq_v8f16:
895 ; CHECK-MVEFP:       @ %bb.0: @ %entry
896 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
897 ; CHECK-MVEFP-NEXT:    vcmp.f16 eq, q0, r0
898 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
899 ; CHECK-MVEFP-NEXT:    bx lr
900 entry:
901   %i = insertelement <8 x half> undef, half %src2, i32 0
902   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
903   %c = fcmp oeq <8 x half> %src, %sp
904   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
905   ret <8 x half> %s
908 define arm_aapcs_vfpcc <8 x half> @vcmp_one_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
909 ; CHECK-MVE-LABEL: vcmp_one_v8f16:
910 ; CHECK-MVE:       @ %bb.0: @ %entry
911 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
912 ; CHECK-MVE-NEXT:    movs r1, #0
913 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
914 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
915 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
916 ; CHECK-MVE-NEXT:    it mi
917 ; CHECK-MVE-NEXT:    movmi r1, #1
918 ; CHECK-MVE-NEXT:    it gt
919 ; CHECK-MVE-NEXT:    movgt r1, #1
920 ; CHECK-MVE-NEXT:    cmp r1, #0
921 ; CHECK-MVE-NEXT:    cset r1, ne
922 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
923 ; CHECK-MVE-NEXT:    cmp r1, #0
924 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
925 ; CHECK-MVE-NEXT:    mov.w r1, #0
926 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
927 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
928 ; CHECK-MVE-NEXT:    it mi
929 ; CHECK-MVE-NEXT:    movmi r1, #1
930 ; CHECK-MVE-NEXT:    it gt
931 ; CHECK-MVE-NEXT:    movgt r1, #1
932 ; CHECK-MVE-NEXT:    cmp r1, #0
933 ; CHECK-MVE-NEXT:    cset r1, ne
934 ; CHECK-MVE-NEXT:    movs r0, #0
935 ; CHECK-MVE-NEXT:    cmp r1, #0
936 ; CHECK-MVE-NEXT:    mov.w r1, #0
937 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
938 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
939 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
940 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
941 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
942 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
943 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
944 ; CHECK-MVE-NEXT:    it mi
945 ; CHECK-MVE-NEXT:    movmi r1, #1
946 ; CHECK-MVE-NEXT:    it gt
947 ; CHECK-MVE-NEXT:    movgt r1, #1
948 ; CHECK-MVE-NEXT:    cmp r1, #0
949 ; CHECK-MVE-NEXT:    cset r1, ne
950 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
951 ; CHECK-MVE-NEXT:    cmp r1, #0
952 ; CHECK-MVE-NEXT:    mov.w r1, #0
953 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
954 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
955 ; CHECK-MVE-NEXT:    it mi
956 ; CHECK-MVE-NEXT:    movmi r1, #1
957 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
958 ; CHECK-MVE-NEXT:    it gt
959 ; CHECK-MVE-NEXT:    movgt r1, #1
960 ; CHECK-MVE-NEXT:    cmp r1, #0
961 ; CHECK-MVE-NEXT:    cset r1, ne
962 ; CHECK-MVE-NEXT:    cmp r1, #0
963 ; CHECK-MVE-NEXT:    mov.w r1, #0
964 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
965 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
966 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
967 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
968 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
969 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
970 ; CHECK-MVE-NEXT:    it mi
971 ; CHECK-MVE-NEXT:    movmi r1, #1
972 ; CHECK-MVE-NEXT:    it gt
973 ; CHECK-MVE-NEXT:    movgt r1, #1
974 ; CHECK-MVE-NEXT:    cmp r1, #0
975 ; CHECK-MVE-NEXT:    cset r1, ne
976 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
977 ; CHECK-MVE-NEXT:    cmp r1, #0
978 ; CHECK-MVE-NEXT:    mov.w r1, #0
979 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
980 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
981 ; CHECK-MVE-NEXT:    it mi
982 ; CHECK-MVE-NEXT:    movmi r1, #1
983 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
984 ; CHECK-MVE-NEXT:    it gt
985 ; CHECK-MVE-NEXT:    movgt r1, #1
986 ; CHECK-MVE-NEXT:    cmp r1, #0
987 ; CHECK-MVE-NEXT:    cset r1, ne
988 ; CHECK-MVE-NEXT:    cmp r1, #0
989 ; CHECK-MVE-NEXT:    mov.w r1, #0
990 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
991 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
992 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
993 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
994 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
995 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
996 ; CHECK-MVE-NEXT:    it mi
997 ; CHECK-MVE-NEXT:    movmi r1, #1
998 ; CHECK-MVE-NEXT:    it gt
999 ; CHECK-MVE-NEXT:    movgt r1, #1
1000 ; CHECK-MVE-NEXT:    cmp r1, #0
1001 ; CHECK-MVE-NEXT:    cset r1, ne
1002 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1003 ; CHECK-MVE-NEXT:    cmp r1, #0
1004 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1005 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1006 ; CHECK-MVE-NEXT:    it mi
1007 ; CHECK-MVE-NEXT:    movmi r0, #1
1008 ; CHECK-MVE-NEXT:    it gt
1009 ; CHECK-MVE-NEXT:    movgt r0, #1
1010 ; CHECK-MVE-NEXT:    cmp r0, #0
1011 ; CHECK-MVE-NEXT:    cset r0, ne
1012 ; CHECK-MVE-NEXT:    cmp r0, #0
1013 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1014 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1015 ; CHECK-MVE-NEXT:    bx lr
1017 ; CHECK-MVEFP-LABEL: vcmp_one_v8f16:
1018 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1019 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1020 ; CHECK-MVEFP-NEXT:    vpt.f16 ge, q0, r0
1021 ; CHECK-MVEFP-NEXT:    vcmpt.f16 le, q0, r0
1022 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
1023 ; CHECK-MVEFP-NEXT:    bx lr
1024 entry:
1025   %i = insertelement <8 x half> undef, half %src2, i32 0
1026   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1027   %c = fcmp one <8 x half> %src, %sp
1028   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1029   ret <8 x half> %s
1032 define arm_aapcs_vfpcc <8 x half> @vcmp_ogt_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1033 ; CHECK-MVE-LABEL: vcmp_ogt_v8f16:
1034 ; CHECK-MVE:       @ %bb.0: @ %entry
1035 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1036 ; CHECK-MVE-NEXT:    movs r1, #0
1037 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1038 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1039 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1040 ; CHECK-MVE-NEXT:    it gt
1041 ; CHECK-MVE-NEXT:    movgt r1, #1
1042 ; CHECK-MVE-NEXT:    cmp r1, #0
1043 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1044 ; CHECK-MVE-NEXT:    cset r1, ne
1045 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1046 ; CHECK-MVE-NEXT:    cmp r1, #0
1047 ; CHECK-MVE-NEXT:    mov.w r1, #0
1048 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1049 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1050 ; CHECK-MVE-NEXT:    it gt
1051 ; CHECK-MVE-NEXT:    movgt r1, #1
1052 ; CHECK-MVE-NEXT:    cmp r1, #0
1053 ; CHECK-MVE-NEXT:    cset r1, ne
1054 ; CHECK-MVE-NEXT:    movs r0, #0
1055 ; CHECK-MVE-NEXT:    cmp r1, #0
1056 ; CHECK-MVE-NEXT:    mov.w r1, #0
1057 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1058 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1059 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1060 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1061 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1062 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1063 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1064 ; CHECK-MVE-NEXT:    it gt
1065 ; CHECK-MVE-NEXT:    movgt r1, #1
1066 ; CHECK-MVE-NEXT:    cmp r1, #0
1067 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1068 ; CHECK-MVE-NEXT:    cset r1, ne
1069 ; CHECK-MVE-NEXT:    cmp r1, #0
1070 ; CHECK-MVE-NEXT:    mov.w r1, #0
1071 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1072 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1073 ; CHECK-MVE-NEXT:    it gt
1074 ; CHECK-MVE-NEXT:    movgt r1, #1
1075 ; CHECK-MVE-NEXT:    cmp r1, #0
1076 ; CHECK-MVE-NEXT:    cset r1, ne
1077 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1078 ; CHECK-MVE-NEXT:    cmp r1, #0
1079 ; CHECK-MVE-NEXT:    mov.w r1, #0
1080 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1081 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1082 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1083 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1084 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1085 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1086 ; CHECK-MVE-NEXT:    it gt
1087 ; CHECK-MVE-NEXT:    movgt r1, #1
1088 ; CHECK-MVE-NEXT:    cmp r1, #0
1089 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1090 ; CHECK-MVE-NEXT:    cset r1, ne
1091 ; CHECK-MVE-NEXT:    cmp r1, #0
1092 ; CHECK-MVE-NEXT:    mov.w r1, #0
1093 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1094 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1095 ; CHECK-MVE-NEXT:    it gt
1096 ; CHECK-MVE-NEXT:    movgt r1, #1
1097 ; CHECK-MVE-NEXT:    cmp r1, #0
1098 ; CHECK-MVE-NEXT:    cset r1, ne
1099 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1100 ; CHECK-MVE-NEXT:    cmp r1, #0
1101 ; CHECK-MVE-NEXT:    mov.w r1, #0
1102 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1103 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1104 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1105 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1106 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1107 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1108 ; CHECK-MVE-NEXT:    it gt
1109 ; CHECK-MVE-NEXT:    movgt r1, #1
1110 ; CHECK-MVE-NEXT:    cmp r1, #0
1111 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1112 ; CHECK-MVE-NEXT:    cset r1, ne
1113 ; CHECK-MVE-NEXT:    cmp r1, #0
1114 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1115 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1116 ; CHECK-MVE-NEXT:    it gt
1117 ; CHECK-MVE-NEXT:    movgt r0, #1
1118 ; CHECK-MVE-NEXT:    cmp r0, #0
1119 ; CHECK-MVE-NEXT:    cset r0, ne
1120 ; CHECK-MVE-NEXT:    cmp r0, #0
1121 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1122 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1123 ; CHECK-MVE-NEXT:    bx lr
1125 ; CHECK-MVEFP-LABEL: vcmp_ogt_v8f16:
1126 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1127 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1128 ; CHECK-MVEFP-NEXT:    vcmp.f16 gt, q0, r0
1129 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1130 ; CHECK-MVEFP-NEXT:    bx lr
1131 entry:
1132   %i = insertelement <8 x half> undef, half %src2, i32 0
1133   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1134   %c = fcmp ogt <8 x half> %src, %sp
1135   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1136   ret <8 x half> %s
1139 define arm_aapcs_vfpcc <8 x half> @vcmp_oge_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1140 ; CHECK-MVE-LABEL: vcmp_oge_v8f16:
1141 ; CHECK-MVE:       @ %bb.0: @ %entry
1142 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1143 ; CHECK-MVE-NEXT:    movs r1, #0
1144 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1145 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1146 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1147 ; CHECK-MVE-NEXT:    it ge
1148 ; CHECK-MVE-NEXT:    movge r1, #1
1149 ; CHECK-MVE-NEXT:    cmp r1, #0
1150 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1151 ; CHECK-MVE-NEXT:    cset r1, ne
1152 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1153 ; CHECK-MVE-NEXT:    cmp r1, #0
1154 ; CHECK-MVE-NEXT:    mov.w r1, #0
1155 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1156 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1157 ; CHECK-MVE-NEXT:    it ge
1158 ; CHECK-MVE-NEXT:    movge r1, #1
1159 ; CHECK-MVE-NEXT:    cmp r1, #0
1160 ; CHECK-MVE-NEXT:    cset r1, ne
1161 ; CHECK-MVE-NEXT:    movs r0, #0
1162 ; CHECK-MVE-NEXT:    cmp r1, #0
1163 ; CHECK-MVE-NEXT:    mov.w r1, #0
1164 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1165 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1166 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1167 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1168 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1169 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1170 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1171 ; CHECK-MVE-NEXT:    it ge
1172 ; CHECK-MVE-NEXT:    movge r1, #1
1173 ; CHECK-MVE-NEXT:    cmp r1, #0
1174 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1175 ; CHECK-MVE-NEXT:    cset r1, ne
1176 ; CHECK-MVE-NEXT:    cmp r1, #0
1177 ; CHECK-MVE-NEXT:    mov.w r1, #0
1178 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1179 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1180 ; CHECK-MVE-NEXT:    it ge
1181 ; CHECK-MVE-NEXT:    movge r1, #1
1182 ; CHECK-MVE-NEXT:    cmp r1, #0
1183 ; CHECK-MVE-NEXT:    cset r1, ne
1184 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1185 ; CHECK-MVE-NEXT:    cmp r1, #0
1186 ; CHECK-MVE-NEXT:    mov.w r1, #0
1187 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1188 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1189 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1190 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1191 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1192 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1193 ; CHECK-MVE-NEXT:    it ge
1194 ; CHECK-MVE-NEXT:    movge r1, #1
1195 ; CHECK-MVE-NEXT:    cmp r1, #0
1196 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1197 ; CHECK-MVE-NEXT:    cset r1, ne
1198 ; CHECK-MVE-NEXT:    cmp r1, #0
1199 ; CHECK-MVE-NEXT:    mov.w r1, #0
1200 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1201 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1202 ; CHECK-MVE-NEXT:    it ge
1203 ; CHECK-MVE-NEXT:    movge r1, #1
1204 ; CHECK-MVE-NEXT:    cmp r1, #0
1205 ; CHECK-MVE-NEXT:    cset r1, ne
1206 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1207 ; CHECK-MVE-NEXT:    cmp r1, #0
1208 ; CHECK-MVE-NEXT:    mov.w r1, #0
1209 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1210 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1211 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1212 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1213 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1214 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1215 ; CHECK-MVE-NEXT:    it ge
1216 ; CHECK-MVE-NEXT:    movge r1, #1
1217 ; CHECK-MVE-NEXT:    cmp r1, #0
1218 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1219 ; CHECK-MVE-NEXT:    cset r1, ne
1220 ; CHECK-MVE-NEXT:    cmp r1, #0
1221 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1222 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1223 ; CHECK-MVE-NEXT:    it ge
1224 ; CHECK-MVE-NEXT:    movge r0, #1
1225 ; CHECK-MVE-NEXT:    cmp r0, #0
1226 ; CHECK-MVE-NEXT:    cset r0, ne
1227 ; CHECK-MVE-NEXT:    cmp r0, #0
1228 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1229 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1230 ; CHECK-MVE-NEXT:    bx lr
1232 ; CHECK-MVEFP-LABEL: vcmp_oge_v8f16:
1233 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1234 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1235 ; CHECK-MVEFP-NEXT:    vcmp.f16 ge, q0, r0
1236 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1237 ; CHECK-MVEFP-NEXT:    bx lr
1238 entry:
1239   %i = insertelement <8 x half> undef, half %src2, i32 0
1240   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1241   %c = fcmp oge <8 x half> %src, %sp
1242   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1243   ret <8 x half> %s
1246 define arm_aapcs_vfpcc <8 x half> @vcmp_olt_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1247 ; CHECK-MVE-LABEL: vcmp_olt_v8f16:
1248 ; CHECK-MVE:       @ %bb.0: @ %entry
1249 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1250 ; CHECK-MVE-NEXT:    movs r1, #0
1251 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1252 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1253 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1254 ; CHECK-MVE-NEXT:    it mi
1255 ; CHECK-MVE-NEXT:    movmi r1, #1
1256 ; CHECK-MVE-NEXT:    cmp r1, #0
1257 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1258 ; CHECK-MVE-NEXT:    cset r1, ne
1259 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1260 ; CHECK-MVE-NEXT:    cmp r1, #0
1261 ; CHECK-MVE-NEXT:    mov.w r1, #0
1262 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1263 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1264 ; CHECK-MVE-NEXT:    it mi
1265 ; CHECK-MVE-NEXT:    movmi r1, #1
1266 ; CHECK-MVE-NEXT:    cmp r1, #0
1267 ; CHECK-MVE-NEXT:    cset r1, ne
1268 ; CHECK-MVE-NEXT:    movs r0, #0
1269 ; CHECK-MVE-NEXT:    cmp r1, #0
1270 ; CHECK-MVE-NEXT:    mov.w r1, #0
1271 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1272 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1273 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1274 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1275 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1276 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1277 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1278 ; CHECK-MVE-NEXT:    it mi
1279 ; CHECK-MVE-NEXT:    movmi r1, #1
1280 ; CHECK-MVE-NEXT:    cmp r1, #0
1281 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1282 ; CHECK-MVE-NEXT:    cset r1, ne
1283 ; CHECK-MVE-NEXT:    cmp r1, #0
1284 ; CHECK-MVE-NEXT:    mov.w r1, #0
1285 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1286 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1287 ; CHECK-MVE-NEXT:    it mi
1288 ; CHECK-MVE-NEXT:    movmi r1, #1
1289 ; CHECK-MVE-NEXT:    cmp r1, #0
1290 ; CHECK-MVE-NEXT:    cset r1, ne
1291 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1292 ; CHECK-MVE-NEXT:    cmp r1, #0
1293 ; CHECK-MVE-NEXT:    mov.w r1, #0
1294 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1295 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1296 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1297 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1298 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1299 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1300 ; CHECK-MVE-NEXT:    it mi
1301 ; CHECK-MVE-NEXT:    movmi r1, #1
1302 ; CHECK-MVE-NEXT:    cmp r1, #0
1303 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1304 ; CHECK-MVE-NEXT:    cset r1, ne
1305 ; CHECK-MVE-NEXT:    cmp r1, #0
1306 ; CHECK-MVE-NEXT:    mov.w r1, #0
1307 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1308 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1309 ; CHECK-MVE-NEXT:    it mi
1310 ; CHECK-MVE-NEXT:    movmi r1, #1
1311 ; CHECK-MVE-NEXT:    cmp r1, #0
1312 ; CHECK-MVE-NEXT:    cset r1, ne
1313 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1314 ; CHECK-MVE-NEXT:    cmp r1, #0
1315 ; CHECK-MVE-NEXT:    mov.w r1, #0
1316 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1317 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1318 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1319 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1320 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1321 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1322 ; CHECK-MVE-NEXT:    it mi
1323 ; CHECK-MVE-NEXT:    movmi r1, #1
1324 ; CHECK-MVE-NEXT:    cmp r1, #0
1325 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1326 ; CHECK-MVE-NEXT:    cset r1, ne
1327 ; CHECK-MVE-NEXT:    cmp r1, #0
1328 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1329 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1330 ; CHECK-MVE-NEXT:    it mi
1331 ; CHECK-MVE-NEXT:    movmi r0, #1
1332 ; CHECK-MVE-NEXT:    cmp r0, #0
1333 ; CHECK-MVE-NEXT:    cset r0, ne
1334 ; CHECK-MVE-NEXT:    cmp r0, #0
1335 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1336 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1337 ; CHECK-MVE-NEXT:    bx lr
1339 ; CHECK-MVEFP-LABEL: vcmp_olt_v8f16:
1340 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1341 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1342 ; CHECK-MVEFP-NEXT:    vcmp.f16 lt, q0, r0
1343 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1344 ; CHECK-MVEFP-NEXT:    bx lr
1345 entry:
1346   %i = insertelement <8 x half> undef, half %src2, i32 0
1347   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1348   %c = fcmp olt <8 x half> %src, %sp
1349   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1350   ret <8 x half> %s
1353 define arm_aapcs_vfpcc <8 x half> @vcmp_ole_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1354 ; CHECK-MVE-LABEL: vcmp_ole_v8f16:
1355 ; CHECK-MVE:       @ %bb.0: @ %entry
1356 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1357 ; CHECK-MVE-NEXT:    movs r1, #0
1358 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1359 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1360 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1361 ; CHECK-MVE-NEXT:    it ls
1362 ; CHECK-MVE-NEXT:    movls r1, #1
1363 ; CHECK-MVE-NEXT:    cmp r1, #0
1364 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1365 ; CHECK-MVE-NEXT:    cset r1, ne
1366 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1367 ; CHECK-MVE-NEXT:    cmp r1, #0
1368 ; CHECK-MVE-NEXT:    mov.w r1, #0
1369 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1370 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1371 ; CHECK-MVE-NEXT:    it ls
1372 ; CHECK-MVE-NEXT:    movls r1, #1
1373 ; CHECK-MVE-NEXT:    cmp r1, #0
1374 ; CHECK-MVE-NEXT:    cset r1, ne
1375 ; CHECK-MVE-NEXT:    movs r0, #0
1376 ; CHECK-MVE-NEXT:    cmp r1, #0
1377 ; CHECK-MVE-NEXT:    mov.w r1, #0
1378 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1379 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1380 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1381 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1382 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1383 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1384 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1385 ; CHECK-MVE-NEXT:    it ls
1386 ; CHECK-MVE-NEXT:    movls r1, #1
1387 ; CHECK-MVE-NEXT:    cmp r1, #0
1388 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1389 ; CHECK-MVE-NEXT:    cset r1, ne
1390 ; CHECK-MVE-NEXT:    cmp r1, #0
1391 ; CHECK-MVE-NEXT:    mov.w r1, #0
1392 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1393 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1394 ; CHECK-MVE-NEXT:    it ls
1395 ; CHECK-MVE-NEXT:    movls r1, #1
1396 ; CHECK-MVE-NEXT:    cmp r1, #0
1397 ; CHECK-MVE-NEXT:    cset r1, ne
1398 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1399 ; CHECK-MVE-NEXT:    cmp r1, #0
1400 ; CHECK-MVE-NEXT:    mov.w r1, #0
1401 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1402 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1403 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1404 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1405 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1406 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1407 ; CHECK-MVE-NEXT:    it ls
1408 ; CHECK-MVE-NEXT:    movls r1, #1
1409 ; CHECK-MVE-NEXT:    cmp r1, #0
1410 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1411 ; CHECK-MVE-NEXT:    cset r1, ne
1412 ; CHECK-MVE-NEXT:    cmp r1, #0
1413 ; CHECK-MVE-NEXT:    mov.w r1, #0
1414 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1415 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1416 ; CHECK-MVE-NEXT:    it ls
1417 ; CHECK-MVE-NEXT:    movls r1, #1
1418 ; CHECK-MVE-NEXT:    cmp r1, #0
1419 ; CHECK-MVE-NEXT:    cset r1, ne
1420 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1421 ; CHECK-MVE-NEXT:    cmp r1, #0
1422 ; CHECK-MVE-NEXT:    mov.w r1, #0
1423 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1424 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1425 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1426 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1427 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1428 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1429 ; CHECK-MVE-NEXT:    it ls
1430 ; CHECK-MVE-NEXT:    movls r1, #1
1431 ; CHECK-MVE-NEXT:    cmp r1, #0
1432 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1433 ; CHECK-MVE-NEXT:    cset r1, ne
1434 ; CHECK-MVE-NEXT:    cmp r1, #0
1435 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1436 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1437 ; CHECK-MVE-NEXT:    it ls
1438 ; CHECK-MVE-NEXT:    movls r0, #1
1439 ; CHECK-MVE-NEXT:    cmp r0, #0
1440 ; CHECK-MVE-NEXT:    cset r0, ne
1441 ; CHECK-MVE-NEXT:    cmp r0, #0
1442 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1443 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1444 ; CHECK-MVE-NEXT:    bx lr
1446 ; CHECK-MVEFP-LABEL: vcmp_ole_v8f16:
1447 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1448 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1449 ; CHECK-MVEFP-NEXT:    vcmp.f16 le, q0, r0
1450 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1451 ; CHECK-MVEFP-NEXT:    bx lr
1452 entry:
1453   %i = insertelement <8 x half> undef, half %src2, i32 0
1454   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1455   %c = fcmp ole <8 x half> %src, %sp
1456   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1457   ret <8 x half> %s
1460 define arm_aapcs_vfpcc <8 x half> @vcmp_ueq_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1461 ; CHECK-MVE-LABEL: vcmp_ueq_v8f16:
1462 ; CHECK-MVE:       @ %bb.0: @ %entry
1463 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1464 ; CHECK-MVE-NEXT:    movs r1, #0
1465 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1466 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1467 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1468 ; CHECK-MVE-NEXT:    it eq
1469 ; CHECK-MVE-NEXT:    moveq r1, #1
1470 ; CHECK-MVE-NEXT:    it vs
1471 ; CHECK-MVE-NEXT:    movvs r1, #1
1472 ; CHECK-MVE-NEXT:    cmp r1, #0
1473 ; CHECK-MVE-NEXT:    cset r1, ne
1474 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1475 ; CHECK-MVE-NEXT:    cmp r1, #0
1476 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1477 ; CHECK-MVE-NEXT:    mov.w r1, #0
1478 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1479 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1480 ; CHECK-MVE-NEXT:    it eq
1481 ; CHECK-MVE-NEXT:    moveq r1, #1
1482 ; CHECK-MVE-NEXT:    it vs
1483 ; CHECK-MVE-NEXT:    movvs r1, #1
1484 ; CHECK-MVE-NEXT:    cmp r1, #0
1485 ; CHECK-MVE-NEXT:    cset r1, ne
1486 ; CHECK-MVE-NEXT:    movs r0, #0
1487 ; CHECK-MVE-NEXT:    cmp r1, #0
1488 ; CHECK-MVE-NEXT:    mov.w r1, #0
1489 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1490 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1491 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1492 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1493 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1494 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1495 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1496 ; CHECK-MVE-NEXT:    it eq
1497 ; CHECK-MVE-NEXT:    moveq r1, #1
1498 ; CHECK-MVE-NEXT:    it vs
1499 ; CHECK-MVE-NEXT:    movvs r1, #1
1500 ; CHECK-MVE-NEXT:    cmp r1, #0
1501 ; CHECK-MVE-NEXT:    cset r1, ne
1502 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1503 ; CHECK-MVE-NEXT:    cmp r1, #0
1504 ; CHECK-MVE-NEXT:    mov.w r1, #0
1505 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1506 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1507 ; CHECK-MVE-NEXT:    it eq
1508 ; CHECK-MVE-NEXT:    moveq r1, #1
1509 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1510 ; CHECK-MVE-NEXT:    it vs
1511 ; CHECK-MVE-NEXT:    movvs r1, #1
1512 ; CHECK-MVE-NEXT:    cmp r1, #0
1513 ; CHECK-MVE-NEXT:    cset r1, ne
1514 ; CHECK-MVE-NEXT:    cmp r1, #0
1515 ; CHECK-MVE-NEXT:    mov.w r1, #0
1516 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1517 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1518 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1519 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1520 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1521 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1522 ; CHECK-MVE-NEXT:    it eq
1523 ; CHECK-MVE-NEXT:    moveq r1, #1
1524 ; CHECK-MVE-NEXT:    it vs
1525 ; CHECK-MVE-NEXT:    movvs r1, #1
1526 ; CHECK-MVE-NEXT:    cmp r1, #0
1527 ; CHECK-MVE-NEXT:    cset r1, ne
1528 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1529 ; CHECK-MVE-NEXT:    cmp r1, #0
1530 ; CHECK-MVE-NEXT:    mov.w r1, #0
1531 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1532 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1533 ; CHECK-MVE-NEXT:    it eq
1534 ; CHECK-MVE-NEXT:    moveq r1, #1
1535 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1536 ; CHECK-MVE-NEXT:    it vs
1537 ; CHECK-MVE-NEXT:    movvs r1, #1
1538 ; CHECK-MVE-NEXT:    cmp r1, #0
1539 ; CHECK-MVE-NEXT:    cset r1, ne
1540 ; CHECK-MVE-NEXT:    cmp r1, #0
1541 ; CHECK-MVE-NEXT:    mov.w r1, #0
1542 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1543 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1544 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1545 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1546 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1547 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1548 ; CHECK-MVE-NEXT:    it eq
1549 ; CHECK-MVE-NEXT:    moveq r1, #1
1550 ; CHECK-MVE-NEXT:    it vs
1551 ; CHECK-MVE-NEXT:    movvs r1, #1
1552 ; CHECK-MVE-NEXT:    cmp r1, #0
1553 ; CHECK-MVE-NEXT:    cset r1, ne
1554 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1555 ; CHECK-MVE-NEXT:    cmp r1, #0
1556 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1557 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1558 ; CHECK-MVE-NEXT:    it eq
1559 ; CHECK-MVE-NEXT:    moveq r0, #1
1560 ; CHECK-MVE-NEXT:    it vs
1561 ; CHECK-MVE-NEXT:    movvs r0, #1
1562 ; CHECK-MVE-NEXT:    cmp r0, #0
1563 ; CHECK-MVE-NEXT:    cset r0, ne
1564 ; CHECK-MVE-NEXT:    cmp r0, #0
1565 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1566 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1567 ; CHECK-MVE-NEXT:    bx lr
1569 ; CHECK-MVEFP-LABEL: vcmp_ueq_v8f16:
1570 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1571 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1572 ; CHECK-MVEFP-NEXT:    vpt.f16 ge, q0, r0
1573 ; CHECK-MVEFP-NEXT:    vcmpt.f16 le, q0, r0
1574 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1575 ; CHECK-MVEFP-NEXT:    bx lr
1576 entry:
1577   %i = insertelement <8 x half> undef, half %src2, i32 0
1578   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1579   %c = fcmp ueq <8 x half> %src, %sp
1580   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1581   ret <8 x half> %s
1584 define arm_aapcs_vfpcc <8 x half> @vcmp_une_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1585 ; CHECK-MVE-LABEL: vcmp_une_v8f16:
1586 ; CHECK-MVE:       @ %bb.0: @ %entry
1587 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1588 ; CHECK-MVE-NEXT:    movs r1, #0
1589 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1590 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1591 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1592 ; CHECK-MVE-NEXT:    it ne
1593 ; CHECK-MVE-NEXT:    movne r1, #1
1594 ; CHECK-MVE-NEXT:    cmp r1, #0
1595 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1596 ; CHECK-MVE-NEXT:    cset r1, ne
1597 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1598 ; CHECK-MVE-NEXT:    cmp r1, #0
1599 ; CHECK-MVE-NEXT:    mov.w r1, #0
1600 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1601 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1602 ; CHECK-MVE-NEXT:    it ne
1603 ; CHECK-MVE-NEXT:    movne r1, #1
1604 ; CHECK-MVE-NEXT:    cmp r1, #0
1605 ; CHECK-MVE-NEXT:    cset r1, ne
1606 ; CHECK-MVE-NEXT:    movs r0, #0
1607 ; CHECK-MVE-NEXT:    cmp r1, #0
1608 ; CHECK-MVE-NEXT:    mov.w r1, #0
1609 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1610 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1611 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1612 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1613 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1614 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1615 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1616 ; CHECK-MVE-NEXT:    it ne
1617 ; CHECK-MVE-NEXT:    movne r1, #1
1618 ; CHECK-MVE-NEXT:    cmp r1, #0
1619 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1620 ; CHECK-MVE-NEXT:    cset r1, ne
1621 ; CHECK-MVE-NEXT:    cmp r1, #0
1622 ; CHECK-MVE-NEXT:    mov.w r1, #0
1623 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1624 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1625 ; CHECK-MVE-NEXT:    it ne
1626 ; CHECK-MVE-NEXT:    movne r1, #1
1627 ; CHECK-MVE-NEXT:    cmp r1, #0
1628 ; CHECK-MVE-NEXT:    cset r1, ne
1629 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1630 ; CHECK-MVE-NEXT:    cmp r1, #0
1631 ; CHECK-MVE-NEXT:    mov.w r1, #0
1632 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1633 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1634 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1635 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1636 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1637 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1638 ; CHECK-MVE-NEXT:    it ne
1639 ; CHECK-MVE-NEXT:    movne r1, #1
1640 ; CHECK-MVE-NEXT:    cmp r1, #0
1641 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1642 ; CHECK-MVE-NEXT:    cset r1, ne
1643 ; CHECK-MVE-NEXT:    cmp r1, #0
1644 ; CHECK-MVE-NEXT:    mov.w r1, #0
1645 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1646 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1647 ; CHECK-MVE-NEXT:    it ne
1648 ; CHECK-MVE-NEXT:    movne r1, #1
1649 ; CHECK-MVE-NEXT:    cmp r1, #0
1650 ; CHECK-MVE-NEXT:    cset r1, ne
1651 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1652 ; CHECK-MVE-NEXT:    cmp r1, #0
1653 ; CHECK-MVE-NEXT:    mov.w r1, #0
1654 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1655 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1656 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1657 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1658 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1659 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1660 ; CHECK-MVE-NEXT:    it ne
1661 ; CHECK-MVE-NEXT:    movne r1, #1
1662 ; CHECK-MVE-NEXT:    cmp r1, #0
1663 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1664 ; CHECK-MVE-NEXT:    cset r1, ne
1665 ; CHECK-MVE-NEXT:    cmp r1, #0
1666 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1667 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1668 ; CHECK-MVE-NEXT:    it ne
1669 ; CHECK-MVE-NEXT:    movne r0, #1
1670 ; CHECK-MVE-NEXT:    cmp r0, #0
1671 ; CHECK-MVE-NEXT:    cset r0, ne
1672 ; CHECK-MVE-NEXT:    cmp r0, #0
1673 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1674 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1675 ; CHECK-MVE-NEXT:    bx lr
1677 ; CHECK-MVEFP-LABEL: vcmp_une_v8f16:
1678 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1679 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1680 ; CHECK-MVEFP-NEXT:    vcmp.f16 ne, q0, r0
1681 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1682 ; CHECK-MVEFP-NEXT:    bx lr
1683 entry:
1684   %i = insertelement <8 x half> undef, half %src2, i32 0
1685   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1686   %c = fcmp une <8 x half> %src, %sp
1687   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1688   ret <8 x half> %s
1691 define arm_aapcs_vfpcc <8 x half> @vcmp_ugt_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1692 ; CHECK-MVE-LABEL: vcmp_ugt_v8f16:
1693 ; CHECK-MVE:       @ %bb.0: @ %entry
1694 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1695 ; CHECK-MVE-NEXT:    movs r1, #0
1696 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1697 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1698 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1699 ; CHECK-MVE-NEXT:    it hi
1700 ; CHECK-MVE-NEXT:    movhi r1, #1
1701 ; CHECK-MVE-NEXT:    cmp r1, #0
1702 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1703 ; CHECK-MVE-NEXT:    cset r1, ne
1704 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1705 ; CHECK-MVE-NEXT:    cmp r1, #0
1706 ; CHECK-MVE-NEXT:    mov.w r1, #0
1707 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1708 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1709 ; CHECK-MVE-NEXT:    it hi
1710 ; CHECK-MVE-NEXT:    movhi r1, #1
1711 ; CHECK-MVE-NEXT:    cmp r1, #0
1712 ; CHECK-MVE-NEXT:    cset r1, ne
1713 ; CHECK-MVE-NEXT:    movs r0, #0
1714 ; CHECK-MVE-NEXT:    cmp r1, #0
1715 ; CHECK-MVE-NEXT:    mov.w r1, #0
1716 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1717 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1718 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1719 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1720 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1721 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1722 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1723 ; CHECK-MVE-NEXT:    it hi
1724 ; CHECK-MVE-NEXT:    movhi r1, #1
1725 ; CHECK-MVE-NEXT:    cmp r1, #0
1726 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1727 ; CHECK-MVE-NEXT:    cset r1, ne
1728 ; CHECK-MVE-NEXT:    cmp r1, #0
1729 ; CHECK-MVE-NEXT:    mov.w r1, #0
1730 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1731 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1732 ; CHECK-MVE-NEXT:    it hi
1733 ; CHECK-MVE-NEXT:    movhi r1, #1
1734 ; CHECK-MVE-NEXT:    cmp r1, #0
1735 ; CHECK-MVE-NEXT:    cset r1, ne
1736 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1737 ; CHECK-MVE-NEXT:    cmp r1, #0
1738 ; CHECK-MVE-NEXT:    mov.w r1, #0
1739 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1740 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1741 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1742 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1743 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1744 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1745 ; CHECK-MVE-NEXT:    it hi
1746 ; CHECK-MVE-NEXT:    movhi r1, #1
1747 ; CHECK-MVE-NEXT:    cmp r1, #0
1748 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1749 ; CHECK-MVE-NEXT:    cset r1, ne
1750 ; CHECK-MVE-NEXT:    cmp r1, #0
1751 ; CHECK-MVE-NEXT:    mov.w r1, #0
1752 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1753 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1754 ; CHECK-MVE-NEXT:    it hi
1755 ; CHECK-MVE-NEXT:    movhi r1, #1
1756 ; CHECK-MVE-NEXT:    cmp r1, #0
1757 ; CHECK-MVE-NEXT:    cset r1, ne
1758 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1759 ; CHECK-MVE-NEXT:    cmp r1, #0
1760 ; CHECK-MVE-NEXT:    mov.w r1, #0
1761 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1762 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1763 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1764 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1765 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1766 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1767 ; CHECK-MVE-NEXT:    it hi
1768 ; CHECK-MVE-NEXT:    movhi r1, #1
1769 ; CHECK-MVE-NEXT:    cmp r1, #0
1770 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1771 ; CHECK-MVE-NEXT:    cset r1, ne
1772 ; CHECK-MVE-NEXT:    cmp r1, #0
1773 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1774 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1775 ; CHECK-MVE-NEXT:    it hi
1776 ; CHECK-MVE-NEXT:    movhi r0, #1
1777 ; CHECK-MVE-NEXT:    cmp r0, #0
1778 ; CHECK-MVE-NEXT:    cset r0, ne
1779 ; CHECK-MVE-NEXT:    cmp r0, #0
1780 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1781 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1782 ; CHECK-MVE-NEXT:    bx lr
1784 ; CHECK-MVEFP-LABEL: vcmp_ugt_v8f16:
1785 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1786 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1787 ; CHECK-MVEFP-NEXT:    vcmp.f16 gt, q0, r0
1788 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1789 ; CHECK-MVEFP-NEXT:    bx lr
1790 entry:
1791   %i = insertelement <8 x half> undef, half %src2, i32 0
1792   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1793   %c = fcmp ugt <8 x half> %src, %sp
1794   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1795   ret <8 x half> %s
1798 define arm_aapcs_vfpcc <8 x half> @vcmp_uge_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1799 ; CHECK-MVE-LABEL: vcmp_uge_v8f16:
1800 ; CHECK-MVE:       @ %bb.0: @ %entry
1801 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1802 ; CHECK-MVE-NEXT:    movs r1, #0
1803 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1804 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1805 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1806 ; CHECK-MVE-NEXT:    it pl
1807 ; CHECK-MVE-NEXT:    movpl r1, #1
1808 ; CHECK-MVE-NEXT:    cmp r1, #0
1809 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1810 ; CHECK-MVE-NEXT:    cset r1, ne
1811 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1812 ; CHECK-MVE-NEXT:    cmp r1, #0
1813 ; CHECK-MVE-NEXT:    mov.w r1, #0
1814 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1815 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1816 ; CHECK-MVE-NEXT:    it pl
1817 ; CHECK-MVE-NEXT:    movpl r1, #1
1818 ; CHECK-MVE-NEXT:    cmp r1, #0
1819 ; CHECK-MVE-NEXT:    cset r1, ne
1820 ; CHECK-MVE-NEXT:    movs r0, #0
1821 ; CHECK-MVE-NEXT:    cmp r1, #0
1822 ; CHECK-MVE-NEXT:    mov.w r1, #0
1823 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1824 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1825 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1826 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1827 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1828 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1829 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1830 ; CHECK-MVE-NEXT:    it pl
1831 ; CHECK-MVE-NEXT:    movpl r1, #1
1832 ; CHECK-MVE-NEXT:    cmp r1, #0
1833 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1834 ; CHECK-MVE-NEXT:    cset r1, ne
1835 ; CHECK-MVE-NEXT:    cmp r1, #0
1836 ; CHECK-MVE-NEXT:    mov.w r1, #0
1837 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1838 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1839 ; CHECK-MVE-NEXT:    it pl
1840 ; CHECK-MVE-NEXT:    movpl r1, #1
1841 ; CHECK-MVE-NEXT:    cmp r1, #0
1842 ; CHECK-MVE-NEXT:    cset r1, ne
1843 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1844 ; CHECK-MVE-NEXT:    cmp r1, #0
1845 ; CHECK-MVE-NEXT:    mov.w r1, #0
1846 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1847 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1848 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1849 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1850 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1851 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1852 ; CHECK-MVE-NEXT:    it pl
1853 ; CHECK-MVE-NEXT:    movpl r1, #1
1854 ; CHECK-MVE-NEXT:    cmp r1, #0
1855 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1856 ; CHECK-MVE-NEXT:    cset r1, ne
1857 ; CHECK-MVE-NEXT:    cmp r1, #0
1858 ; CHECK-MVE-NEXT:    mov.w r1, #0
1859 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1860 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1861 ; CHECK-MVE-NEXT:    it pl
1862 ; CHECK-MVE-NEXT:    movpl r1, #1
1863 ; CHECK-MVE-NEXT:    cmp r1, #0
1864 ; CHECK-MVE-NEXT:    cset r1, ne
1865 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1866 ; CHECK-MVE-NEXT:    cmp r1, #0
1867 ; CHECK-MVE-NEXT:    mov.w r1, #0
1868 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1869 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1870 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1871 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1872 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1873 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1874 ; CHECK-MVE-NEXT:    it pl
1875 ; CHECK-MVE-NEXT:    movpl r1, #1
1876 ; CHECK-MVE-NEXT:    cmp r1, #0
1877 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1878 ; CHECK-MVE-NEXT:    cset r1, ne
1879 ; CHECK-MVE-NEXT:    cmp r1, #0
1880 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1881 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1882 ; CHECK-MVE-NEXT:    it pl
1883 ; CHECK-MVE-NEXT:    movpl r0, #1
1884 ; CHECK-MVE-NEXT:    cmp r0, #0
1885 ; CHECK-MVE-NEXT:    cset r0, ne
1886 ; CHECK-MVE-NEXT:    cmp r0, #0
1887 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1888 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1889 ; CHECK-MVE-NEXT:    bx lr
1891 ; CHECK-MVEFP-LABEL: vcmp_uge_v8f16:
1892 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1893 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
1894 ; CHECK-MVEFP-NEXT:    vcmp.f16 ge, q0, r0
1895 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1896 ; CHECK-MVEFP-NEXT:    bx lr
1897 entry:
1898   %i = insertelement <8 x half> undef, half %src2, i32 0
1899   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
1900   %c = fcmp uge <8 x half> %src, %sp
1901   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1902   ret <8 x half> %s
1905 define arm_aapcs_vfpcc <8 x half> @vcmp_ult_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
1906 ; CHECK-MVE-LABEL: vcmp_ult_v8f16:
1907 ; CHECK-MVE:       @ %bb.0: @ %entry
1908 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
1909 ; CHECK-MVE-NEXT:    movs r1, #0
1910 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1911 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
1912 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1913 ; CHECK-MVE-NEXT:    it lt
1914 ; CHECK-MVE-NEXT:    movlt r1, #1
1915 ; CHECK-MVE-NEXT:    cmp r1, #0
1916 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
1917 ; CHECK-MVE-NEXT:    cset r1, ne
1918 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1919 ; CHECK-MVE-NEXT:    cmp r1, #0
1920 ; CHECK-MVE-NEXT:    mov.w r1, #0
1921 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
1922 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1923 ; CHECK-MVE-NEXT:    it lt
1924 ; CHECK-MVE-NEXT:    movlt r1, #1
1925 ; CHECK-MVE-NEXT:    cmp r1, #0
1926 ; CHECK-MVE-NEXT:    cset r1, ne
1927 ; CHECK-MVE-NEXT:    movs r0, #0
1928 ; CHECK-MVE-NEXT:    cmp r1, #0
1929 ; CHECK-MVE-NEXT:    mov.w r1, #0
1930 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1931 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1932 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
1933 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
1934 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1935 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
1936 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1937 ; CHECK-MVE-NEXT:    it lt
1938 ; CHECK-MVE-NEXT:    movlt r1, #1
1939 ; CHECK-MVE-NEXT:    cmp r1, #0
1940 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
1941 ; CHECK-MVE-NEXT:    cset r1, ne
1942 ; CHECK-MVE-NEXT:    cmp r1, #0
1943 ; CHECK-MVE-NEXT:    mov.w r1, #0
1944 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1945 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1946 ; CHECK-MVE-NEXT:    it lt
1947 ; CHECK-MVE-NEXT:    movlt r1, #1
1948 ; CHECK-MVE-NEXT:    cmp r1, #0
1949 ; CHECK-MVE-NEXT:    cset r1, ne
1950 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1951 ; CHECK-MVE-NEXT:    cmp r1, #0
1952 ; CHECK-MVE-NEXT:    mov.w r1, #0
1953 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1954 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
1955 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
1956 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1957 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
1958 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1959 ; CHECK-MVE-NEXT:    it lt
1960 ; CHECK-MVE-NEXT:    movlt r1, #1
1961 ; CHECK-MVE-NEXT:    cmp r1, #0
1962 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
1963 ; CHECK-MVE-NEXT:    cset r1, ne
1964 ; CHECK-MVE-NEXT:    cmp r1, #0
1965 ; CHECK-MVE-NEXT:    mov.w r1, #0
1966 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1967 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1968 ; CHECK-MVE-NEXT:    it lt
1969 ; CHECK-MVE-NEXT:    movlt r1, #1
1970 ; CHECK-MVE-NEXT:    cmp r1, #0
1971 ; CHECK-MVE-NEXT:    cset r1, ne
1972 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
1973 ; CHECK-MVE-NEXT:    cmp r1, #0
1974 ; CHECK-MVE-NEXT:    mov.w r1, #0
1975 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1976 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
1977 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1978 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1979 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
1980 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1981 ; CHECK-MVE-NEXT:    it lt
1982 ; CHECK-MVE-NEXT:    movlt r1, #1
1983 ; CHECK-MVE-NEXT:    cmp r1, #0
1984 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
1985 ; CHECK-MVE-NEXT:    cset r1, ne
1986 ; CHECK-MVE-NEXT:    cmp r1, #0
1987 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
1988 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1989 ; CHECK-MVE-NEXT:    it lt
1990 ; CHECK-MVE-NEXT:    movlt r0, #1
1991 ; CHECK-MVE-NEXT:    cmp r0, #0
1992 ; CHECK-MVE-NEXT:    cset r0, ne
1993 ; CHECK-MVE-NEXT:    cmp r0, #0
1994 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1995 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
1996 ; CHECK-MVE-NEXT:    bx lr
1998 ; CHECK-MVEFP-LABEL: vcmp_ult_v8f16:
1999 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2000 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
2001 ; CHECK-MVEFP-NEXT:    vcmp.f16 lt, q0, r0
2002 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2003 ; CHECK-MVEFP-NEXT:    bx lr
2004 entry:
2005   %i = insertelement <8 x half> undef, half %src2, i32 0
2006   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
2007   %c = fcmp ult <8 x half> %src, %sp
2008   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2009   ret <8 x half> %s
2012 define arm_aapcs_vfpcc <8 x half> @vcmp_ule_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
2013 ; CHECK-MVE-LABEL: vcmp_ule_v8f16:
2014 ; CHECK-MVE:       @ %bb.0: @ %entry
2015 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
2016 ; CHECK-MVE-NEXT:    movs r1, #0
2017 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2018 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
2019 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2020 ; CHECK-MVE-NEXT:    it le
2021 ; CHECK-MVE-NEXT:    movle r1, #1
2022 ; CHECK-MVE-NEXT:    cmp r1, #0
2023 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
2024 ; CHECK-MVE-NEXT:    cset r1, ne
2025 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
2026 ; CHECK-MVE-NEXT:    cmp r1, #0
2027 ; CHECK-MVE-NEXT:    mov.w r1, #0
2028 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
2029 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2030 ; CHECK-MVE-NEXT:    it le
2031 ; CHECK-MVE-NEXT:    movle r1, #1
2032 ; CHECK-MVE-NEXT:    cmp r1, #0
2033 ; CHECK-MVE-NEXT:    cset r1, ne
2034 ; CHECK-MVE-NEXT:    movs r0, #0
2035 ; CHECK-MVE-NEXT:    cmp r1, #0
2036 ; CHECK-MVE-NEXT:    mov.w r1, #0
2037 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
2038 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
2039 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
2040 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
2041 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2042 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
2043 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2044 ; CHECK-MVE-NEXT:    it le
2045 ; CHECK-MVE-NEXT:    movle r1, #1
2046 ; CHECK-MVE-NEXT:    cmp r1, #0
2047 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
2048 ; CHECK-MVE-NEXT:    cset r1, ne
2049 ; CHECK-MVE-NEXT:    cmp r1, #0
2050 ; CHECK-MVE-NEXT:    mov.w r1, #0
2051 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2052 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2053 ; CHECK-MVE-NEXT:    it le
2054 ; CHECK-MVE-NEXT:    movle r1, #1
2055 ; CHECK-MVE-NEXT:    cmp r1, #0
2056 ; CHECK-MVE-NEXT:    cset r1, ne
2057 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
2058 ; CHECK-MVE-NEXT:    cmp r1, #0
2059 ; CHECK-MVE-NEXT:    mov.w r1, #0
2060 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
2061 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
2062 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
2063 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2064 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
2065 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2066 ; CHECK-MVE-NEXT:    it le
2067 ; CHECK-MVE-NEXT:    movle r1, #1
2068 ; CHECK-MVE-NEXT:    cmp r1, #0
2069 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
2070 ; CHECK-MVE-NEXT:    cset r1, ne
2071 ; CHECK-MVE-NEXT:    cmp r1, #0
2072 ; CHECK-MVE-NEXT:    mov.w r1, #0
2073 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2074 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2075 ; CHECK-MVE-NEXT:    it le
2076 ; CHECK-MVE-NEXT:    movle r1, #1
2077 ; CHECK-MVE-NEXT:    cmp r1, #0
2078 ; CHECK-MVE-NEXT:    cset r1, ne
2079 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
2080 ; CHECK-MVE-NEXT:    cmp r1, #0
2081 ; CHECK-MVE-NEXT:    mov.w r1, #0
2082 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
2083 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
2084 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
2085 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2086 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
2087 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2088 ; CHECK-MVE-NEXT:    it le
2089 ; CHECK-MVE-NEXT:    movle r1, #1
2090 ; CHECK-MVE-NEXT:    cmp r1, #0
2091 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
2092 ; CHECK-MVE-NEXT:    cset r1, ne
2093 ; CHECK-MVE-NEXT:    cmp r1, #0
2094 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2095 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2096 ; CHECK-MVE-NEXT:    it le
2097 ; CHECK-MVE-NEXT:    movle r0, #1
2098 ; CHECK-MVE-NEXT:    cmp r0, #0
2099 ; CHECK-MVE-NEXT:    cset r0, ne
2100 ; CHECK-MVE-NEXT:    cmp r0, #0
2101 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
2102 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
2103 ; CHECK-MVE-NEXT:    bx lr
2105 ; CHECK-MVEFP-LABEL: vcmp_ule_v8f16:
2106 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2107 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
2108 ; CHECK-MVEFP-NEXT:    vcmp.f16 le, q0, r0
2109 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2110 ; CHECK-MVEFP-NEXT:    bx lr
2111 entry:
2112   %i = insertelement <8 x half> undef, half %src2, i32 0
2113   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
2114   %c = fcmp ule <8 x half> %src, %sp
2115   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2116   ret <8 x half> %s
2119 define arm_aapcs_vfpcc <8 x half> @vcmp_ord_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
2120 ; CHECK-MVE-LABEL: vcmp_ord_v8f16:
2121 ; CHECK-MVE:       @ %bb.0: @ %entry
2122 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
2123 ; CHECK-MVE-NEXT:    movs r1, #0
2124 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2125 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
2126 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2127 ; CHECK-MVE-NEXT:    it vc
2128 ; CHECK-MVE-NEXT:    movvc r1, #1
2129 ; CHECK-MVE-NEXT:    cmp r1, #0
2130 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
2131 ; CHECK-MVE-NEXT:    cset r1, ne
2132 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
2133 ; CHECK-MVE-NEXT:    cmp r1, #0
2134 ; CHECK-MVE-NEXT:    mov.w r1, #0
2135 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
2136 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2137 ; CHECK-MVE-NEXT:    it vc
2138 ; CHECK-MVE-NEXT:    movvc r1, #1
2139 ; CHECK-MVE-NEXT:    cmp r1, #0
2140 ; CHECK-MVE-NEXT:    cset r1, ne
2141 ; CHECK-MVE-NEXT:    movs r0, #0
2142 ; CHECK-MVE-NEXT:    cmp r1, #0
2143 ; CHECK-MVE-NEXT:    mov.w r1, #0
2144 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
2145 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
2146 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
2147 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
2148 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2149 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
2150 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2151 ; CHECK-MVE-NEXT:    it vc
2152 ; CHECK-MVE-NEXT:    movvc r1, #1
2153 ; CHECK-MVE-NEXT:    cmp r1, #0
2154 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
2155 ; CHECK-MVE-NEXT:    cset r1, ne
2156 ; CHECK-MVE-NEXT:    cmp r1, #0
2157 ; CHECK-MVE-NEXT:    mov.w r1, #0
2158 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2159 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2160 ; CHECK-MVE-NEXT:    it vc
2161 ; CHECK-MVE-NEXT:    movvc r1, #1
2162 ; CHECK-MVE-NEXT:    cmp r1, #0
2163 ; CHECK-MVE-NEXT:    cset r1, ne
2164 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
2165 ; CHECK-MVE-NEXT:    cmp r1, #0
2166 ; CHECK-MVE-NEXT:    mov.w r1, #0
2167 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
2168 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
2169 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
2170 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2171 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
2172 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2173 ; CHECK-MVE-NEXT:    it vc
2174 ; CHECK-MVE-NEXT:    movvc r1, #1
2175 ; CHECK-MVE-NEXT:    cmp r1, #0
2176 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
2177 ; CHECK-MVE-NEXT:    cset r1, ne
2178 ; CHECK-MVE-NEXT:    cmp r1, #0
2179 ; CHECK-MVE-NEXT:    mov.w r1, #0
2180 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2181 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2182 ; CHECK-MVE-NEXT:    it vc
2183 ; CHECK-MVE-NEXT:    movvc r1, #1
2184 ; CHECK-MVE-NEXT:    cmp r1, #0
2185 ; CHECK-MVE-NEXT:    cset r1, ne
2186 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
2187 ; CHECK-MVE-NEXT:    cmp r1, #0
2188 ; CHECK-MVE-NEXT:    mov.w r1, #0
2189 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
2190 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
2191 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
2192 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2193 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
2194 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2195 ; CHECK-MVE-NEXT:    it vc
2196 ; CHECK-MVE-NEXT:    movvc r1, #1
2197 ; CHECK-MVE-NEXT:    cmp r1, #0
2198 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
2199 ; CHECK-MVE-NEXT:    cset r1, ne
2200 ; CHECK-MVE-NEXT:    cmp r1, #0
2201 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2202 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2203 ; CHECK-MVE-NEXT:    it vc
2204 ; CHECK-MVE-NEXT:    movvc r0, #1
2205 ; CHECK-MVE-NEXT:    cmp r0, #0
2206 ; CHECK-MVE-NEXT:    cset r0, ne
2207 ; CHECK-MVE-NEXT:    cmp r0, #0
2208 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
2209 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
2210 ; CHECK-MVE-NEXT:    bx lr
2212 ; CHECK-MVEFP-LABEL: vcmp_ord_v8f16:
2213 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2214 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
2215 ; CHECK-MVEFP-NEXT:    vpt.f16 ge, q0, r0
2216 ; CHECK-MVEFP-NEXT:    vcmpt.f16 lt, q0, r0
2217 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
2218 ; CHECK-MVEFP-NEXT:    bx lr
2219 entry:
2220   %i = insertelement <8 x half> undef, half %src2, i32 0
2221   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
2222   %c = fcmp ord <8 x half> %src, %sp
2223   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2224   ret <8 x half> %s
2227 define arm_aapcs_vfpcc <8 x half> @vcmp_uno_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
2228 ; CHECK-MVE-LABEL: vcmp_uno_v8f16:
2229 ; CHECK-MVE:       @ %bb.0: @ %entry
2230 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
2231 ; CHECK-MVE-NEXT:    movs r1, #0
2232 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2233 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
2234 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2235 ; CHECK-MVE-NEXT:    it vs
2236 ; CHECK-MVE-NEXT:    movvs r1, #1
2237 ; CHECK-MVE-NEXT:    cmp r1, #0
2238 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
2239 ; CHECK-MVE-NEXT:    cset r1, ne
2240 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
2241 ; CHECK-MVE-NEXT:    cmp r1, #0
2242 ; CHECK-MVE-NEXT:    mov.w r1, #0
2243 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
2244 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2245 ; CHECK-MVE-NEXT:    it vs
2246 ; CHECK-MVE-NEXT:    movvs r1, #1
2247 ; CHECK-MVE-NEXT:    cmp r1, #0
2248 ; CHECK-MVE-NEXT:    cset r1, ne
2249 ; CHECK-MVE-NEXT:    movs r0, #0
2250 ; CHECK-MVE-NEXT:    cmp r1, #0
2251 ; CHECK-MVE-NEXT:    mov.w r1, #0
2252 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
2253 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
2254 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
2255 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
2256 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2257 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
2258 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2259 ; CHECK-MVE-NEXT:    it vs
2260 ; CHECK-MVE-NEXT:    movvs r1, #1
2261 ; CHECK-MVE-NEXT:    cmp r1, #0
2262 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
2263 ; CHECK-MVE-NEXT:    cset r1, ne
2264 ; CHECK-MVE-NEXT:    cmp r1, #0
2265 ; CHECK-MVE-NEXT:    mov.w r1, #0
2266 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2267 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2268 ; CHECK-MVE-NEXT:    it vs
2269 ; CHECK-MVE-NEXT:    movvs r1, #1
2270 ; CHECK-MVE-NEXT:    cmp r1, #0
2271 ; CHECK-MVE-NEXT:    cset r1, ne
2272 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
2273 ; CHECK-MVE-NEXT:    cmp r1, #0
2274 ; CHECK-MVE-NEXT:    mov.w r1, #0
2275 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
2276 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
2277 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
2278 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2279 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
2280 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2281 ; CHECK-MVE-NEXT:    it vs
2282 ; CHECK-MVE-NEXT:    movvs r1, #1
2283 ; CHECK-MVE-NEXT:    cmp r1, #0
2284 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
2285 ; CHECK-MVE-NEXT:    cset r1, ne
2286 ; CHECK-MVE-NEXT:    cmp r1, #0
2287 ; CHECK-MVE-NEXT:    mov.w r1, #0
2288 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2289 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2290 ; CHECK-MVE-NEXT:    it vs
2291 ; CHECK-MVE-NEXT:    movvs r1, #1
2292 ; CHECK-MVE-NEXT:    cmp r1, #0
2293 ; CHECK-MVE-NEXT:    cset r1, ne
2294 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
2295 ; CHECK-MVE-NEXT:    cmp r1, #0
2296 ; CHECK-MVE-NEXT:    mov.w r1, #0
2297 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
2298 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
2299 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
2300 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
2301 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
2302 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2303 ; CHECK-MVE-NEXT:    it vs
2304 ; CHECK-MVE-NEXT:    movvs r1, #1
2305 ; CHECK-MVE-NEXT:    cmp r1, #0
2306 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
2307 ; CHECK-MVE-NEXT:    cset r1, ne
2308 ; CHECK-MVE-NEXT:    cmp r1, #0
2309 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
2310 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2311 ; CHECK-MVE-NEXT:    it vs
2312 ; CHECK-MVE-NEXT:    movvs r0, #1
2313 ; CHECK-MVE-NEXT:    cmp r0, #0
2314 ; CHECK-MVE-NEXT:    cset r0, ne
2315 ; CHECK-MVE-NEXT:    cmp r0, #0
2316 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
2317 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
2318 ; CHECK-MVE-NEXT:    bx lr
2320 ; CHECK-MVEFP-LABEL: vcmp_uno_v8f16:
2321 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2322 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
2323 ; CHECK-MVEFP-NEXT:    vpt.f16 ge, q0, r0
2324 ; CHECK-MVEFP-NEXT:    vcmpt.f16 lt, q0, r0
2325 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2326 ; CHECK-MVEFP-NEXT:    bx lr
2327 entry:
2328   %i = insertelement <8 x half> undef, half %src2, i32 0
2329   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
2330   %c = fcmp uno <8 x half> %src, %sp
2331   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
2332   ret <8 x half> %s
2336 ; Reversed
2338 define arm_aapcs_vfpcc <4 x float> @vcmp_r_oeq_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2339 ; CHECK-MVE-LABEL: vcmp_r_oeq_v4f32:
2340 ; CHECK-MVE:       @ %bb.0: @ %entry
2341 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2342 ; CHECK-MVE-NEXT:    movs r1, #0
2343 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2344 ; CHECK-MVE-NEXT:    it eq
2345 ; CHECK-MVE-NEXT:    moveq r1, #1
2346 ; CHECK-MVE-NEXT:    cmp r1, #0
2347 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2348 ; CHECK-MVE-NEXT:    cset r1, ne
2349 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2350 ; CHECK-MVE-NEXT:    mov.w r2, #0
2351 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2352 ; CHECK-MVE-NEXT:    it eq
2353 ; CHECK-MVE-NEXT:    moveq r2, #1
2354 ; CHECK-MVE-NEXT:    cmp r2, #0
2355 ; CHECK-MVE-NEXT:    cset r2, ne
2356 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2357 ; CHECK-MVE-NEXT:    mov.w r3, #0
2358 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2359 ; CHECK-MVE-NEXT:    it eq
2360 ; CHECK-MVE-NEXT:    moveq r3, #1
2361 ; CHECK-MVE-NEXT:    cmp r3, #0
2362 ; CHECK-MVE-NEXT:    cset r3, ne
2363 ; CHECK-MVE-NEXT:    movs r0, #0
2364 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2365 ; CHECK-MVE-NEXT:    it eq
2366 ; CHECK-MVE-NEXT:    moveq r0, #1
2367 ; CHECK-MVE-NEXT:    cmp r0, #0
2368 ; CHECK-MVE-NEXT:    cset r0, ne
2369 ; CHECK-MVE-NEXT:    cmp r3, #0
2370 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2371 ; CHECK-MVE-NEXT:    cmp r0, #0
2372 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2373 ; CHECK-MVE-NEXT:    cmp r1, #0
2374 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2375 ; CHECK-MVE-NEXT:    cmp r2, #0
2376 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2377 ; CHECK-MVE-NEXT:    bx lr
2379 ; CHECK-MVEFP-LABEL: vcmp_r_oeq_v4f32:
2380 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2381 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2382 ; CHECK-MVEFP-NEXT:    vcmp.f32 eq, q0, r0
2383 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2384 ; CHECK-MVEFP-NEXT:    bx lr
2385 entry:
2386   %i = insertelement <4 x float> undef, float %src2, i32 0
2387   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2388   %c = fcmp oeq <4 x float> %sp, %src
2389   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2390   ret <4 x float> %s
2393 define arm_aapcs_vfpcc <4 x float> @vcmp_r_one_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2394 ; CHECK-MVE-LABEL: vcmp_r_one_v4f32:
2395 ; CHECK-MVE:       @ %bb.0: @ %entry
2396 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2397 ; CHECK-MVE-NEXT:    movs r1, #0
2398 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2399 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2400 ; CHECK-MVE-NEXT:    it mi
2401 ; CHECK-MVE-NEXT:    movmi r1, #1
2402 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2403 ; CHECK-MVE-NEXT:    it gt
2404 ; CHECK-MVE-NEXT:    movgt r1, #1
2405 ; CHECK-MVE-NEXT:    cmp r1, #0
2406 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2407 ; CHECK-MVE-NEXT:    mov.w r2, #0
2408 ; CHECK-MVE-NEXT:    cset r1, ne
2409 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2410 ; CHECK-MVE-NEXT:    it mi
2411 ; CHECK-MVE-NEXT:    movmi r2, #1
2412 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2413 ; CHECK-MVE-NEXT:    it gt
2414 ; CHECK-MVE-NEXT:    movgt r2, #1
2415 ; CHECK-MVE-NEXT:    cmp r2, #0
2416 ; CHECK-MVE-NEXT:    mov.w r3, #0
2417 ; CHECK-MVE-NEXT:    cset r2, ne
2418 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2419 ; CHECK-MVE-NEXT:    it mi
2420 ; CHECK-MVE-NEXT:    movmi r3, #1
2421 ; CHECK-MVE-NEXT:    it gt
2422 ; CHECK-MVE-NEXT:    movgt r3, #1
2423 ; CHECK-MVE-NEXT:    cmp r3, #0
2424 ; CHECK-MVE-NEXT:    mov.w r0, #0
2425 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2426 ; CHECK-MVE-NEXT:    cset r3, ne
2427 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2428 ; CHECK-MVE-NEXT:    it mi
2429 ; CHECK-MVE-NEXT:    movmi r0, #1
2430 ; CHECK-MVE-NEXT:    it gt
2431 ; CHECK-MVE-NEXT:    movgt r0, #1
2432 ; CHECK-MVE-NEXT:    cmp r0, #0
2433 ; CHECK-MVE-NEXT:    cset r0, ne
2434 ; CHECK-MVE-NEXT:    cmp r3, #0
2435 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2436 ; CHECK-MVE-NEXT:    cmp r0, #0
2437 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2438 ; CHECK-MVE-NEXT:    cmp r1, #0
2439 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2440 ; CHECK-MVE-NEXT:    cmp r2, #0
2441 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2442 ; CHECK-MVE-NEXT:    bx lr
2444 ; CHECK-MVEFP-LABEL: vcmp_r_one_v4f32:
2445 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2446 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2447 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q0, r0
2448 ; CHECK-MVEFP-NEXT:    vcmpt.f32 ge, q0, r0
2449 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
2450 ; CHECK-MVEFP-NEXT:    bx lr
2451 entry:
2452   %i = insertelement <4 x float> undef, float %src2, i32 0
2453   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2454   %c = fcmp one <4 x float> %sp, %src
2455   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2456   ret <4 x float> %s
2459 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ogt_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2460 ; CHECK-MVE-LABEL: vcmp_r_ogt_v4f32:
2461 ; CHECK-MVE:       @ %bb.0: @ %entry
2462 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2463 ; CHECK-MVE-NEXT:    movs r1, #0
2464 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2465 ; CHECK-MVE-NEXT:    it gt
2466 ; CHECK-MVE-NEXT:    movgt r1, #1
2467 ; CHECK-MVE-NEXT:    cmp r1, #0
2468 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2469 ; CHECK-MVE-NEXT:    cset r1, ne
2470 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2471 ; CHECK-MVE-NEXT:    mov.w r2, #0
2472 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2473 ; CHECK-MVE-NEXT:    it gt
2474 ; CHECK-MVE-NEXT:    movgt r2, #1
2475 ; CHECK-MVE-NEXT:    cmp r2, #0
2476 ; CHECK-MVE-NEXT:    cset r2, ne
2477 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2478 ; CHECK-MVE-NEXT:    mov.w r3, #0
2479 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2480 ; CHECK-MVE-NEXT:    it gt
2481 ; CHECK-MVE-NEXT:    movgt r3, #1
2482 ; CHECK-MVE-NEXT:    cmp r3, #0
2483 ; CHECK-MVE-NEXT:    cset r3, ne
2484 ; CHECK-MVE-NEXT:    movs r0, #0
2485 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2486 ; CHECK-MVE-NEXT:    it gt
2487 ; CHECK-MVE-NEXT:    movgt r0, #1
2488 ; CHECK-MVE-NEXT:    cmp r0, #0
2489 ; CHECK-MVE-NEXT:    cset r0, ne
2490 ; CHECK-MVE-NEXT:    cmp r3, #0
2491 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2492 ; CHECK-MVE-NEXT:    cmp r0, #0
2493 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2494 ; CHECK-MVE-NEXT:    cmp r1, #0
2495 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2496 ; CHECK-MVE-NEXT:    cmp r2, #0
2497 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2498 ; CHECK-MVE-NEXT:    bx lr
2500 ; CHECK-MVEFP-LABEL: vcmp_r_ogt_v4f32:
2501 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2502 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2503 ; CHECK-MVEFP-NEXT:    vcmp.f32 lt, q0, r0
2504 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2505 ; CHECK-MVEFP-NEXT:    bx lr
2506 entry:
2507   %i = insertelement <4 x float> undef, float %src2, i32 0
2508   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2509   %c = fcmp ogt <4 x float> %sp, %src
2510   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2511   ret <4 x float> %s
2514 define arm_aapcs_vfpcc <4 x float> @vcmp_r_oge_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2515 ; CHECK-MVE-LABEL: vcmp_r_oge_v4f32:
2516 ; CHECK-MVE:       @ %bb.0: @ %entry
2517 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2518 ; CHECK-MVE-NEXT:    movs r1, #0
2519 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2520 ; CHECK-MVE-NEXT:    it ge
2521 ; CHECK-MVE-NEXT:    movge r1, #1
2522 ; CHECK-MVE-NEXT:    cmp r1, #0
2523 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2524 ; CHECK-MVE-NEXT:    cset r1, ne
2525 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2526 ; CHECK-MVE-NEXT:    mov.w r2, #0
2527 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2528 ; CHECK-MVE-NEXT:    it ge
2529 ; CHECK-MVE-NEXT:    movge r2, #1
2530 ; CHECK-MVE-NEXT:    cmp r2, #0
2531 ; CHECK-MVE-NEXT:    cset r2, ne
2532 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2533 ; CHECK-MVE-NEXT:    mov.w r3, #0
2534 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2535 ; CHECK-MVE-NEXT:    it ge
2536 ; CHECK-MVE-NEXT:    movge r3, #1
2537 ; CHECK-MVE-NEXT:    cmp r3, #0
2538 ; CHECK-MVE-NEXT:    cset r3, ne
2539 ; CHECK-MVE-NEXT:    movs r0, #0
2540 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2541 ; CHECK-MVE-NEXT:    it ge
2542 ; CHECK-MVE-NEXT:    movge r0, #1
2543 ; CHECK-MVE-NEXT:    cmp r0, #0
2544 ; CHECK-MVE-NEXT:    cset r0, ne
2545 ; CHECK-MVE-NEXT:    cmp r3, #0
2546 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2547 ; CHECK-MVE-NEXT:    cmp r0, #0
2548 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2549 ; CHECK-MVE-NEXT:    cmp r1, #0
2550 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2551 ; CHECK-MVE-NEXT:    cmp r2, #0
2552 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2553 ; CHECK-MVE-NEXT:    bx lr
2555 ; CHECK-MVEFP-LABEL: vcmp_r_oge_v4f32:
2556 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2557 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2558 ; CHECK-MVEFP-NEXT:    vcmp.f32 le, q0, r0
2559 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2560 ; CHECK-MVEFP-NEXT:    bx lr
2561 entry:
2562   %i = insertelement <4 x float> undef, float %src2, i32 0
2563   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2564   %c = fcmp oge <4 x float> %sp, %src
2565   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2566   ret <4 x float> %s
2569 define arm_aapcs_vfpcc <4 x float> @vcmp_r_olt_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2570 ; CHECK-MVE-LABEL: vcmp_r_olt_v4f32:
2571 ; CHECK-MVE:       @ %bb.0: @ %entry
2572 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2573 ; CHECK-MVE-NEXT:    movs r1, #0
2574 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2575 ; CHECK-MVE-NEXT:    it mi
2576 ; CHECK-MVE-NEXT:    movmi r1, #1
2577 ; CHECK-MVE-NEXT:    cmp r1, #0
2578 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2579 ; CHECK-MVE-NEXT:    cset r1, ne
2580 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2581 ; CHECK-MVE-NEXT:    mov.w r2, #0
2582 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2583 ; CHECK-MVE-NEXT:    it mi
2584 ; CHECK-MVE-NEXT:    movmi r2, #1
2585 ; CHECK-MVE-NEXT:    cmp r2, #0
2586 ; CHECK-MVE-NEXT:    cset r2, ne
2587 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2588 ; CHECK-MVE-NEXT:    mov.w r3, #0
2589 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2590 ; CHECK-MVE-NEXT:    it mi
2591 ; CHECK-MVE-NEXT:    movmi r3, #1
2592 ; CHECK-MVE-NEXT:    cmp r3, #0
2593 ; CHECK-MVE-NEXT:    cset r3, ne
2594 ; CHECK-MVE-NEXT:    movs r0, #0
2595 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2596 ; CHECK-MVE-NEXT:    it mi
2597 ; CHECK-MVE-NEXT:    movmi r0, #1
2598 ; CHECK-MVE-NEXT:    cmp r0, #0
2599 ; CHECK-MVE-NEXT:    cset r0, ne
2600 ; CHECK-MVE-NEXT:    cmp r3, #0
2601 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2602 ; CHECK-MVE-NEXT:    cmp r0, #0
2603 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2604 ; CHECK-MVE-NEXT:    cmp r1, #0
2605 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2606 ; CHECK-MVE-NEXT:    cmp r2, #0
2607 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2608 ; CHECK-MVE-NEXT:    bx lr
2610 ; CHECK-MVEFP-LABEL: vcmp_r_olt_v4f32:
2611 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2612 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2613 ; CHECK-MVEFP-NEXT:    vcmp.f32 gt, q0, r0
2614 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2615 ; CHECK-MVEFP-NEXT:    bx lr
2616 entry:
2617   %i = insertelement <4 x float> undef, float %src2, i32 0
2618   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2619   %c = fcmp olt <4 x float> %sp, %src
2620   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2621   ret <4 x float> %s
2624 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ole_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2625 ; CHECK-MVE-LABEL: vcmp_r_ole_v4f32:
2626 ; CHECK-MVE:       @ %bb.0: @ %entry
2627 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2628 ; CHECK-MVE-NEXT:    movs r1, #0
2629 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2630 ; CHECK-MVE-NEXT:    it ls
2631 ; CHECK-MVE-NEXT:    movls r1, #1
2632 ; CHECK-MVE-NEXT:    cmp r1, #0
2633 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2634 ; CHECK-MVE-NEXT:    cset r1, ne
2635 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2636 ; CHECK-MVE-NEXT:    mov.w r2, #0
2637 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2638 ; CHECK-MVE-NEXT:    it ls
2639 ; CHECK-MVE-NEXT:    movls r2, #1
2640 ; CHECK-MVE-NEXT:    cmp r2, #0
2641 ; CHECK-MVE-NEXT:    cset r2, ne
2642 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2643 ; CHECK-MVE-NEXT:    mov.w r3, #0
2644 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2645 ; CHECK-MVE-NEXT:    it ls
2646 ; CHECK-MVE-NEXT:    movls r3, #1
2647 ; CHECK-MVE-NEXT:    cmp r3, #0
2648 ; CHECK-MVE-NEXT:    cset r3, ne
2649 ; CHECK-MVE-NEXT:    movs r0, #0
2650 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2651 ; CHECK-MVE-NEXT:    it ls
2652 ; CHECK-MVE-NEXT:    movls r0, #1
2653 ; CHECK-MVE-NEXT:    cmp r0, #0
2654 ; CHECK-MVE-NEXT:    cset r0, ne
2655 ; CHECK-MVE-NEXT:    cmp r3, #0
2656 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2657 ; CHECK-MVE-NEXT:    cmp r0, #0
2658 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2659 ; CHECK-MVE-NEXT:    cmp r1, #0
2660 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2661 ; CHECK-MVE-NEXT:    cmp r2, #0
2662 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2663 ; CHECK-MVE-NEXT:    bx lr
2665 ; CHECK-MVEFP-LABEL: vcmp_r_ole_v4f32:
2666 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2667 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2668 ; CHECK-MVEFP-NEXT:    vcmp.f32 ge, q0, r0
2669 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2670 ; CHECK-MVEFP-NEXT:    bx lr
2671 entry:
2672   %i = insertelement <4 x float> undef, float %src2, i32 0
2673   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2674   %c = fcmp ole <4 x float> %sp, %src
2675   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2676   ret <4 x float> %s
2679 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ueq_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2680 ; CHECK-MVE-LABEL: vcmp_r_ueq_v4f32:
2681 ; CHECK-MVE:       @ %bb.0: @ %entry
2682 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2683 ; CHECK-MVE-NEXT:    movs r1, #0
2684 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2685 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2686 ; CHECK-MVE-NEXT:    it eq
2687 ; CHECK-MVE-NEXT:    moveq r1, #1
2688 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2689 ; CHECK-MVE-NEXT:    it vs
2690 ; CHECK-MVE-NEXT:    movvs r1, #1
2691 ; CHECK-MVE-NEXT:    cmp r1, #0
2692 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2693 ; CHECK-MVE-NEXT:    mov.w r2, #0
2694 ; CHECK-MVE-NEXT:    cset r1, ne
2695 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2696 ; CHECK-MVE-NEXT:    it eq
2697 ; CHECK-MVE-NEXT:    moveq r2, #1
2698 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2699 ; CHECK-MVE-NEXT:    it vs
2700 ; CHECK-MVE-NEXT:    movvs r2, #1
2701 ; CHECK-MVE-NEXT:    cmp r2, #0
2702 ; CHECK-MVE-NEXT:    mov.w r3, #0
2703 ; CHECK-MVE-NEXT:    cset r2, ne
2704 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2705 ; CHECK-MVE-NEXT:    it eq
2706 ; CHECK-MVE-NEXT:    moveq r3, #1
2707 ; CHECK-MVE-NEXT:    it vs
2708 ; CHECK-MVE-NEXT:    movvs r3, #1
2709 ; CHECK-MVE-NEXT:    cmp r3, #0
2710 ; CHECK-MVE-NEXT:    mov.w r0, #0
2711 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2712 ; CHECK-MVE-NEXT:    cset r3, ne
2713 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2714 ; CHECK-MVE-NEXT:    it eq
2715 ; CHECK-MVE-NEXT:    moveq r0, #1
2716 ; CHECK-MVE-NEXT:    it vs
2717 ; CHECK-MVE-NEXT:    movvs r0, #1
2718 ; CHECK-MVE-NEXT:    cmp r0, #0
2719 ; CHECK-MVE-NEXT:    cset r0, ne
2720 ; CHECK-MVE-NEXT:    cmp r3, #0
2721 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2722 ; CHECK-MVE-NEXT:    cmp r0, #0
2723 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2724 ; CHECK-MVE-NEXT:    cmp r1, #0
2725 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2726 ; CHECK-MVE-NEXT:    cmp r2, #0
2727 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2728 ; CHECK-MVE-NEXT:    bx lr
2730 ; CHECK-MVEFP-LABEL: vcmp_r_ueq_v4f32:
2731 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2732 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2733 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q0, r0
2734 ; CHECK-MVEFP-NEXT:    vcmpt.f32 ge, q0, r0
2735 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2736 ; CHECK-MVEFP-NEXT:    bx lr
2737 entry:
2738   %i = insertelement <4 x float> undef, float %src2, i32 0
2739   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2740   %c = fcmp ueq <4 x float> %sp, %src
2741   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2742   ret <4 x float> %s
2745 define arm_aapcs_vfpcc <4 x float> @vcmp_r_une_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2746 ; CHECK-MVE-LABEL: vcmp_r_une_v4f32:
2747 ; CHECK-MVE:       @ %bb.0: @ %entry
2748 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2749 ; CHECK-MVE-NEXT:    movs r1, #0
2750 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2751 ; CHECK-MVE-NEXT:    it ne
2752 ; CHECK-MVE-NEXT:    movne r1, #1
2753 ; CHECK-MVE-NEXT:    cmp r1, #0
2754 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2755 ; CHECK-MVE-NEXT:    cset r1, ne
2756 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2757 ; CHECK-MVE-NEXT:    mov.w r2, #0
2758 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2759 ; CHECK-MVE-NEXT:    it ne
2760 ; CHECK-MVE-NEXT:    movne r2, #1
2761 ; CHECK-MVE-NEXT:    cmp r2, #0
2762 ; CHECK-MVE-NEXT:    cset r2, ne
2763 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2764 ; CHECK-MVE-NEXT:    mov.w r3, #0
2765 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2766 ; CHECK-MVE-NEXT:    it ne
2767 ; CHECK-MVE-NEXT:    movne r3, #1
2768 ; CHECK-MVE-NEXT:    cmp r3, #0
2769 ; CHECK-MVE-NEXT:    cset r3, ne
2770 ; CHECK-MVE-NEXT:    movs r0, #0
2771 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2772 ; CHECK-MVE-NEXT:    it ne
2773 ; CHECK-MVE-NEXT:    movne r0, #1
2774 ; CHECK-MVE-NEXT:    cmp r0, #0
2775 ; CHECK-MVE-NEXT:    cset r0, ne
2776 ; CHECK-MVE-NEXT:    cmp r3, #0
2777 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2778 ; CHECK-MVE-NEXT:    cmp r0, #0
2779 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2780 ; CHECK-MVE-NEXT:    cmp r1, #0
2781 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2782 ; CHECK-MVE-NEXT:    cmp r2, #0
2783 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2784 ; CHECK-MVE-NEXT:    bx lr
2786 ; CHECK-MVEFP-LABEL: vcmp_r_une_v4f32:
2787 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2788 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2789 ; CHECK-MVEFP-NEXT:    vcmp.f32 ne, q0, r0
2790 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2791 ; CHECK-MVEFP-NEXT:    bx lr
2792 entry:
2793   %i = insertelement <4 x float> undef, float %src2, i32 0
2794   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2795   %c = fcmp une <4 x float> %sp, %src
2796   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2797   ret <4 x float> %s
2800 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ugt_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2801 ; CHECK-MVE-LABEL: vcmp_r_ugt_v4f32:
2802 ; CHECK-MVE:       @ %bb.0: @ %entry
2803 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2804 ; CHECK-MVE-NEXT:    movs r1, #0
2805 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2806 ; CHECK-MVE-NEXT:    it hi
2807 ; CHECK-MVE-NEXT:    movhi r1, #1
2808 ; CHECK-MVE-NEXT:    cmp r1, #0
2809 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2810 ; CHECK-MVE-NEXT:    cset r1, ne
2811 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2812 ; CHECK-MVE-NEXT:    mov.w r2, #0
2813 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2814 ; CHECK-MVE-NEXT:    it hi
2815 ; CHECK-MVE-NEXT:    movhi r2, #1
2816 ; CHECK-MVE-NEXT:    cmp r2, #0
2817 ; CHECK-MVE-NEXT:    cset r2, ne
2818 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2819 ; CHECK-MVE-NEXT:    mov.w r3, #0
2820 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2821 ; CHECK-MVE-NEXT:    it hi
2822 ; CHECK-MVE-NEXT:    movhi r3, #1
2823 ; CHECK-MVE-NEXT:    cmp r3, #0
2824 ; CHECK-MVE-NEXT:    cset r3, ne
2825 ; CHECK-MVE-NEXT:    movs r0, #0
2826 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2827 ; CHECK-MVE-NEXT:    it hi
2828 ; CHECK-MVE-NEXT:    movhi r0, #1
2829 ; CHECK-MVE-NEXT:    cmp r0, #0
2830 ; CHECK-MVE-NEXT:    cset r0, ne
2831 ; CHECK-MVE-NEXT:    cmp r3, #0
2832 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2833 ; CHECK-MVE-NEXT:    cmp r0, #0
2834 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2835 ; CHECK-MVE-NEXT:    cmp r1, #0
2836 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2837 ; CHECK-MVE-NEXT:    cmp r2, #0
2838 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2839 ; CHECK-MVE-NEXT:    bx lr
2841 ; CHECK-MVEFP-LABEL: vcmp_r_ugt_v4f32:
2842 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2843 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2844 ; CHECK-MVEFP-NEXT:    vcmp.f32 lt, q0, r0
2845 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2846 ; CHECK-MVEFP-NEXT:    bx lr
2847 entry:
2848   %i = insertelement <4 x float> undef, float %src2, i32 0
2849   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2850   %c = fcmp ugt <4 x float> %sp, %src
2851   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2852   ret <4 x float> %s
2855 define arm_aapcs_vfpcc <4 x float> @vcmp_r_uge_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2856 ; CHECK-MVE-LABEL: vcmp_r_uge_v4f32:
2857 ; CHECK-MVE:       @ %bb.0: @ %entry
2858 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2859 ; CHECK-MVE-NEXT:    movs r1, #0
2860 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2861 ; CHECK-MVE-NEXT:    it pl
2862 ; CHECK-MVE-NEXT:    movpl r1, #1
2863 ; CHECK-MVE-NEXT:    cmp r1, #0
2864 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2865 ; CHECK-MVE-NEXT:    cset r1, ne
2866 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2867 ; CHECK-MVE-NEXT:    mov.w r2, #0
2868 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2869 ; CHECK-MVE-NEXT:    it pl
2870 ; CHECK-MVE-NEXT:    movpl r2, #1
2871 ; CHECK-MVE-NEXT:    cmp r2, #0
2872 ; CHECK-MVE-NEXT:    cset r2, ne
2873 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2874 ; CHECK-MVE-NEXT:    mov.w r3, #0
2875 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2876 ; CHECK-MVE-NEXT:    it pl
2877 ; CHECK-MVE-NEXT:    movpl r3, #1
2878 ; CHECK-MVE-NEXT:    cmp r3, #0
2879 ; CHECK-MVE-NEXT:    cset r3, ne
2880 ; CHECK-MVE-NEXT:    movs r0, #0
2881 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2882 ; CHECK-MVE-NEXT:    it pl
2883 ; CHECK-MVE-NEXT:    movpl r0, #1
2884 ; CHECK-MVE-NEXT:    cmp r0, #0
2885 ; CHECK-MVE-NEXT:    cset r0, ne
2886 ; CHECK-MVE-NEXT:    cmp r3, #0
2887 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2888 ; CHECK-MVE-NEXT:    cmp r0, #0
2889 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2890 ; CHECK-MVE-NEXT:    cmp r1, #0
2891 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2892 ; CHECK-MVE-NEXT:    cmp r2, #0
2893 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2894 ; CHECK-MVE-NEXT:    bx lr
2896 ; CHECK-MVEFP-LABEL: vcmp_r_uge_v4f32:
2897 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2898 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2899 ; CHECK-MVEFP-NEXT:    vcmp.f32 le, q0, r0
2900 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2901 ; CHECK-MVEFP-NEXT:    bx lr
2902 entry:
2903   %i = insertelement <4 x float> undef, float %src2, i32 0
2904   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2905   %c = fcmp uge <4 x float> %sp, %src
2906   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2907   ret <4 x float> %s
2910 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ult_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2911 ; CHECK-MVE-LABEL: vcmp_r_ult_v4f32:
2912 ; CHECK-MVE:       @ %bb.0: @ %entry
2913 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2914 ; CHECK-MVE-NEXT:    movs r1, #0
2915 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2916 ; CHECK-MVE-NEXT:    it lt
2917 ; CHECK-MVE-NEXT:    movlt r1, #1
2918 ; CHECK-MVE-NEXT:    cmp r1, #0
2919 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2920 ; CHECK-MVE-NEXT:    cset r1, ne
2921 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2922 ; CHECK-MVE-NEXT:    mov.w r2, #0
2923 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2924 ; CHECK-MVE-NEXT:    it lt
2925 ; CHECK-MVE-NEXT:    movlt r2, #1
2926 ; CHECK-MVE-NEXT:    cmp r2, #0
2927 ; CHECK-MVE-NEXT:    cset r2, ne
2928 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2929 ; CHECK-MVE-NEXT:    mov.w r3, #0
2930 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2931 ; CHECK-MVE-NEXT:    it lt
2932 ; CHECK-MVE-NEXT:    movlt r3, #1
2933 ; CHECK-MVE-NEXT:    cmp r3, #0
2934 ; CHECK-MVE-NEXT:    cset r3, ne
2935 ; CHECK-MVE-NEXT:    movs r0, #0
2936 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2937 ; CHECK-MVE-NEXT:    it lt
2938 ; CHECK-MVE-NEXT:    movlt r0, #1
2939 ; CHECK-MVE-NEXT:    cmp r0, #0
2940 ; CHECK-MVE-NEXT:    cset r0, ne
2941 ; CHECK-MVE-NEXT:    cmp r3, #0
2942 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2943 ; CHECK-MVE-NEXT:    cmp r0, #0
2944 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
2945 ; CHECK-MVE-NEXT:    cmp r1, #0
2946 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
2947 ; CHECK-MVE-NEXT:    cmp r2, #0
2948 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
2949 ; CHECK-MVE-NEXT:    bx lr
2951 ; CHECK-MVEFP-LABEL: vcmp_r_ult_v4f32:
2952 ; CHECK-MVEFP:       @ %bb.0: @ %entry
2953 ; CHECK-MVEFP-NEXT:    vmov r0, s4
2954 ; CHECK-MVEFP-NEXT:    vcmp.f32 gt, q0, r0
2955 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
2956 ; CHECK-MVEFP-NEXT:    bx lr
2957 entry:
2958   %i = insertelement <4 x float> undef, float %src2, i32 0
2959   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
2960   %c = fcmp ult <4 x float> %sp, %src
2961   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
2962   ret <4 x float> %s
2965 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ule_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
2966 ; CHECK-MVE-LABEL: vcmp_r_ule_v4f32:
2967 ; CHECK-MVE:       @ %bb.0: @ %entry
2968 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
2969 ; CHECK-MVE-NEXT:    movs r1, #0
2970 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2971 ; CHECK-MVE-NEXT:    it le
2972 ; CHECK-MVE-NEXT:    movle r1, #1
2973 ; CHECK-MVE-NEXT:    cmp r1, #0
2974 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
2975 ; CHECK-MVE-NEXT:    cset r1, ne
2976 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2977 ; CHECK-MVE-NEXT:    mov.w r2, #0
2978 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
2979 ; CHECK-MVE-NEXT:    it le
2980 ; CHECK-MVE-NEXT:    movle r2, #1
2981 ; CHECK-MVE-NEXT:    cmp r2, #0
2982 ; CHECK-MVE-NEXT:    cset r2, ne
2983 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2984 ; CHECK-MVE-NEXT:    mov.w r3, #0
2985 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
2986 ; CHECK-MVE-NEXT:    it le
2987 ; CHECK-MVE-NEXT:    movle r3, #1
2988 ; CHECK-MVE-NEXT:    cmp r3, #0
2989 ; CHECK-MVE-NEXT:    cset r3, ne
2990 ; CHECK-MVE-NEXT:    movs r0, #0
2991 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
2992 ; CHECK-MVE-NEXT:    it le
2993 ; CHECK-MVE-NEXT:    movle r0, #1
2994 ; CHECK-MVE-NEXT:    cmp r0, #0
2995 ; CHECK-MVE-NEXT:    cset r0, ne
2996 ; CHECK-MVE-NEXT:    cmp r3, #0
2997 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
2998 ; CHECK-MVE-NEXT:    cmp r0, #0
2999 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
3000 ; CHECK-MVE-NEXT:    cmp r1, #0
3001 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
3002 ; CHECK-MVE-NEXT:    cmp r2, #0
3003 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
3004 ; CHECK-MVE-NEXT:    bx lr
3006 ; CHECK-MVEFP-LABEL: vcmp_r_ule_v4f32:
3007 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3008 ; CHECK-MVEFP-NEXT:    vmov r0, s4
3009 ; CHECK-MVEFP-NEXT:    vcmp.f32 ge, q0, r0
3010 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3011 ; CHECK-MVEFP-NEXT:    bx lr
3012 entry:
3013   %i = insertelement <4 x float> undef, float %src2, i32 0
3014   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
3015   %c = fcmp ule <4 x float> %sp, %src
3016   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
3017   ret <4 x float> %s
3020 define arm_aapcs_vfpcc <4 x float> @vcmp_r_ord_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
3021 ; CHECK-MVE-LABEL: vcmp_r_ord_v4f32:
3022 ; CHECK-MVE:       @ %bb.0: @ %entry
3023 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
3024 ; CHECK-MVE-NEXT:    movs r1, #0
3025 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3026 ; CHECK-MVE-NEXT:    it vc
3027 ; CHECK-MVE-NEXT:    movvc r1, #1
3028 ; CHECK-MVE-NEXT:    cmp r1, #0
3029 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
3030 ; CHECK-MVE-NEXT:    cset r1, ne
3031 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3032 ; CHECK-MVE-NEXT:    mov.w r2, #0
3033 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
3034 ; CHECK-MVE-NEXT:    it vc
3035 ; CHECK-MVE-NEXT:    movvc r2, #1
3036 ; CHECK-MVE-NEXT:    cmp r2, #0
3037 ; CHECK-MVE-NEXT:    cset r2, ne
3038 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3039 ; CHECK-MVE-NEXT:    mov.w r3, #0
3040 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
3041 ; CHECK-MVE-NEXT:    it vc
3042 ; CHECK-MVE-NEXT:    movvc r3, #1
3043 ; CHECK-MVE-NEXT:    cmp r3, #0
3044 ; CHECK-MVE-NEXT:    cset r3, ne
3045 ; CHECK-MVE-NEXT:    movs r0, #0
3046 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3047 ; CHECK-MVE-NEXT:    it vc
3048 ; CHECK-MVE-NEXT:    movvc r0, #1
3049 ; CHECK-MVE-NEXT:    cmp r0, #0
3050 ; CHECK-MVE-NEXT:    cset r0, ne
3051 ; CHECK-MVE-NEXT:    cmp r3, #0
3052 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
3053 ; CHECK-MVE-NEXT:    cmp r0, #0
3054 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
3055 ; CHECK-MVE-NEXT:    cmp r1, #0
3056 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
3057 ; CHECK-MVE-NEXT:    cmp r2, #0
3058 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
3059 ; CHECK-MVE-NEXT:    bx lr
3061 ; CHECK-MVEFP-LABEL: vcmp_r_ord_v4f32:
3062 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3063 ; CHECK-MVEFP-NEXT:    vmov r0, s4
3064 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q0, r0
3065 ; CHECK-MVEFP-NEXT:    vcmpt.f32 gt, q0, r0
3066 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
3067 ; CHECK-MVEFP-NEXT:    bx lr
3068 entry:
3069   %i = insertelement <4 x float> undef, float %src2, i32 0
3070   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
3071   %c = fcmp ord <4 x float> %sp, %src
3072   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
3073   ret <4 x float> %s
3076 define arm_aapcs_vfpcc <4 x float> @vcmp_r_uno_v4f32(<4 x float> %src, float %src2, <4 x float> %a, <4 x float> %b) {
3077 ; CHECK-MVE-LABEL: vcmp_r_uno_v4f32:
3078 ; CHECK-MVE:       @ %bb.0: @ %entry
3079 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s1
3080 ; CHECK-MVE-NEXT:    movs r1, #0
3081 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3082 ; CHECK-MVE-NEXT:    it vs
3083 ; CHECK-MVE-NEXT:    movvs r1, #1
3084 ; CHECK-MVE-NEXT:    cmp r1, #0
3085 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s0
3086 ; CHECK-MVE-NEXT:    cset r1, ne
3087 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3088 ; CHECK-MVE-NEXT:    mov.w r2, #0
3089 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s3
3090 ; CHECK-MVE-NEXT:    it vs
3091 ; CHECK-MVE-NEXT:    movvs r2, #1
3092 ; CHECK-MVE-NEXT:    cmp r2, #0
3093 ; CHECK-MVE-NEXT:    cset r2, ne
3094 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3095 ; CHECK-MVE-NEXT:    mov.w r3, #0
3096 ; CHECK-MVE-NEXT:    vcmp.f32 s4, s2
3097 ; CHECK-MVE-NEXT:    it vs
3098 ; CHECK-MVE-NEXT:    movvs r3, #1
3099 ; CHECK-MVE-NEXT:    cmp r3, #0
3100 ; CHECK-MVE-NEXT:    cset r3, ne
3101 ; CHECK-MVE-NEXT:    movs r0, #0
3102 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3103 ; CHECK-MVE-NEXT:    it vs
3104 ; CHECK-MVE-NEXT:    movvs r0, #1
3105 ; CHECK-MVE-NEXT:    cmp r0, #0
3106 ; CHECK-MVE-NEXT:    cset r0, ne
3107 ; CHECK-MVE-NEXT:    cmp r3, #0
3108 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
3109 ; CHECK-MVE-NEXT:    cmp r0, #0
3110 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
3111 ; CHECK-MVE-NEXT:    cmp r1, #0
3112 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
3113 ; CHECK-MVE-NEXT:    cmp r2, #0
3114 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
3115 ; CHECK-MVE-NEXT:    bx lr
3117 ; CHECK-MVEFP-LABEL: vcmp_r_uno_v4f32:
3118 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3119 ; CHECK-MVEFP-NEXT:    vmov r0, s4
3120 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q0, r0
3121 ; CHECK-MVEFP-NEXT:    vcmpt.f32 gt, q0, r0
3122 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3123 ; CHECK-MVEFP-NEXT:    bx lr
3124 entry:
3125   %i = insertelement <4 x float> undef, float %src2, i32 0
3126   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
3127   %c = fcmp uno <4 x float> %sp, %src
3128   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
3129   ret <4 x float> %s
3134 define arm_aapcs_vfpcc <8 x half> @vcmp_r_oeq_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3135 ; CHECK-MVE-LABEL: vcmp_r_oeq_v8f16:
3136 ; CHECK-MVE:       @ %bb.0: @ %entry
3137 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3138 ; CHECK-MVE-NEXT:    movs r1, #0
3139 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3140 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3141 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3142 ; CHECK-MVE-NEXT:    it eq
3143 ; CHECK-MVE-NEXT:    moveq r1, #1
3144 ; CHECK-MVE-NEXT:    cmp r1, #0
3145 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3146 ; CHECK-MVE-NEXT:    cset r1, ne
3147 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3148 ; CHECK-MVE-NEXT:    cmp r1, #0
3149 ; CHECK-MVE-NEXT:    mov.w r1, #0
3150 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3151 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3152 ; CHECK-MVE-NEXT:    it eq
3153 ; CHECK-MVE-NEXT:    moveq r1, #1
3154 ; CHECK-MVE-NEXT:    cmp r1, #0
3155 ; CHECK-MVE-NEXT:    cset r1, ne
3156 ; CHECK-MVE-NEXT:    movs r0, #0
3157 ; CHECK-MVE-NEXT:    cmp r1, #0
3158 ; CHECK-MVE-NEXT:    mov.w r1, #0
3159 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3160 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3161 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3162 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3163 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3164 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3165 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3166 ; CHECK-MVE-NEXT:    it eq
3167 ; CHECK-MVE-NEXT:    moveq r1, #1
3168 ; CHECK-MVE-NEXT:    cmp r1, #0
3169 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3170 ; CHECK-MVE-NEXT:    cset r1, ne
3171 ; CHECK-MVE-NEXT:    cmp r1, #0
3172 ; CHECK-MVE-NEXT:    mov.w r1, #0
3173 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3174 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3175 ; CHECK-MVE-NEXT:    it eq
3176 ; CHECK-MVE-NEXT:    moveq r1, #1
3177 ; CHECK-MVE-NEXT:    cmp r1, #0
3178 ; CHECK-MVE-NEXT:    cset r1, ne
3179 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3180 ; CHECK-MVE-NEXT:    cmp r1, #0
3181 ; CHECK-MVE-NEXT:    mov.w r1, #0
3182 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3183 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3184 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3185 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3186 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3187 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3188 ; CHECK-MVE-NEXT:    it eq
3189 ; CHECK-MVE-NEXT:    moveq r1, #1
3190 ; CHECK-MVE-NEXT:    cmp r1, #0
3191 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3192 ; CHECK-MVE-NEXT:    cset r1, ne
3193 ; CHECK-MVE-NEXT:    cmp r1, #0
3194 ; CHECK-MVE-NEXT:    mov.w r1, #0
3195 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3196 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3197 ; CHECK-MVE-NEXT:    it eq
3198 ; CHECK-MVE-NEXT:    moveq r1, #1
3199 ; CHECK-MVE-NEXT:    cmp r1, #0
3200 ; CHECK-MVE-NEXT:    cset r1, ne
3201 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3202 ; CHECK-MVE-NEXT:    cmp r1, #0
3203 ; CHECK-MVE-NEXT:    mov.w r1, #0
3204 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3205 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3206 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3207 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3208 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3209 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3210 ; CHECK-MVE-NEXT:    it eq
3211 ; CHECK-MVE-NEXT:    moveq r1, #1
3212 ; CHECK-MVE-NEXT:    cmp r1, #0
3213 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3214 ; CHECK-MVE-NEXT:    cset r1, ne
3215 ; CHECK-MVE-NEXT:    cmp r1, #0
3216 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3217 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3218 ; CHECK-MVE-NEXT:    it eq
3219 ; CHECK-MVE-NEXT:    moveq r0, #1
3220 ; CHECK-MVE-NEXT:    cmp r0, #0
3221 ; CHECK-MVE-NEXT:    cset r0, ne
3222 ; CHECK-MVE-NEXT:    cmp r0, #0
3223 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3224 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3225 ; CHECK-MVE-NEXT:    bx lr
3227 ; CHECK-MVEFP-LABEL: vcmp_r_oeq_v8f16:
3228 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3229 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3230 ; CHECK-MVEFP-NEXT:    vcmp.f16 eq, q0, r0
3231 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3232 ; CHECK-MVEFP-NEXT:    bx lr
3233 entry:
3234   %i = insertelement <8 x half> undef, half %src2, i32 0
3235   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3236   %c = fcmp oeq <8 x half> %sp, %src
3237   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3238   ret <8 x half> %s
3241 define arm_aapcs_vfpcc <8 x half> @vcmp_r_one_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3242 ; CHECK-MVE-LABEL: vcmp_r_one_v8f16:
3243 ; CHECK-MVE:       @ %bb.0: @ %entry
3244 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3245 ; CHECK-MVE-NEXT:    movs r1, #0
3246 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3247 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3248 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3249 ; CHECK-MVE-NEXT:    it mi
3250 ; CHECK-MVE-NEXT:    movmi r1, #1
3251 ; CHECK-MVE-NEXT:    it gt
3252 ; CHECK-MVE-NEXT:    movgt r1, #1
3253 ; CHECK-MVE-NEXT:    cmp r1, #0
3254 ; CHECK-MVE-NEXT:    cset r1, ne
3255 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3256 ; CHECK-MVE-NEXT:    cmp r1, #0
3257 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3258 ; CHECK-MVE-NEXT:    mov.w r1, #0
3259 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3260 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3261 ; CHECK-MVE-NEXT:    it mi
3262 ; CHECK-MVE-NEXT:    movmi r1, #1
3263 ; CHECK-MVE-NEXT:    it gt
3264 ; CHECK-MVE-NEXT:    movgt r1, #1
3265 ; CHECK-MVE-NEXT:    cmp r1, #0
3266 ; CHECK-MVE-NEXT:    cset r1, ne
3267 ; CHECK-MVE-NEXT:    movs r0, #0
3268 ; CHECK-MVE-NEXT:    cmp r1, #0
3269 ; CHECK-MVE-NEXT:    mov.w r1, #0
3270 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3271 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3272 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3273 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3274 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3275 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3276 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3277 ; CHECK-MVE-NEXT:    it mi
3278 ; CHECK-MVE-NEXT:    movmi r1, #1
3279 ; CHECK-MVE-NEXT:    it gt
3280 ; CHECK-MVE-NEXT:    movgt r1, #1
3281 ; CHECK-MVE-NEXT:    cmp r1, #0
3282 ; CHECK-MVE-NEXT:    cset r1, ne
3283 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3284 ; CHECK-MVE-NEXT:    cmp r1, #0
3285 ; CHECK-MVE-NEXT:    mov.w r1, #0
3286 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3287 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3288 ; CHECK-MVE-NEXT:    it mi
3289 ; CHECK-MVE-NEXT:    movmi r1, #1
3290 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3291 ; CHECK-MVE-NEXT:    it gt
3292 ; CHECK-MVE-NEXT:    movgt r1, #1
3293 ; CHECK-MVE-NEXT:    cmp r1, #0
3294 ; CHECK-MVE-NEXT:    cset r1, ne
3295 ; CHECK-MVE-NEXT:    cmp r1, #0
3296 ; CHECK-MVE-NEXT:    mov.w r1, #0
3297 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3298 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3299 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3300 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3301 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3302 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3303 ; CHECK-MVE-NEXT:    it mi
3304 ; CHECK-MVE-NEXT:    movmi r1, #1
3305 ; CHECK-MVE-NEXT:    it gt
3306 ; CHECK-MVE-NEXT:    movgt r1, #1
3307 ; CHECK-MVE-NEXT:    cmp r1, #0
3308 ; CHECK-MVE-NEXT:    cset r1, ne
3309 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3310 ; CHECK-MVE-NEXT:    cmp r1, #0
3311 ; CHECK-MVE-NEXT:    mov.w r1, #0
3312 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3313 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3314 ; CHECK-MVE-NEXT:    it mi
3315 ; CHECK-MVE-NEXT:    movmi r1, #1
3316 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3317 ; CHECK-MVE-NEXT:    it gt
3318 ; CHECK-MVE-NEXT:    movgt r1, #1
3319 ; CHECK-MVE-NEXT:    cmp r1, #0
3320 ; CHECK-MVE-NEXT:    cset r1, ne
3321 ; CHECK-MVE-NEXT:    cmp r1, #0
3322 ; CHECK-MVE-NEXT:    mov.w r1, #0
3323 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3324 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3325 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3326 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3327 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3328 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3329 ; CHECK-MVE-NEXT:    it mi
3330 ; CHECK-MVE-NEXT:    movmi r1, #1
3331 ; CHECK-MVE-NEXT:    it gt
3332 ; CHECK-MVE-NEXT:    movgt r1, #1
3333 ; CHECK-MVE-NEXT:    cmp r1, #0
3334 ; CHECK-MVE-NEXT:    cset r1, ne
3335 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3336 ; CHECK-MVE-NEXT:    cmp r1, #0
3337 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3338 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3339 ; CHECK-MVE-NEXT:    it mi
3340 ; CHECK-MVE-NEXT:    movmi r0, #1
3341 ; CHECK-MVE-NEXT:    it gt
3342 ; CHECK-MVE-NEXT:    movgt r0, #1
3343 ; CHECK-MVE-NEXT:    cmp r0, #0
3344 ; CHECK-MVE-NEXT:    cset r0, ne
3345 ; CHECK-MVE-NEXT:    cmp r0, #0
3346 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3347 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3348 ; CHECK-MVE-NEXT:    bx lr
3350 ; CHECK-MVEFP-LABEL: vcmp_r_one_v8f16:
3351 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3352 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3353 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q0, r0
3354 ; CHECK-MVEFP-NEXT:    vcmpt.f16 ge, q0, r0
3355 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
3356 ; CHECK-MVEFP-NEXT:    bx lr
3357 entry:
3358   %i = insertelement <8 x half> undef, half %src2, i32 0
3359   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3360   %c = fcmp one <8 x half> %sp, %src
3361   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3362   ret <8 x half> %s
3365 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ogt_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3366 ; CHECK-MVE-LABEL: vcmp_r_ogt_v8f16:
3367 ; CHECK-MVE:       @ %bb.0: @ %entry
3368 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3369 ; CHECK-MVE-NEXT:    movs r1, #0
3370 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3371 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3372 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3373 ; CHECK-MVE-NEXT:    it gt
3374 ; CHECK-MVE-NEXT:    movgt r1, #1
3375 ; CHECK-MVE-NEXT:    cmp r1, #0
3376 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3377 ; CHECK-MVE-NEXT:    cset r1, ne
3378 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3379 ; CHECK-MVE-NEXT:    cmp r1, #0
3380 ; CHECK-MVE-NEXT:    mov.w r1, #0
3381 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3382 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3383 ; CHECK-MVE-NEXT:    it gt
3384 ; CHECK-MVE-NEXT:    movgt r1, #1
3385 ; CHECK-MVE-NEXT:    cmp r1, #0
3386 ; CHECK-MVE-NEXT:    cset r1, ne
3387 ; CHECK-MVE-NEXT:    movs r0, #0
3388 ; CHECK-MVE-NEXT:    cmp r1, #0
3389 ; CHECK-MVE-NEXT:    mov.w r1, #0
3390 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3391 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3392 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3393 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3394 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3395 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3396 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3397 ; CHECK-MVE-NEXT:    it gt
3398 ; CHECK-MVE-NEXT:    movgt r1, #1
3399 ; CHECK-MVE-NEXT:    cmp r1, #0
3400 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3401 ; CHECK-MVE-NEXT:    cset r1, ne
3402 ; CHECK-MVE-NEXT:    cmp r1, #0
3403 ; CHECK-MVE-NEXT:    mov.w r1, #0
3404 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3405 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3406 ; CHECK-MVE-NEXT:    it gt
3407 ; CHECK-MVE-NEXT:    movgt r1, #1
3408 ; CHECK-MVE-NEXT:    cmp r1, #0
3409 ; CHECK-MVE-NEXT:    cset r1, ne
3410 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3411 ; CHECK-MVE-NEXT:    cmp r1, #0
3412 ; CHECK-MVE-NEXT:    mov.w r1, #0
3413 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3414 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3415 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3416 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3417 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3418 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3419 ; CHECK-MVE-NEXT:    it gt
3420 ; CHECK-MVE-NEXT:    movgt r1, #1
3421 ; CHECK-MVE-NEXT:    cmp r1, #0
3422 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3423 ; CHECK-MVE-NEXT:    cset r1, ne
3424 ; CHECK-MVE-NEXT:    cmp r1, #0
3425 ; CHECK-MVE-NEXT:    mov.w r1, #0
3426 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3427 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3428 ; CHECK-MVE-NEXT:    it gt
3429 ; CHECK-MVE-NEXT:    movgt r1, #1
3430 ; CHECK-MVE-NEXT:    cmp r1, #0
3431 ; CHECK-MVE-NEXT:    cset r1, ne
3432 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3433 ; CHECK-MVE-NEXT:    cmp r1, #0
3434 ; CHECK-MVE-NEXT:    mov.w r1, #0
3435 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3436 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3437 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3438 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3439 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3440 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3441 ; CHECK-MVE-NEXT:    it gt
3442 ; CHECK-MVE-NEXT:    movgt r1, #1
3443 ; CHECK-MVE-NEXT:    cmp r1, #0
3444 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3445 ; CHECK-MVE-NEXT:    cset r1, ne
3446 ; CHECK-MVE-NEXT:    cmp r1, #0
3447 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3448 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3449 ; CHECK-MVE-NEXT:    it gt
3450 ; CHECK-MVE-NEXT:    movgt r0, #1
3451 ; CHECK-MVE-NEXT:    cmp r0, #0
3452 ; CHECK-MVE-NEXT:    cset r0, ne
3453 ; CHECK-MVE-NEXT:    cmp r0, #0
3454 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3455 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3456 ; CHECK-MVE-NEXT:    bx lr
3458 ; CHECK-MVEFP-LABEL: vcmp_r_ogt_v8f16:
3459 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3460 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3461 ; CHECK-MVEFP-NEXT:    vcmp.f16 lt, q0, r0
3462 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3463 ; CHECK-MVEFP-NEXT:    bx lr
3464 entry:
3465   %i = insertelement <8 x half> undef, half %src2, i32 0
3466   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3467   %c = fcmp ogt <8 x half> %sp, %src
3468   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3469   ret <8 x half> %s
3472 define arm_aapcs_vfpcc <8 x half> @vcmp_r_oge_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3473 ; CHECK-MVE-LABEL: vcmp_r_oge_v8f16:
3474 ; CHECK-MVE:       @ %bb.0: @ %entry
3475 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3476 ; CHECK-MVE-NEXT:    movs r1, #0
3477 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3478 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3479 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3480 ; CHECK-MVE-NEXT:    it ge
3481 ; CHECK-MVE-NEXT:    movge r1, #1
3482 ; CHECK-MVE-NEXT:    cmp r1, #0
3483 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3484 ; CHECK-MVE-NEXT:    cset r1, ne
3485 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3486 ; CHECK-MVE-NEXT:    cmp r1, #0
3487 ; CHECK-MVE-NEXT:    mov.w r1, #0
3488 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3489 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3490 ; CHECK-MVE-NEXT:    it ge
3491 ; CHECK-MVE-NEXT:    movge r1, #1
3492 ; CHECK-MVE-NEXT:    cmp r1, #0
3493 ; CHECK-MVE-NEXT:    cset r1, ne
3494 ; CHECK-MVE-NEXT:    movs r0, #0
3495 ; CHECK-MVE-NEXT:    cmp r1, #0
3496 ; CHECK-MVE-NEXT:    mov.w r1, #0
3497 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3498 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3499 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3500 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3501 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3502 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3503 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3504 ; CHECK-MVE-NEXT:    it ge
3505 ; CHECK-MVE-NEXT:    movge r1, #1
3506 ; CHECK-MVE-NEXT:    cmp r1, #0
3507 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3508 ; CHECK-MVE-NEXT:    cset r1, ne
3509 ; CHECK-MVE-NEXT:    cmp r1, #0
3510 ; CHECK-MVE-NEXT:    mov.w r1, #0
3511 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3512 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3513 ; CHECK-MVE-NEXT:    it ge
3514 ; CHECK-MVE-NEXT:    movge r1, #1
3515 ; CHECK-MVE-NEXT:    cmp r1, #0
3516 ; CHECK-MVE-NEXT:    cset r1, ne
3517 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3518 ; CHECK-MVE-NEXT:    cmp r1, #0
3519 ; CHECK-MVE-NEXT:    mov.w r1, #0
3520 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3521 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3522 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3523 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3524 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3525 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3526 ; CHECK-MVE-NEXT:    it ge
3527 ; CHECK-MVE-NEXT:    movge r1, #1
3528 ; CHECK-MVE-NEXT:    cmp r1, #0
3529 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3530 ; CHECK-MVE-NEXT:    cset r1, ne
3531 ; CHECK-MVE-NEXT:    cmp r1, #0
3532 ; CHECK-MVE-NEXT:    mov.w r1, #0
3533 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3534 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3535 ; CHECK-MVE-NEXT:    it ge
3536 ; CHECK-MVE-NEXT:    movge r1, #1
3537 ; CHECK-MVE-NEXT:    cmp r1, #0
3538 ; CHECK-MVE-NEXT:    cset r1, ne
3539 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3540 ; CHECK-MVE-NEXT:    cmp r1, #0
3541 ; CHECK-MVE-NEXT:    mov.w r1, #0
3542 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3543 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3544 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3545 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3546 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3547 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3548 ; CHECK-MVE-NEXT:    it ge
3549 ; CHECK-MVE-NEXT:    movge r1, #1
3550 ; CHECK-MVE-NEXT:    cmp r1, #0
3551 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3552 ; CHECK-MVE-NEXT:    cset r1, ne
3553 ; CHECK-MVE-NEXT:    cmp r1, #0
3554 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3555 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3556 ; CHECK-MVE-NEXT:    it ge
3557 ; CHECK-MVE-NEXT:    movge r0, #1
3558 ; CHECK-MVE-NEXT:    cmp r0, #0
3559 ; CHECK-MVE-NEXT:    cset r0, ne
3560 ; CHECK-MVE-NEXT:    cmp r0, #0
3561 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3562 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3563 ; CHECK-MVE-NEXT:    bx lr
3565 ; CHECK-MVEFP-LABEL: vcmp_r_oge_v8f16:
3566 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3567 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3568 ; CHECK-MVEFP-NEXT:    vcmp.f16 le, q0, r0
3569 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3570 ; CHECK-MVEFP-NEXT:    bx lr
3571 entry:
3572   %i = insertelement <8 x half> undef, half %src2, i32 0
3573   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3574   %c = fcmp oge <8 x half> %sp, %src
3575   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3576   ret <8 x half> %s
3579 define arm_aapcs_vfpcc <8 x half> @vcmp_r_olt_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3580 ; CHECK-MVE-LABEL: vcmp_r_olt_v8f16:
3581 ; CHECK-MVE:       @ %bb.0: @ %entry
3582 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3583 ; CHECK-MVE-NEXT:    movs r1, #0
3584 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3585 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3586 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3587 ; CHECK-MVE-NEXT:    it mi
3588 ; CHECK-MVE-NEXT:    movmi r1, #1
3589 ; CHECK-MVE-NEXT:    cmp r1, #0
3590 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3591 ; CHECK-MVE-NEXT:    cset r1, ne
3592 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3593 ; CHECK-MVE-NEXT:    cmp r1, #0
3594 ; CHECK-MVE-NEXT:    mov.w r1, #0
3595 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3596 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3597 ; CHECK-MVE-NEXT:    it mi
3598 ; CHECK-MVE-NEXT:    movmi r1, #1
3599 ; CHECK-MVE-NEXT:    cmp r1, #0
3600 ; CHECK-MVE-NEXT:    cset r1, ne
3601 ; CHECK-MVE-NEXT:    movs r0, #0
3602 ; CHECK-MVE-NEXT:    cmp r1, #0
3603 ; CHECK-MVE-NEXT:    mov.w r1, #0
3604 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3605 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3606 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3607 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3608 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3609 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3610 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3611 ; CHECK-MVE-NEXT:    it mi
3612 ; CHECK-MVE-NEXT:    movmi r1, #1
3613 ; CHECK-MVE-NEXT:    cmp r1, #0
3614 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3615 ; CHECK-MVE-NEXT:    cset r1, ne
3616 ; CHECK-MVE-NEXT:    cmp r1, #0
3617 ; CHECK-MVE-NEXT:    mov.w r1, #0
3618 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3619 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3620 ; CHECK-MVE-NEXT:    it mi
3621 ; CHECK-MVE-NEXT:    movmi r1, #1
3622 ; CHECK-MVE-NEXT:    cmp r1, #0
3623 ; CHECK-MVE-NEXT:    cset r1, ne
3624 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3625 ; CHECK-MVE-NEXT:    cmp r1, #0
3626 ; CHECK-MVE-NEXT:    mov.w r1, #0
3627 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3628 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3629 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3630 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3631 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3632 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3633 ; CHECK-MVE-NEXT:    it mi
3634 ; CHECK-MVE-NEXT:    movmi r1, #1
3635 ; CHECK-MVE-NEXT:    cmp r1, #0
3636 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3637 ; CHECK-MVE-NEXT:    cset r1, ne
3638 ; CHECK-MVE-NEXT:    cmp r1, #0
3639 ; CHECK-MVE-NEXT:    mov.w r1, #0
3640 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3641 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3642 ; CHECK-MVE-NEXT:    it mi
3643 ; CHECK-MVE-NEXT:    movmi r1, #1
3644 ; CHECK-MVE-NEXT:    cmp r1, #0
3645 ; CHECK-MVE-NEXT:    cset r1, ne
3646 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3647 ; CHECK-MVE-NEXT:    cmp r1, #0
3648 ; CHECK-MVE-NEXT:    mov.w r1, #0
3649 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3650 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3651 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3652 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3653 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3654 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3655 ; CHECK-MVE-NEXT:    it mi
3656 ; CHECK-MVE-NEXT:    movmi r1, #1
3657 ; CHECK-MVE-NEXT:    cmp r1, #0
3658 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3659 ; CHECK-MVE-NEXT:    cset r1, ne
3660 ; CHECK-MVE-NEXT:    cmp r1, #0
3661 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3662 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3663 ; CHECK-MVE-NEXT:    it mi
3664 ; CHECK-MVE-NEXT:    movmi r0, #1
3665 ; CHECK-MVE-NEXT:    cmp r0, #0
3666 ; CHECK-MVE-NEXT:    cset r0, ne
3667 ; CHECK-MVE-NEXT:    cmp r0, #0
3668 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3669 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3670 ; CHECK-MVE-NEXT:    bx lr
3672 ; CHECK-MVEFP-LABEL: vcmp_r_olt_v8f16:
3673 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3674 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3675 ; CHECK-MVEFP-NEXT:    vcmp.f16 gt, q0, r0
3676 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3677 ; CHECK-MVEFP-NEXT:    bx lr
3678 entry:
3679   %i = insertelement <8 x half> undef, half %src2, i32 0
3680   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3681   %c = fcmp olt <8 x half> %sp, %src
3682   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3683   ret <8 x half> %s
3686 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ole_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3687 ; CHECK-MVE-LABEL: vcmp_r_ole_v8f16:
3688 ; CHECK-MVE:       @ %bb.0: @ %entry
3689 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3690 ; CHECK-MVE-NEXT:    movs r1, #0
3691 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3692 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3693 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3694 ; CHECK-MVE-NEXT:    it ls
3695 ; CHECK-MVE-NEXT:    movls r1, #1
3696 ; CHECK-MVE-NEXT:    cmp r1, #0
3697 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3698 ; CHECK-MVE-NEXT:    cset r1, ne
3699 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3700 ; CHECK-MVE-NEXT:    cmp r1, #0
3701 ; CHECK-MVE-NEXT:    mov.w r1, #0
3702 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3703 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3704 ; CHECK-MVE-NEXT:    it ls
3705 ; CHECK-MVE-NEXT:    movls r1, #1
3706 ; CHECK-MVE-NEXT:    cmp r1, #0
3707 ; CHECK-MVE-NEXT:    cset r1, ne
3708 ; CHECK-MVE-NEXT:    movs r0, #0
3709 ; CHECK-MVE-NEXT:    cmp r1, #0
3710 ; CHECK-MVE-NEXT:    mov.w r1, #0
3711 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3712 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3713 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3714 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3715 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3716 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3717 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3718 ; CHECK-MVE-NEXT:    it ls
3719 ; CHECK-MVE-NEXT:    movls r1, #1
3720 ; CHECK-MVE-NEXT:    cmp r1, #0
3721 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3722 ; CHECK-MVE-NEXT:    cset r1, ne
3723 ; CHECK-MVE-NEXT:    cmp r1, #0
3724 ; CHECK-MVE-NEXT:    mov.w r1, #0
3725 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3726 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3727 ; CHECK-MVE-NEXT:    it ls
3728 ; CHECK-MVE-NEXT:    movls r1, #1
3729 ; CHECK-MVE-NEXT:    cmp r1, #0
3730 ; CHECK-MVE-NEXT:    cset r1, ne
3731 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3732 ; CHECK-MVE-NEXT:    cmp r1, #0
3733 ; CHECK-MVE-NEXT:    mov.w r1, #0
3734 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3735 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3736 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3737 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3738 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3739 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3740 ; CHECK-MVE-NEXT:    it ls
3741 ; CHECK-MVE-NEXT:    movls r1, #1
3742 ; CHECK-MVE-NEXT:    cmp r1, #0
3743 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3744 ; CHECK-MVE-NEXT:    cset r1, ne
3745 ; CHECK-MVE-NEXT:    cmp r1, #0
3746 ; CHECK-MVE-NEXT:    mov.w r1, #0
3747 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3748 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3749 ; CHECK-MVE-NEXT:    it ls
3750 ; CHECK-MVE-NEXT:    movls r1, #1
3751 ; CHECK-MVE-NEXT:    cmp r1, #0
3752 ; CHECK-MVE-NEXT:    cset r1, ne
3753 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3754 ; CHECK-MVE-NEXT:    cmp r1, #0
3755 ; CHECK-MVE-NEXT:    mov.w r1, #0
3756 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3757 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3758 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3759 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3760 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3761 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3762 ; CHECK-MVE-NEXT:    it ls
3763 ; CHECK-MVE-NEXT:    movls r1, #1
3764 ; CHECK-MVE-NEXT:    cmp r1, #0
3765 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3766 ; CHECK-MVE-NEXT:    cset r1, ne
3767 ; CHECK-MVE-NEXT:    cmp r1, #0
3768 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3769 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3770 ; CHECK-MVE-NEXT:    it ls
3771 ; CHECK-MVE-NEXT:    movls r0, #1
3772 ; CHECK-MVE-NEXT:    cmp r0, #0
3773 ; CHECK-MVE-NEXT:    cset r0, ne
3774 ; CHECK-MVE-NEXT:    cmp r0, #0
3775 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3776 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3777 ; CHECK-MVE-NEXT:    bx lr
3779 ; CHECK-MVEFP-LABEL: vcmp_r_ole_v8f16:
3780 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3781 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3782 ; CHECK-MVEFP-NEXT:    vcmp.f16 ge, q0, r0
3783 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3784 ; CHECK-MVEFP-NEXT:    bx lr
3785 entry:
3786   %i = insertelement <8 x half> undef, half %src2, i32 0
3787   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3788   %c = fcmp ole <8 x half> %sp, %src
3789   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3790   ret <8 x half> %s
3793 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ueq_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3794 ; CHECK-MVE-LABEL: vcmp_r_ueq_v8f16:
3795 ; CHECK-MVE:       @ %bb.0: @ %entry
3796 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3797 ; CHECK-MVE-NEXT:    movs r1, #0
3798 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3799 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3800 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3801 ; CHECK-MVE-NEXT:    it eq
3802 ; CHECK-MVE-NEXT:    moveq r1, #1
3803 ; CHECK-MVE-NEXT:    it vs
3804 ; CHECK-MVE-NEXT:    movvs r1, #1
3805 ; CHECK-MVE-NEXT:    cmp r1, #0
3806 ; CHECK-MVE-NEXT:    cset r1, ne
3807 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3808 ; CHECK-MVE-NEXT:    cmp r1, #0
3809 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3810 ; CHECK-MVE-NEXT:    mov.w r1, #0
3811 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3812 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3813 ; CHECK-MVE-NEXT:    it eq
3814 ; CHECK-MVE-NEXT:    moveq r1, #1
3815 ; CHECK-MVE-NEXT:    it vs
3816 ; CHECK-MVE-NEXT:    movvs r1, #1
3817 ; CHECK-MVE-NEXT:    cmp r1, #0
3818 ; CHECK-MVE-NEXT:    cset r1, ne
3819 ; CHECK-MVE-NEXT:    movs r0, #0
3820 ; CHECK-MVE-NEXT:    cmp r1, #0
3821 ; CHECK-MVE-NEXT:    mov.w r1, #0
3822 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3823 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3824 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3825 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3826 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3827 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3828 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3829 ; CHECK-MVE-NEXT:    it eq
3830 ; CHECK-MVE-NEXT:    moveq r1, #1
3831 ; CHECK-MVE-NEXT:    it vs
3832 ; CHECK-MVE-NEXT:    movvs r1, #1
3833 ; CHECK-MVE-NEXT:    cmp r1, #0
3834 ; CHECK-MVE-NEXT:    cset r1, ne
3835 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3836 ; CHECK-MVE-NEXT:    cmp r1, #0
3837 ; CHECK-MVE-NEXT:    mov.w r1, #0
3838 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3839 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3840 ; CHECK-MVE-NEXT:    it eq
3841 ; CHECK-MVE-NEXT:    moveq r1, #1
3842 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3843 ; CHECK-MVE-NEXT:    it vs
3844 ; CHECK-MVE-NEXT:    movvs r1, #1
3845 ; CHECK-MVE-NEXT:    cmp r1, #0
3846 ; CHECK-MVE-NEXT:    cset r1, ne
3847 ; CHECK-MVE-NEXT:    cmp r1, #0
3848 ; CHECK-MVE-NEXT:    mov.w r1, #0
3849 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3850 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3851 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3852 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3853 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3854 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3855 ; CHECK-MVE-NEXT:    it eq
3856 ; CHECK-MVE-NEXT:    moveq r1, #1
3857 ; CHECK-MVE-NEXT:    it vs
3858 ; CHECK-MVE-NEXT:    movvs r1, #1
3859 ; CHECK-MVE-NEXT:    cmp r1, #0
3860 ; CHECK-MVE-NEXT:    cset r1, ne
3861 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3862 ; CHECK-MVE-NEXT:    cmp r1, #0
3863 ; CHECK-MVE-NEXT:    mov.w r1, #0
3864 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3865 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3866 ; CHECK-MVE-NEXT:    it eq
3867 ; CHECK-MVE-NEXT:    moveq r1, #1
3868 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3869 ; CHECK-MVE-NEXT:    it vs
3870 ; CHECK-MVE-NEXT:    movvs r1, #1
3871 ; CHECK-MVE-NEXT:    cmp r1, #0
3872 ; CHECK-MVE-NEXT:    cset r1, ne
3873 ; CHECK-MVE-NEXT:    cmp r1, #0
3874 ; CHECK-MVE-NEXT:    mov.w r1, #0
3875 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3876 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3877 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3878 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3879 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3880 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3881 ; CHECK-MVE-NEXT:    it eq
3882 ; CHECK-MVE-NEXT:    moveq r1, #1
3883 ; CHECK-MVE-NEXT:    it vs
3884 ; CHECK-MVE-NEXT:    movvs r1, #1
3885 ; CHECK-MVE-NEXT:    cmp r1, #0
3886 ; CHECK-MVE-NEXT:    cset r1, ne
3887 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3888 ; CHECK-MVE-NEXT:    cmp r1, #0
3889 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3890 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3891 ; CHECK-MVE-NEXT:    it eq
3892 ; CHECK-MVE-NEXT:    moveq r0, #1
3893 ; CHECK-MVE-NEXT:    it vs
3894 ; CHECK-MVE-NEXT:    movvs r0, #1
3895 ; CHECK-MVE-NEXT:    cmp r0, #0
3896 ; CHECK-MVE-NEXT:    cset r0, ne
3897 ; CHECK-MVE-NEXT:    cmp r0, #0
3898 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
3899 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
3900 ; CHECK-MVE-NEXT:    bx lr
3902 ; CHECK-MVEFP-LABEL: vcmp_r_ueq_v8f16:
3903 ; CHECK-MVEFP:       @ %bb.0: @ %entry
3904 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
3905 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q0, r0
3906 ; CHECK-MVEFP-NEXT:    vcmpt.f16 ge, q0, r0
3907 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
3908 ; CHECK-MVEFP-NEXT:    bx lr
3909 entry:
3910   %i = insertelement <8 x half> undef, half %src2, i32 0
3911   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
3912   %c = fcmp ueq <8 x half> %sp, %src
3913   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
3914   ret <8 x half> %s
3917 define arm_aapcs_vfpcc <8 x half> @vcmp_r_une_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
3918 ; CHECK-MVE-LABEL: vcmp_r_une_v8f16:
3919 ; CHECK-MVE:       @ %bb.0: @ %entry
3920 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
3921 ; CHECK-MVE-NEXT:    movs r1, #0
3922 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3923 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
3924 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3925 ; CHECK-MVE-NEXT:    it ne
3926 ; CHECK-MVE-NEXT:    movne r1, #1
3927 ; CHECK-MVE-NEXT:    cmp r1, #0
3928 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
3929 ; CHECK-MVE-NEXT:    cset r1, ne
3930 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
3931 ; CHECK-MVE-NEXT:    cmp r1, #0
3932 ; CHECK-MVE-NEXT:    mov.w r1, #0
3933 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
3934 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3935 ; CHECK-MVE-NEXT:    it ne
3936 ; CHECK-MVE-NEXT:    movne r1, #1
3937 ; CHECK-MVE-NEXT:    cmp r1, #0
3938 ; CHECK-MVE-NEXT:    cset r1, ne
3939 ; CHECK-MVE-NEXT:    movs r0, #0
3940 ; CHECK-MVE-NEXT:    cmp r1, #0
3941 ; CHECK-MVE-NEXT:    mov.w r1, #0
3942 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
3943 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
3944 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
3945 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
3946 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3947 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
3948 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3949 ; CHECK-MVE-NEXT:    it ne
3950 ; CHECK-MVE-NEXT:    movne r1, #1
3951 ; CHECK-MVE-NEXT:    cmp r1, #0
3952 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
3953 ; CHECK-MVE-NEXT:    cset r1, ne
3954 ; CHECK-MVE-NEXT:    cmp r1, #0
3955 ; CHECK-MVE-NEXT:    mov.w r1, #0
3956 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3957 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3958 ; CHECK-MVE-NEXT:    it ne
3959 ; CHECK-MVE-NEXT:    movne r1, #1
3960 ; CHECK-MVE-NEXT:    cmp r1, #0
3961 ; CHECK-MVE-NEXT:    cset r1, ne
3962 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
3963 ; CHECK-MVE-NEXT:    cmp r1, #0
3964 ; CHECK-MVE-NEXT:    mov.w r1, #0
3965 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
3966 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
3967 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
3968 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3969 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
3970 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3971 ; CHECK-MVE-NEXT:    it ne
3972 ; CHECK-MVE-NEXT:    movne r1, #1
3973 ; CHECK-MVE-NEXT:    cmp r1, #0
3974 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
3975 ; CHECK-MVE-NEXT:    cset r1, ne
3976 ; CHECK-MVE-NEXT:    cmp r1, #0
3977 ; CHECK-MVE-NEXT:    mov.w r1, #0
3978 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
3979 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3980 ; CHECK-MVE-NEXT:    it ne
3981 ; CHECK-MVE-NEXT:    movne r1, #1
3982 ; CHECK-MVE-NEXT:    cmp r1, #0
3983 ; CHECK-MVE-NEXT:    cset r1, ne
3984 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
3985 ; CHECK-MVE-NEXT:    cmp r1, #0
3986 ; CHECK-MVE-NEXT:    mov.w r1, #0
3987 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
3988 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
3989 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
3990 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
3991 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
3992 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
3993 ; CHECK-MVE-NEXT:    it ne
3994 ; CHECK-MVE-NEXT:    movne r1, #1
3995 ; CHECK-MVE-NEXT:    cmp r1, #0
3996 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
3997 ; CHECK-MVE-NEXT:    cset r1, ne
3998 ; CHECK-MVE-NEXT:    cmp r1, #0
3999 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4000 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4001 ; CHECK-MVE-NEXT:    it ne
4002 ; CHECK-MVE-NEXT:    movne r0, #1
4003 ; CHECK-MVE-NEXT:    cmp r0, #0
4004 ; CHECK-MVE-NEXT:    cset r0, ne
4005 ; CHECK-MVE-NEXT:    cmp r0, #0
4006 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4007 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4008 ; CHECK-MVE-NEXT:    bx lr
4010 ; CHECK-MVEFP-LABEL: vcmp_r_une_v8f16:
4011 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4012 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4013 ; CHECK-MVEFP-NEXT:    vcmp.f16 ne, q0, r0
4014 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4015 ; CHECK-MVEFP-NEXT:    bx lr
4016 entry:
4017   %i = insertelement <8 x half> undef, half %src2, i32 0
4018   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4019   %c = fcmp une <8 x half> %sp, %src
4020   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4021   ret <8 x half> %s
4024 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ugt_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4025 ; CHECK-MVE-LABEL: vcmp_r_ugt_v8f16:
4026 ; CHECK-MVE:       @ %bb.0: @ %entry
4027 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4028 ; CHECK-MVE-NEXT:    movs r1, #0
4029 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4030 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4031 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4032 ; CHECK-MVE-NEXT:    it hi
4033 ; CHECK-MVE-NEXT:    movhi r1, #1
4034 ; CHECK-MVE-NEXT:    cmp r1, #0
4035 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4036 ; CHECK-MVE-NEXT:    cset r1, ne
4037 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
4038 ; CHECK-MVE-NEXT:    cmp r1, #0
4039 ; CHECK-MVE-NEXT:    mov.w r1, #0
4040 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4041 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4042 ; CHECK-MVE-NEXT:    it hi
4043 ; CHECK-MVE-NEXT:    movhi r1, #1
4044 ; CHECK-MVE-NEXT:    cmp r1, #0
4045 ; CHECK-MVE-NEXT:    cset r1, ne
4046 ; CHECK-MVE-NEXT:    movs r0, #0
4047 ; CHECK-MVE-NEXT:    cmp r1, #0
4048 ; CHECK-MVE-NEXT:    mov.w r1, #0
4049 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4050 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4051 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4052 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4053 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4054 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4055 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4056 ; CHECK-MVE-NEXT:    it hi
4057 ; CHECK-MVE-NEXT:    movhi r1, #1
4058 ; CHECK-MVE-NEXT:    cmp r1, #0
4059 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
4060 ; CHECK-MVE-NEXT:    cset r1, ne
4061 ; CHECK-MVE-NEXT:    cmp r1, #0
4062 ; CHECK-MVE-NEXT:    mov.w r1, #0
4063 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4064 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4065 ; CHECK-MVE-NEXT:    it hi
4066 ; CHECK-MVE-NEXT:    movhi r1, #1
4067 ; CHECK-MVE-NEXT:    cmp r1, #0
4068 ; CHECK-MVE-NEXT:    cset r1, ne
4069 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4070 ; CHECK-MVE-NEXT:    cmp r1, #0
4071 ; CHECK-MVE-NEXT:    mov.w r1, #0
4072 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4073 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4074 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4075 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4076 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4077 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4078 ; CHECK-MVE-NEXT:    it hi
4079 ; CHECK-MVE-NEXT:    movhi r1, #1
4080 ; CHECK-MVE-NEXT:    cmp r1, #0
4081 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
4082 ; CHECK-MVE-NEXT:    cset r1, ne
4083 ; CHECK-MVE-NEXT:    cmp r1, #0
4084 ; CHECK-MVE-NEXT:    mov.w r1, #0
4085 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4086 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4087 ; CHECK-MVE-NEXT:    it hi
4088 ; CHECK-MVE-NEXT:    movhi r1, #1
4089 ; CHECK-MVE-NEXT:    cmp r1, #0
4090 ; CHECK-MVE-NEXT:    cset r1, ne
4091 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4092 ; CHECK-MVE-NEXT:    cmp r1, #0
4093 ; CHECK-MVE-NEXT:    mov.w r1, #0
4094 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4095 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4096 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4097 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4098 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4099 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4100 ; CHECK-MVE-NEXT:    it hi
4101 ; CHECK-MVE-NEXT:    movhi r1, #1
4102 ; CHECK-MVE-NEXT:    cmp r1, #0
4103 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
4104 ; CHECK-MVE-NEXT:    cset r1, ne
4105 ; CHECK-MVE-NEXT:    cmp r1, #0
4106 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4107 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4108 ; CHECK-MVE-NEXT:    it hi
4109 ; CHECK-MVE-NEXT:    movhi r0, #1
4110 ; CHECK-MVE-NEXT:    cmp r0, #0
4111 ; CHECK-MVE-NEXT:    cset r0, ne
4112 ; CHECK-MVE-NEXT:    cmp r0, #0
4113 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4114 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4115 ; CHECK-MVE-NEXT:    bx lr
4117 ; CHECK-MVEFP-LABEL: vcmp_r_ugt_v8f16:
4118 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4119 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4120 ; CHECK-MVEFP-NEXT:    vcmp.f16 lt, q0, r0
4121 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4122 ; CHECK-MVEFP-NEXT:    bx lr
4123 entry:
4124   %i = insertelement <8 x half> undef, half %src2, i32 0
4125   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4126   %c = fcmp ugt <8 x half> %sp, %src
4127   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4128   ret <8 x half> %s
4131 define arm_aapcs_vfpcc <8 x half> @vcmp_r_uge_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4132 ; CHECK-MVE-LABEL: vcmp_r_uge_v8f16:
4133 ; CHECK-MVE:       @ %bb.0: @ %entry
4134 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4135 ; CHECK-MVE-NEXT:    movs r1, #0
4136 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4137 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4138 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4139 ; CHECK-MVE-NEXT:    it pl
4140 ; CHECK-MVE-NEXT:    movpl r1, #1
4141 ; CHECK-MVE-NEXT:    cmp r1, #0
4142 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4143 ; CHECK-MVE-NEXT:    cset r1, ne
4144 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
4145 ; CHECK-MVE-NEXT:    cmp r1, #0
4146 ; CHECK-MVE-NEXT:    mov.w r1, #0
4147 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4148 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4149 ; CHECK-MVE-NEXT:    it pl
4150 ; CHECK-MVE-NEXT:    movpl r1, #1
4151 ; CHECK-MVE-NEXT:    cmp r1, #0
4152 ; CHECK-MVE-NEXT:    cset r1, ne
4153 ; CHECK-MVE-NEXT:    movs r0, #0
4154 ; CHECK-MVE-NEXT:    cmp r1, #0
4155 ; CHECK-MVE-NEXT:    mov.w r1, #0
4156 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4157 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4158 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4159 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4160 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4161 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4162 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4163 ; CHECK-MVE-NEXT:    it pl
4164 ; CHECK-MVE-NEXT:    movpl r1, #1
4165 ; CHECK-MVE-NEXT:    cmp r1, #0
4166 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
4167 ; CHECK-MVE-NEXT:    cset r1, ne
4168 ; CHECK-MVE-NEXT:    cmp r1, #0
4169 ; CHECK-MVE-NEXT:    mov.w r1, #0
4170 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4171 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4172 ; CHECK-MVE-NEXT:    it pl
4173 ; CHECK-MVE-NEXT:    movpl r1, #1
4174 ; CHECK-MVE-NEXT:    cmp r1, #0
4175 ; CHECK-MVE-NEXT:    cset r1, ne
4176 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4177 ; CHECK-MVE-NEXT:    cmp r1, #0
4178 ; CHECK-MVE-NEXT:    mov.w r1, #0
4179 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4180 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4181 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4182 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4183 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4184 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4185 ; CHECK-MVE-NEXT:    it pl
4186 ; CHECK-MVE-NEXT:    movpl r1, #1
4187 ; CHECK-MVE-NEXT:    cmp r1, #0
4188 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
4189 ; CHECK-MVE-NEXT:    cset r1, ne
4190 ; CHECK-MVE-NEXT:    cmp r1, #0
4191 ; CHECK-MVE-NEXT:    mov.w r1, #0
4192 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4193 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4194 ; CHECK-MVE-NEXT:    it pl
4195 ; CHECK-MVE-NEXT:    movpl r1, #1
4196 ; CHECK-MVE-NEXT:    cmp r1, #0
4197 ; CHECK-MVE-NEXT:    cset r1, ne
4198 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4199 ; CHECK-MVE-NEXT:    cmp r1, #0
4200 ; CHECK-MVE-NEXT:    mov.w r1, #0
4201 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4202 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4203 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4204 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4205 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4206 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4207 ; CHECK-MVE-NEXT:    it pl
4208 ; CHECK-MVE-NEXT:    movpl r1, #1
4209 ; CHECK-MVE-NEXT:    cmp r1, #0
4210 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
4211 ; CHECK-MVE-NEXT:    cset r1, ne
4212 ; CHECK-MVE-NEXT:    cmp r1, #0
4213 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4214 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4215 ; CHECK-MVE-NEXT:    it pl
4216 ; CHECK-MVE-NEXT:    movpl r0, #1
4217 ; CHECK-MVE-NEXT:    cmp r0, #0
4218 ; CHECK-MVE-NEXT:    cset r0, ne
4219 ; CHECK-MVE-NEXT:    cmp r0, #0
4220 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4221 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4222 ; CHECK-MVE-NEXT:    bx lr
4224 ; CHECK-MVEFP-LABEL: vcmp_r_uge_v8f16:
4225 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4226 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4227 ; CHECK-MVEFP-NEXT:    vcmp.f16 le, q0, r0
4228 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4229 ; CHECK-MVEFP-NEXT:    bx lr
4230 entry:
4231   %i = insertelement <8 x half> undef, half %src2, i32 0
4232   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4233   %c = fcmp uge <8 x half> %sp, %src
4234   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4235   ret <8 x half> %s
4238 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ult_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4239 ; CHECK-MVE-LABEL: vcmp_r_ult_v8f16:
4240 ; CHECK-MVE:       @ %bb.0: @ %entry
4241 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4242 ; CHECK-MVE-NEXT:    movs r1, #0
4243 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4244 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4245 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4246 ; CHECK-MVE-NEXT:    it lt
4247 ; CHECK-MVE-NEXT:    movlt r1, #1
4248 ; CHECK-MVE-NEXT:    cmp r1, #0
4249 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4250 ; CHECK-MVE-NEXT:    cset r1, ne
4251 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
4252 ; CHECK-MVE-NEXT:    cmp r1, #0
4253 ; CHECK-MVE-NEXT:    mov.w r1, #0
4254 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4255 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4256 ; CHECK-MVE-NEXT:    it lt
4257 ; CHECK-MVE-NEXT:    movlt r1, #1
4258 ; CHECK-MVE-NEXT:    cmp r1, #0
4259 ; CHECK-MVE-NEXT:    cset r1, ne
4260 ; CHECK-MVE-NEXT:    movs r0, #0
4261 ; CHECK-MVE-NEXT:    cmp r1, #0
4262 ; CHECK-MVE-NEXT:    mov.w r1, #0
4263 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4264 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4265 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4266 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4267 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4268 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4269 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4270 ; CHECK-MVE-NEXT:    it lt
4271 ; CHECK-MVE-NEXT:    movlt r1, #1
4272 ; CHECK-MVE-NEXT:    cmp r1, #0
4273 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
4274 ; CHECK-MVE-NEXT:    cset r1, ne
4275 ; CHECK-MVE-NEXT:    cmp r1, #0
4276 ; CHECK-MVE-NEXT:    mov.w r1, #0
4277 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4278 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4279 ; CHECK-MVE-NEXT:    it lt
4280 ; CHECK-MVE-NEXT:    movlt r1, #1
4281 ; CHECK-MVE-NEXT:    cmp r1, #0
4282 ; CHECK-MVE-NEXT:    cset r1, ne
4283 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4284 ; CHECK-MVE-NEXT:    cmp r1, #0
4285 ; CHECK-MVE-NEXT:    mov.w r1, #0
4286 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4287 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4288 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4289 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4290 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4291 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4292 ; CHECK-MVE-NEXT:    it lt
4293 ; CHECK-MVE-NEXT:    movlt r1, #1
4294 ; CHECK-MVE-NEXT:    cmp r1, #0
4295 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
4296 ; CHECK-MVE-NEXT:    cset r1, ne
4297 ; CHECK-MVE-NEXT:    cmp r1, #0
4298 ; CHECK-MVE-NEXT:    mov.w r1, #0
4299 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4300 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4301 ; CHECK-MVE-NEXT:    it lt
4302 ; CHECK-MVE-NEXT:    movlt r1, #1
4303 ; CHECK-MVE-NEXT:    cmp r1, #0
4304 ; CHECK-MVE-NEXT:    cset r1, ne
4305 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4306 ; CHECK-MVE-NEXT:    cmp r1, #0
4307 ; CHECK-MVE-NEXT:    mov.w r1, #0
4308 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4309 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4310 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4311 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4312 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4313 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4314 ; CHECK-MVE-NEXT:    it lt
4315 ; CHECK-MVE-NEXT:    movlt r1, #1
4316 ; CHECK-MVE-NEXT:    cmp r1, #0
4317 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
4318 ; CHECK-MVE-NEXT:    cset r1, ne
4319 ; CHECK-MVE-NEXT:    cmp r1, #0
4320 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4321 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4322 ; CHECK-MVE-NEXT:    it lt
4323 ; CHECK-MVE-NEXT:    movlt r0, #1
4324 ; CHECK-MVE-NEXT:    cmp r0, #0
4325 ; CHECK-MVE-NEXT:    cset r0, ne
4326 ; CHECK-MVE-NEXT:    cmp r0, #0
4327 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4328 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4329 ; CHECK-MVE-NEXT:    bx lr
4331 ; CHECK-MVEFP-LABEL: vcmp_r_ult_v8f16:
4332 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4333 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4334 ; CHECK-MVEFP-NEXT:    vcmp.f16 gt, q0, r0
4335 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4336 ; CHECK-MVEFP-NEXT:    bx lr
4337 entry:
4338   %i = insertelement <8 x half> undef, half %src2, i32 0
4339   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4340   %c = fcmp ult <8 x half> %sp, %src
4341   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4342   ret <8 x half> %s
4345 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ule_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4346 ; CHECK-MVE-LABEL: vcmp_r_ule_v8f16:
4347 ; CHECK-MVE:       @ %bb.0: @ %entry
4348 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4349 ; CHECK-MVE-NEXT:    movs r1, #0
4350 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4351 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4352 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4353 ; CHECK-MVE-NEXT:    it le
4354 ; CHECK-MVE-NEXT:    movle r1, #1
4355 ; CHECK-MVE-NEXT:    cmp r1, #0
4356 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4357 ; CHECK-MVE-NEXT:    cset r1, ne
4358 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
4359 ; CHECK-MVE-NEXT:    cmp r1, #0
4360 ; CHECK-MVE-NEXT:    mov.w r1, #0
4361 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4362 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4363 ; CHECK-MVE-NEXT:    it le
4364 ; CHECK-MVE-NEXT:    movle r1, #1
4365 ; CHECK-MVE-NEXT:    cmp r1, #0
4366 ; CHECK-MVE-NEXT:    cset r1, ne
4367 ; CHECK-MVE-NEXT:    movs r0, #0
4368 ; CHECK-MVE-NEXT:    cmp r1, #0
4369 ; CHECK-MVE-NEXT:    mov.w r1, #0
4370 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4371 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4372 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4373 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4374 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4375 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4376 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4377 ; CHECK-MVE-NEXT:    it le
4378 ; CHECK-MVE-NEXT:    movle r1, #1
4379 ; CHECK-MVE-NEXT:    cmp r1, #0
4380 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
4381 ; CHECK-MVE-NEXT:    cset r1, ne
4382 ; CHECK-MVE-NEXT:    cmp r1, #0
4383 ; CHECK-MVE-NEXT:    mov.w r1, #0
4384 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4385 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4386 ; CHECK-MVE-NEXT:    it le
4387 ; CHECK-MVE-NEXT:    movle r1, #1
4388 ; CHECK-MVE-NEXT:    cmp r1, #0
4389 ; CHECK-MVE-NEXT:    cset r1, ne
4390 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4391 ; CHECK-MVE-NEXT:    cmp r1, #0
4392 ; CHECK-MVE-NEXT:    mov.w r1, #0
4393 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4394 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4395 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4396 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4397 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4398 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4399 ; CHECK-MVE-NEXT:    it le
4400 ; CHECK-MVE-NEXT:    movle r1, #1
4401 ; CHECK-MVE-NEXT:    cmp r1, #0
4402 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
4403 ; CHECK-MVE-NEXT:    cset r1, ne
4404 ; CHECK-MVE-NEXT:    cmp r1, #0
4405 ; CHECK-MVE-NEXT:    mov.w r1, #0
4406 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4407 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4408 ; CHECK-MVE-NEXT:    it le
4409 ; CHECK-MVE-NEXT:    movle r1, #1
4410 ; CHECK-MVE-NEXT:    cmp r1, #0
4411 ; CHECK-MVE-NEXT:    cset r1, ne
4412 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4413 ; CHECK-MVE-NEXT:    cmp r1, #0
4414 ; CHECK-MVE-NEXT:    mov.w r1, #0
4415 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4416 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4417 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4418 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4419 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4420 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4421 ; CHECK-MVE-NEXT:    it le
4422 ; CHECK-MVE-NEXT:    movle r1, #1
4423 ; CHECK-MVE-NEXT:    cmp r1, #0
4424 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
4425 ; CHECK-MVE-NEXT:    cset r1, ne
4426 ; CHECK-MVE-NEXT:    cmp r1, #0
4427 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4428 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4429 ; CHECK-MVE-NEXT:    it le
4430 ; CHECK-MVE-NEXT:    movle r0, #1
4431 ; CHECK-MVE-NEXT:    cmp r0, #0
4432 ; CHECK-MVE-NEXT:    cset r0, ne
4433 ; CHECK-MVE-NEXT:    cmp r0, #0
4434 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4435 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4436 ; CHECK-MVE-NEXT:    bx lr
4438 ; CHECK-MVEFP-LABEL: vcmp_r_ule_v8f16:
4439 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4440 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4441 ; CHECK-MVEFP-NEXT:    vcmp.f16 ge, q0, r0
4442 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4443 ; CHECK-MVEFP-NEXT:    bx lr
4444 entry:
4445   %i = insertelement <8 x half> undef, half %src2, i32 0
4446   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4447   %c = fcmp ule <8 x half> %sp, %src
4448   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4449   ret <8 x half> %s
4452 define arm_aapcs_vfpcc <8 x half> @vcmp_r_ord_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4453 ; CHECK-MVE-LABEL: vcmp_r_ord_v8f16:
4454 ; CHECK-MVE:       @ %bb.0: @ %entry
4455 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4456 ; CHECK-MVE-NEXT:    movs r1, #0
4457 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4458 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4459 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4460 ; CHECK-MVE-NEXT:    it vc
4461 ; CHECK-MVE-NEXT:    movvc r1, #1
4462 ; CHECK-MVE-NEXT:    cmp r1, #0
4463 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4464 ; CHECK-MVE-NEXT:    cset r1, ne
4465 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
4466 ; CHECK-MVE-NEXT:    cmp r1, #0
4467 ; CHECK-MVE-NEXT:    mov.w r1, #0
4468 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4469 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4470 ; CHECK-MVE-NEXT:    it vc
4471 ; CHECK-MVE-NEXT:    movvc r1, #1
4472 ; CHECK-MVE-NEXT:    cmp r1, #0
4473 ; CHECK-MVE-NEXT:    cset r1, ne
4474 ; CHECK-MVE-NEXT:    movs r0, #0
4475 ; CHECK-MVE-NEXT:    cmp r1, #0
4476 ; CHECK-MVE-NEXT:    mov.w r1, #0
4477 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4478 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4479 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4480 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4481 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4482 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4483 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4484 ; CHECK-MVE-NEXT:    it vc
4485 ; CHECK-MVE-NEXT:    movvc r1, #1
4486 ; CHECK-MVE-NEXT:    cmp r1, #0
4487 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
4488 ; CHECK-MVE-NEXT:    cset r1, ne
4489 ; CHECK-MVE-NEXT:    cmp r1, #0
4490 ; CHECK-MVE-NEXT:    mov.w r1, #0
4491 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4492 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4493 ; CHECK-MVE-NEXT:    it vc
4494 ; CHECK-MVE-NEXT:    movvc r1, #1
4495 ; CHECK-MVE-NEXT:    cmp r1, #0
4496 ; CHECK-MVE-NEXT:    cset r1, ne
4497 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4498 ; CHECK-MVE-NEXT:    cmp r1, #0
4499 ; CHECK-MVE-NEXT:    mov.w r1, #0
4500 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4501 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4502 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4503 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4504 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4505 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4506 ; CHECK-MVE-NEXT:    it vc
4507 ; CHECK-MVE-NEXT:    movvc r1, #1
4508 ; CHECK-MVE-NEXT:    cmp r1, #0
4509 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
4510 ; CHECK-MVE-NEXT:    cset r1, ne
4511 ; CHECK-MVE-NEXT:    cmp r1, #0
4512 ; CHECK-MVE-NEXT:    mov.w r1, #0
4513 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4514 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4515 ; CHECK-MVE-NEXT:    it vc
4516 ; CHECK-MVE-NEXT:    movvc r1, #1
4517 ; CHECK-MVE-NEXT:    cmp r1, #0
4518 ; CHECK-MVE-NEXT:    cset r1, ne
4519 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4520 ; CHECK-MVE-NEXT:    cmp r1, #0
4521 ; CHECK-MVE-NEXT:    mov.w r1, #0
4522 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4523 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4524 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4525 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4526 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4527 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4528 ; CHECK-MVE-NEXT:    it vc
4529 ; CHECK-MVE-NEXT:    movvc r1, #1
4530 ; CHECK-MVE-NEXT:    cmp r1, #0
4531 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
4532 ; CHECK-MVE-NEXT:    cset r1, ne
4533 ; CHECK-MVE-NEXT:    cmp r1, #0
4534 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4535 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4536 ; CHECK-MVE-NEXT:    it vc
4537 ; CHECK-MVE-NEXT:    movvc r0, #1
4538 ; CHECK-MVE-NEXT:    cmp r0, #0
4539 ; CHECK-MVE-NEXT:    cset r0, ne
4540 ; CHECK-MVE-NEXT:    cmp r0, #0
4541 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4542 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4543 ; CHECK-MVE-NEXT:    bx lr
4545 ; CHECK-MVEFP-LABEL: vcmp_r_ord_v8f16:
4546 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4547 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4548 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q0, r0
4549 ; CHECK-MVEFP-NEXT:    vcmpt.f16 gt, q0, r0
4550 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
4551 ; CHECK-MVEFP-NEXT:    bx lr
4552 entry:
4553   %i = insertelement <8 x half> undef, half %src2, i32 0
4554   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4555   %c = fcmp ord <8 x half> %sp, %src
4556   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4557   ret <8 x half> %s
4560 define arm_aapcs_vfpcc <8 x half> @vcmp_r_uno_v8f16(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4561 ; CHECK-MVE-LABEL: vcmp_r_uno_v8f16:
4562 ; CHECK-MVE:       @ %bb.0: @ %entry
4563 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4564 ; CHECK-MVE-NEXT:    movs r1, #0
4565 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4566 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4567 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4568 ; CHECK-MVE-NEXT:    it vs
4569 ; CHECK-MVE-NEXT:    movvs r1, #1
4570 ; CHECK-MVE-NEXT:    cmp r1, #0
4571 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4572 ; CHECK-MVE-NEXT:    cset r1, ne
4573 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s0
4574 ; CHECK-MVE-NEXT:    cmp r1, #0
4575 ; CHECK-MVE-NEXT:    mov.w r1, #0
4576 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4577 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4578 ; CHECK-MVE-NEXT:    it vs
4579 ; CHECK-MVE-NEXT:    movvs r1, #1
4580 ; CHECK-MVE-NEXT:    cmp r1, #0
4581 ; CHECK-MVE-NEXT:    cset r1, ne
4582 ; CHECK-MVE-NEXT:    movs r0, #0
4583 ; CHECK-MVE-NEXT:    cmp r1, #0
4584 ; CHECK-MVE-NEXT:    mov.w r1, #0
4585 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4586 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4587 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4588 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4589 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4590 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4591 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4592 ; CHECK-MVE-NEXT:    it vs
4593 ; CHECK-MVE-NEXT:    movvs r1, #1
4594 ; CHECK-MVE-NEXT:    cmp r1, #0
4595 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s1
4596 ; CHECK-MVE-NEXT:    cset r1, ne
4597 ; CHECK-MVE-NEXT:    cmp r1, #0
4598 ; CHECK-MVE-NEXT:    mov.w r1, #0
4599 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4600 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4601 ; CHECK-MVE-NEXT:    it vs
4602 ; CHECK-MVE-NEXT:    movvs r1, #1
4603 ; CHECK-MVE-NEXT:    cmp r1, #0
4604 ; CHECK-MVE-NEXT:    cset r1, ne
4605 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4606 ; CHECK-MVE-NEXT:    cmp r1, #0
4607 ; CHECK-MVE-NEXT:    mov.w r1, #0
4608 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4609 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4610 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4611 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4612 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4613 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4614 ; CHECK-MVE-NEXT:    it vs
4615 ; CHECK-MVE-NEXT:    movvs r1, #1
4616 ; CHECK-MVE-NEXT:    cmp r1, #0
4617 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s2
4618 ; CHECK-MVE-NEXT:    cset r1, ne
4619 ; CHECK-MVE-NEXT:    cmp r1, #0
4620 ; CHECK-MVE-NEXT:    mov.w r1, #0
4621 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4622 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4623 ; CHECK-MVE-NEXT:    it vs
4624 ; CHECK-MVE-NEXT:    movvs r1, #1
4625 ; CHECK-MVE-NEXT:    cmp r1, #0
4626 ; CHECK-MVE-NEXT:    cset r1, ne
4627 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4628 ; CHECK-MVE-NEXT:    cmp r1, #0
4629 ; CHECK-MVE-NEXT:    mov.w r1, #0
4630 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4631 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4632 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4633 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s6
4634 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4635 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4636 ; CHECK-MVE-NEXT:    it vs
4637 ; CHECK-MVE-NEXT:    movvs r1, #1
4638 ; CHECK-MVE-NEXT:    cmp r1, #0
4639 ; CHECK-MVE-NEXT:    vcmp.f16 s4, s3
4640 ; CHECK-MVE-NEXT:    cset r1, ne
4641 ; CHECK-MVE-NEXT:    cmp r1, #0
4642 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4643 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4644 ; CHECK-MVE-NEXT:    it vs
4645 ; CHECK-MVE-NEXT:    movvs r0, #1
4646 ; CHECK-MVE-NEXT:    cmp r0, #0
4647 ; CHECK-MVE-NEXT:    cset r0, ne
4648 ; CHECK-MVE-NEXT:    cmp r0, #0
4649 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4650 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4651 ; CHECK-MVE-NEXT:    bx lr
4653 ; CHECK-MVEFP-LABEL: vcmp_r_uno_v8f16:
4654 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4655 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4656 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q0, r0
4657 ; CHECK-MVEFP-NEXT:    vcmpt.f16 gt, q0, r0
4658 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4659 ; CHECK-MVEFP-NEXT:    bx lr
4660 entry:
4661   %i = insertelement <8 x half> undef, half %src2, i32 0
4662   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
4663   %c = fcmp uno <8 x half> %sp, %src
4664   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4665   ret <8 x half> %s
4670 define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16_bc(<8 x half> %src, half %src2, <8 x half> %a, <8 x half> %b) {
4671 ; CHECK-MVE-LABEL: vcmp_oeq_v8f16_bc:
4672 ; CHECK-MVE:       @ %bb.0: @ %entry
4673 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s0
4674 ; CHECK-MVE-NEXT:    movs r1, #0
4675 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
4676 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s8
4677 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4678 ; CHECK-MVE-NEXT:    it eq
4679 ; CHECK-MVE-NEXT:    moveq r1, #1
4680 ; CHECK-MVE-NEXT:    cmp r1, #0
4681 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s12
4682 ; CHECK-MVE-NEXT:    cset r1, ne
4683 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
4684 ; CHECK-MVE-NEXT:    cmp r1, #0
4685 ; CHECK-MVE-NEXT:    mov.w r1, #0
4686 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s5, s6
4687 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4688 ; CHECK-MVE-NEXT:    it eq
4689 ; CHECK-MVE-NEXT:    moveq r1, #1
4690 ; CHECK-MVE-NEXT:    cmp r1, #0
4691 ; CHECK-MVE-NEXT:    cset r1, ne
4692 ; CHECK-MVE-NEXT:    movs r0, #0
4693 ; CHECK-MVE-NEXT:    cmp r1, #0
4694 ; CHECK-MVE-NEXT:    mov.w r1, #0
4695 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
4696 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
4697 ; CHECK-MVE-NEXT:    vins.f16 s0, s6
4698 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s1
4699 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
4700 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s9
4701 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4702 ; CHECK-MVE-NEXT:    it eq
4703 ; CHECK-MVE-NEXT:    moveq r1, #1
4704 ; CHECK-MVE-NEXT:    cmp r1, #0
4705 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s4
4706 ; CHECK-MVE-NEXT:    cset r1, ne
4707 ; CHECK-MVE-NEXT:    cmp r1, #0
4708 ; CHECK-MVE-NEXT:    mov.w r1, #0
4709 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4710 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4711 ; CHECK-MVE-NEXT:    it eq
4712 ; CHECK-MVE-NEXT:    moveq r1, #1
4713 ; CHECK-MVE-NEXT:    cmp r1, #0
4714 ; CHECK-MVE-NEXT:    cset r1, ne
4715 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
4716 ; CHECK-MVE-NEXT:    cmp r1, #0
4717 ; CHECK-MVE-NEXT:    mov.w r1, #0
4718 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
4719 ; CHECK-MVE-NEXT:    vins.f16 s1, s6
4720 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s2
4721 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
4722 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s10
4723 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4724 ; CHECK-MVE-NEXT:    it eq
4725 ; CHECK-MVE-NEXT:    moveq r1, #1
4726 ; CHECK-MVE-NEXT:    cmp r1, #0
4727 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s4
4728 ; CHECK-MVE-NEXT:    cset r1, ne
4729 ; CHECK-MVE-NEXT:    cmp r1, #0
4730 ; CHECK-MVE-NEXT:    mov.w r1, #0
4731 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4732 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4733 ; CHECK-MVE-NEXT:    it eq
4734 ; CHECK-MVE-NEXT:    moveq r1, #1
4735 ; CHECK-MVE-NEXT:    cmp r1, #0
4736 ; CHECK-MVE-NEXT:    cset r1, ne
4737 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s15
4738 ; CHECK-MVE-NEXT:    cmp r1, #0
4739 ; CHECK-MVE-NEXT:    mov.w r1, #0
4740 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
4741 ; CHECK-MVE-NEXT:    vins.f16 s2, s6
4742 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
4743 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
4744 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s11
4745 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4746 ; CHECK-MVE-NEXT:    it eq
4747 ; CHECK-MVE-NEXT:    moveq r1, #1
4748 ; CHECK-MVE-NEXT:    cmp r1, #0
4749 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s4
4750 ; CHECK-MVE-NEXT:    cset r1, ne
4751 ; CHECK-MVE-NEXT:    cmp r1, #0
4752 ; CHECK-MVE-NEXT:    vseleq.f16 s6, s8, s6
4753 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
4754 ; CHECK-MVE-NEXT:    it eq
4755 ; CHECK-MVE-NEXT:    moveq r0, #1
4756 ; CHECK-MVE-NEXT:    cmp r0, #0
4757 ; CHECK-MVE-NEXT:    cset r0, ne
4758 ; CHECK-MVE-NEXT:    cmp r0, #0
4759 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
4760 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
4761 ; CHECK-MVE-NEXT:    bx lr
4763 ; CHECK-MVEFP-LABEL: vcmp_oeq_v8f16_bc:
4764 ; CHECK-MVEFP:       @ %bb.0: @ %entry
4765 ; CHECK-MVEFP-NEXT:    vmov.f16 r0, s4
4766 ; CHECK-MVEFP-NEXT:    vcmp.f16 eq, q0, r0
4767 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
4768 ; CHECK-MVEFP-NEXT:    bx lr
4769 entry:
4770   %src2bc = bitcast half %src2 to i16
4771   %i = insertelement <8 x i16> undef, i16 %src2bc, i32 0
4772   %spbc = shufflevector <8 x i16> %i, <8 x i16> undef, <8 x i32> zeroinitializer
4773   %sp = bitcast <8 x i16> %spbc to <8 x half>
4774   %c = fcmp oeq <8 x half> %src, %sp
4775   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
4776   ret <8 x half> %s