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