[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-vcmpf.ll
blobbaf0076277e50cc867e16857a3593d2fc9926ce5
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, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
6 ; CHECK-MVE-LABEL: vcmp_oeq_v4f32:
7 ; CHECK-MVE:       @ %bb.0: @ %entry
8 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
9 ; CHECK-MVE-NEXT:    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, s7
14 ; CHECK-MVE-NEXT:    cset r1, eq
15 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
16 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
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:    vcmp.f32 eq, q0, q1
33 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
34 ; CHECK-MVEFP-NEXT:    bx lr
35 entry:
36   %c = fcmp oeq <4 x float> %src, %src2
37   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
38   ret <4 x float> %s
41 define arm_aapcs_vfpcc <4 x float> @vcmp_one_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
42 ; CHECK-MVE-LABEL: vcmp_one_v4f32:
43 ; CHECK-MVE:       @ %bb.0: @ %entry
44 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
45 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
46 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
47 ; CHECK-MVE-NEXT:    cset r0, mi
48 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
49 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
50 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, le
51 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
52 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
53 ; CHECK-MVE-NEXT:    cset r1, mi
54 ; CHECK-MVE-NEXT:    csinc r1, r1, zr, le
55 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
56 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
57 ; CHECK-MVE-NEXT:    cset r2, mi
58 ; CHECK-MVE-NEXT:    csinc r2, r2, zr, le
59 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
60 ; CHECK-MVE-NEXT:    cset r3, mi
61 ; CHECK-MVE-NEXT:    csinc r3, r3, zr, le
62 ; CHECK-MVE-NEXT:    cmp r2, #0
63 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
64 ; CHECK-MVE-NEXT:    cmp r3, #0
65 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
66 ; CHECK-MVE-NEXT:    cmp r0, #0
67 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
68 ; CHECK-MVE-NEXT:    cmp r1, #0
69 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
70 ; CHECK-MVE-NEXT:    bx lr
72 ; CHECK-MVEFP-LABEL: vcmp_one_v4f32:
73 ; CHECK-MVEFP:       @ %bb.0: @ %entry
74 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q1, q0
75 ; CHECK-MVEFP-NEXT:    vcmpt.f32 le, q0, q1
76 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
77 ; CHECK-MVEFP-NEXT:    bx lr
78 entry:
79   %c = fcmp one <4 x float> %src, %src2
80   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
81   ret <4 x float> %s
84 define arm_aapcs_vfpcc <4 x float> @vcmp_ogt_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
85 ; CHECK-MVE-LABEL: vcmp_ogt_v4f32:
86 ; CHECK-MVE:       @ %bb.0: @ %entry
87 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
88 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
89 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
90 ; CHECK-MVE-NEXT:    cset r0, gt
91 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
92 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
93 ; CHECK-MVE-NEXT:    cset r1, gt
94 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
95 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
96 ; CHECK-MVE-NEXT:    cset r2, gt
97 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
98 ; CHECK-MVE-NEXT:    cset r3, gt
99 ; CHECK-MVE-NEXT:    cmp r2, #0
100 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
101 ; CHECK-MVE-NEXT:    cmp r3, #0
102 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
103 ; CHECK-MVE-NEXT:    cmp r0, #0
104 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
105 ; CHECK-MVE-NEXT:    cmp r1, #0
106 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
107 ; CHECK-MVE-NEXT:    bx lr
109 ; CHECK-MVEFP-LABEL: vcmp_ogt_v4f32:
110 ; CHECK-MVEFP:       @ %bb.0: @ %entry
111 ; CHECK-MVEFP-NEXT:    vcmp.f32 gt, q0, q1
112 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
113 ; CHECK-MVEFP-NEXT:    bx lr
114 entry:
115   %c = fcmp ogt <4 x float> %src, %src2
116   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
117   ret <4 x float> %s
120 define arm_aapcs_vfpcc <4 x float> @vcmp_oge_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
121 ; CHECK-MVE-LABEL: vcmp_oge_v4f32:
122 ; CHECK-MVE:       @ %bb.0: @ %entry
123 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
124 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
125 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
126 ; CHECK-MVE-NEXT:    cset r0, ge
127 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
128 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
129 ; CHECK-MVE-NEXT:    cset r1, ge
130 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
131 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
132 ; CHECK-MVE-NEXT:    cset r2, ge
133 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
134 ; CHECK-MVE-NEXT:    cset r3, ge
135 ; CHECK-MVE-NEXT:    cmp r2, #0
136 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
137 ; CHECK-MVE-NEXT:    cmp r3, #0
138 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
139 ; CHECK-MVE-NEXT:    cmp r0, #0
140 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
141 ; CHECK-MVE-NEXT:    cmp r1, #0
142 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
143 ; CHECK-MVE-NEXT:    bx lr
145 ; CHECK-MVEFP-LABEL: vcmp_oge_v4f32:
146 ; CHECK-MVEFP:       @ %bb.0: @ %entry
147 ; CHECK-MVEFP-NEXT:    vcmp.f32 ge, q0, q1
148 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
149 ; CHECK-MVEFP-NEXT:    bx lr
150 entry:
151   %c = fcmp oge <4 x float> %src, %src2
152   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
153   ret <4 x float> %s
156 define arm_aapcs_vfpcc <4 x float> @vcmp_olt_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
157 ; CHECK-MVE-LABEL: vcmp_olt_v4f32:
158 ; CHECK-MVE:       @ %bb.0: @ %entry
159 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
160 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
161 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
162 ; CHECK-MVE-NEXT:    cset r0, mi
163 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
164 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
165 ; CHECK-MVE-NEXT:    cset r1, mi
166 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
167 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
168 ; CHECK-MVE-NEXT:    cset r2, mi
169 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
170 ; CHECK-MVE-NEXT:    cset r3, mi
171 ; CHECK-MVE-NEXT:    cmp r2, #0
172 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
173 ; CHECK-MVE-NEXT:    cmp r3, #0
174 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
175 ; CHECK-MVE-NEXT:    cmp r0, #0
176 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
177 ; CHECK-MVE-NEXT:    cmp r1, #0
178 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
179 ; CHECK-MVE-NEXT:    bx lr
181 ; CHECK-MVEFP-LABEL: vcmp_olt_v4f32:
182 ; CHECK-MVEFP:       @ %bb.0: @ %entry
183 ; CHECK-MVEFP-NEXT:    vcmp.f32 gt, q1, q0
184 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
185 ; CHECK-MVEFP-NEXT:    bx lr
186 entry:
187   %c = fcmp olt <4 x float> %src, %src2
188   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
189   ret <4 x float> %s
192 define arm_aapcs_vfpcc <4 x float> @vcmp_ole_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
193 ; CHECK-MVE-LABEL: vcmp_ole_v4f32:
194 ; CHECK-MVE:       @ %bb.0: @ %entry
195 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
196 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
197 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
198 ; CHECK-MVE-NEXT:    cset r0, ls
199 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
200 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
201 ; CHECK-MVE-NEXT:    cset r1, ls
202 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
203 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
204 ; CHECK-MVE-NEXT:    cset r2, ls
205 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
206 ; CHECK-MVE-NEXT:    cset r3, ls
207 ; CHECK-MVE-NEXT:    cmp r2, #0
208 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
209 ; CHECK-MVE-NEXT:    cmp r3, #0
210 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
211 ; CHECK-MVE-NEXT:    cmp r0, #0
212 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
213 ; CHECK-MVE-NEXT:    cmp r1, #0
214 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
215 ; CHECK-MVE-NEXT:    bx lr
217 ; CHECK-MVEFP-LABEL: vcmp_ole_v4f32:
218 ; CHECK-MVEFP:       @ %bb.0: @ %entry
219 ; CHECK-MVEFP-NEXT:    vcmp.f32 ge, q1, q0
220 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
221 ; CHECK-MVEFP-NEXT:    bx lr
222 entry:
223   %c = fcmp ole <4 x float> %src, %src2
224   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
225   ret <4 x float> %s
228 define arm_aapcs_vfpcc <4 x float> @vcmp_ueq_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
229 ; CHECK-MVE-LABEL: vcmp_ueq_v4f32:
230 ; CHECK-MVE:       @ %bb.0: @ %entry
231 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
232 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
233 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
234 ; CHECK-MVE-NEXT:    cset r0, eq
235 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
236 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
237 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
238 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
239 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
240 ; CHECK-MVE-NEXT:    cset r1, eq
241 ; CHECK-MVE-NEXT:    csinc r1, r1, zr, vc
242 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
243 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
244 ; CHECK-MVE-NEXT:    cset r2, eq
245 ; CHECK-MVE-NEXT:    csinc r2, r2, zr, vc
246 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
247 ; CHECK-MVE-NEXT:    cset r3, eq
248 ; CHECK-MVE-NEXT:    csinc r3, r3, zr, vc
249 ; CHECK-MVE-NEXT:    cmp r2, #0
250 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
251 ; CHECK-MVE-NEXT:    cmp r3, #0
252 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
253 ; CHECK-MVE-NEXT:    cmp r0, #0
254 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
255 ; CHECK-MVE-NEXT:    cmp r1, #0
256 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
257 ; CHECK-MVE-NEXT:    bx lr
259 ; CHECK-MVEFP-LABEL: vcmp_ueq_v4f32:
260 ; CHECK-MVEFP:       @ %bb.0: @ %entry
261 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q1, q0
262 ; CHECK-MVEFP-NEXT:    vcmpt.f32 le, q0, q1
263 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
264 ; CHECK-MVEFP-NEXT:    bx lr
265 entry:
266   %c = fcmp ueq <4 x float> %src, %src2
267   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
268   ret <4 x float> %s
271 define arm_aapcs_vfpcc <4 x float> @vcmp_une_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
272 ; CHECK-MVE-LABEL: vcmp_une_v4f32:
273 ; CHECK-MVE:       @ %bb.0: @ %entry
274 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
275 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
276 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
277 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
278 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
279 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
280 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
281 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
282 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
283 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
284 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
285 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
286 ; CHECK-MVE-NEXT:    bx lr
288 ; CHECK-MVEFP-LABEL: vcmp_une_v4f32:
289 ; CHECK-MVEFP:       @ %bb.0: @ %entry
290 ; CHECK-MVEFP-NEXT:    vcmp.f32 ne, q0, q1
291 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
292 ; CHECK-MVEFP-NEXT:    bx lr
293 entry:
294   %c = fcmp une <4 x float> %src, %src2
295   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
296   ret <4 x float> %s
299 define arm_aapcs_vfpcc <4 x float> @vcmp_ugt_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
300 ; CHECK-MVE-LABEL: vcmp_ugt_v4f32:
301 ; CHECK-MVE:       @ %bb.0: @ %entry
302 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
303 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
304 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
305 ; CHECK-MVE-NEXT:    cset r0, hi
306 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
307 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
308 ; CHECK-MVE-NEXT:    cset r1, hi
309 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
310 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
311 ; CHECK-MVE-NEXT:    cset r2, hi
312 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
313 ; CHECK-MVE-NEXT:    cset r3, hi
314 ; CHECK-MVE-NEXT:    cmp r2, #0
315 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
316 ; CHECK-MVE-NEXT:    cmp r3, #0
317 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
318 ; CHECK-MVE-NEXT:    cmp r0, #0
319 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
320 ; CHECK-MVE-NEXT:    cmp r1, #0
321 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
322 ; CHECK-MVE-NEXT:    bx lr
324 ; CHECK-MVEFP-LABEL: vcmp_ugt_v4f32:
325 ; CHECK-MVEFP:       @ %bb.0: @ %entry
326 ; CHECK-MVEFP-NEXT:    vcmp.f32 lt, q1, q0
327 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
328 ; CHECK-MVEFP-NEXT:    bx lr
329 entry:
330   %c = fcmp ugt <4 x float> %src, %src2
331   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
332   ret <4 x float> %s
335 define arm_aapcs_vfpcc <4 x float> @vcmp_uge_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
336 ; CHECK-MVE-LABEL: vcmp_uge_v4f32:
337 ; CHECK-MVE:       @ %bb.0: @ %entry
338 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
339 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
340 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
341 ; CHECK-MVE-NEXT:    cset r0, pl
342 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
343 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
344 ; CHECK-MVE-NEXT:    cset r1, pl
345 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
346 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
347 ; CHECK-MVE-NEXT:    cset r2, pl
348 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
349 ; CHECK-MVE-NEXT:    cset r3, pl
350 ; CHECK-MVE-NEXT:    cmp r2, #0
351 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
352 ; CHECK-MVE-NEXT:    cmp r3, #0
353 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
354 ; CHECK-MVE-NEXT:    cmp r0, #0
355 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
356 ; CHECK-MVE-NEXT:    cmp r1, #0
357 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
358 ; CHECK-MVE-NEXT:    bx lr
360 ; CHECK-MVEFP-LABEL: vcmp_uge_v4f32:
361 ; CHECK-MVEFP:       @ %bb.0: @ %entry
362 ; CHECK-MVEFP-NEXT:    vcmp.f32 le, q1, q0
363 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
364 ; CHECK-MVEFP-NEXT:    bx lr
365 entry:
366   %c = fcmp uge <4 x float> %src, %src2
367   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
368   ret <4 x float> %s
371 define arm_aapcs_vfpcc <4 x float> @vcmp_ult_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
372 ; CHECK-MVE-LABEL: vcmp_ult_v4f32:
373 ; CHECK-MVE:       @ %bb.0: @ %entry
374 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
375 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
376 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
377 ; CHECK-MVE-NEXT:    cset r0, lt
378 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
379 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
380 ; CHECK-MVE-NEXT:    cset r1, lt
381 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
382 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
383 ; CHECK-MVE-NEXT:    cset r2, lt
384 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
385 ; CHECK-MVE-NEXT:    cset r3, lt
386 ; CHECK-MVE-NEXT:    cmp r2, #0
387 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
388 ; CHECK-MVE-NEXT:    cmp r3, #0
389 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
390 ; CHECK-MVE-NEXT:    cmp r0, #0
391 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
392 ; CHECK-MVE-NEXT:    cmp r1, #0
393 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
394 ; CHECK-MVE-NEXT:    bx lr
396 ; CHECK-MVEFP-LABEL: vcmp_ult_v4f32:
397 ; CHECK-MVEFP:       @ %bb.0: @ %entry
398 ; CHECK-MVEFP-NEXT:    vcmp.f32 lt, q0, q1
399 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
400 ; CHECK-MVEFP-NEXT:    bx lr
401 entry:
402   %c = fcmp ult <4 x float> %src, %src2
403   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
404   ret <4 x float> %s
407 define arm_aapcs_vfpcc <4 x float> @vcmp_ule_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
408 ; CHECK-MVE-LABEL: vcmp_ule_v4f32:
409 ; CHECK-MVE:       @ %bb.0: @ %entry
410 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
411 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
412 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
413 ; CHECK-MVE-NEXT:    cset r0, le
414 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
415 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
416 ; CHECK-MVE-NEXT:    cset r1, le
417 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
418 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
419 ; CHECK-MVE-NEXT:    cset r2, le
420 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
421 ; CHECK-MVE-NEXT:    cset r3, le
422 ; CHECK-MVE-NEXT:    cmp r2, #0
423 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
424 ; CHECK-MVE-NEXT:    cmp r3, #0
425 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
426 ; CHECK-MVE-NEXT:    cmp r0, #0
427 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
428 ; CHECK-MVE-NEXT:    cmp r1, #0
429 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
430 ; CHECK-MVE-NEXT:    bx lr
432 ; CHECK-MVEFP-LABEL: vcmp_ule_v4f32:
433 ; CHECK-MVEFP:       @ %bb.0: @ %entry
434 ; CHECK-MVEFP-NEXT:    vcmp.f32 le, q0, q1
435 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
436 ; CHECK-MVEFP-NEXT:    bx lr
437 entry:
438   %c = fcmp ule <4 x float> %src, %src2
439   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
440   ret <4 x float> %s
443 define arm_aapcs_vfpcc <4 x float> @vcmp_ord_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
444 ; CHECK-MVE-LABEL: vcmp_ord_v4f32:
445 ; CHECK-MVE:       @ %bb.0: @ %entry
446 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
447 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
448 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
449 ; CHECK-MVE-NEXT:    cset r0, vc
450 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
451 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
452 ; CHECK-MVE-NEXT:    cset r1, vc
453 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
454 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
455 ; CHECK-MVE-NEXT:    cset r2, vc
456 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
457 ; CHECK-MVE-NEXT:    cset r3, vc
458 ; CHECK-MVE-NEXT:    cmp r2, #0
459 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
460 ; CHECK-MVE-NEXT:    cmp r3, #0
461 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
462 ; CHECK-MVE-NEXT:    cmp r0, #0
463 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
464 ; CHECK-MVE-NEXT:    cmp r1, #0
465 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
466 ; CHECK-MVE-NEXT:    bx lr
468 ; CHECK-MVEFP-LABEL: vcmp_ord_v4f32:
469 ; CHECK-MVEFP:       @ %bb.0: @ %entry
470 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q1, q0
471 ; CHECK-MVEFP-NEXT:    vcmpt.f32 lt, q0, q1
472 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
473 ; CHECK-MVEFP-NEXT:    bx lr
474 entry:
475   %c = fcmp ord <4 x float> %src, %src2
476   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
477   ret <4 x float> %s
480 define arm_aapcs_vfpcc <4 x float> @vcmp_uno_v4f32(<4 x float> %src, <4 x float> %src2, <4 x float> %a, <4 x float> %b) {
481 ; CHECK-MVE-LABEL: vcmp_uno_v4f32:
482 ; CHECK-MVE:       @ %bb.0: @ %entry
483 ; CHECK-MVE-NEXT:    vcmp.f32 s1, s5
484 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
485 ; CHECK-MVE-NEXT:    vcmp.f32 s0, s4
486 ; CHECK-MVE-NEXT:    cset r0, vs
487 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
488 ; CHECK-MVE-NEXT:    vcmp.f32 s3, s7
489 ; CHECK-MVE-NEXT:    cset r1, vs
490 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
491 ; CHECK-MVE-NEXT:    vcmp.f32 s2, s6
492 ; CHECK-MVE-NEXT:    cset r2, vs
493 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
494 ; CHECK-MVE-NEXT:    cset r3, vs
495 ; CHECK-MVE-NEXT:    cmp r2, #0
496 ; CHECK-MVE-NEXT:    vseleq.f32 s3, s15, s11
497 ; CHECK-MVE-NEXT:    cmp r3, #0
498 ; CHECK-MVE-NEXT:    vseleq.f32 s2, s14, s10
499 ; CHECK-MVE-NEXT:    cmp r0, #0
500 ; CHECK-MVE-NEXT:    vseleq.f32 s1, s13, s9
501 ; CHECK-MVE-NEXT:    cmp r1, #0
502 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s12, s8
503 ; CHECK-MVE-NEXT:    bx lr
505 ; CHECK-MVEFP-LABEL: vcmp_uno_v4f32:
506 ; CHECK-MVEFP:       @ %bb.0: @ %entry
507 ; CHECK-MVEFP-NEXT:    vpt.f32 le, q1, q0
508 ; CHECK-MVEFP-NEXT:    vcmpt.f32 lt, q0, q1
509 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
510 ; CHECK-MVEFP-NEXT:    bx lr
511 entry:
512   %c = fcmp uno <4 x float> %src, %src2
513   %s = select <4 x i1> %c, <4 x float> %a, <4 x float> %b
514   ret <4 x float> %s
519 define arm_aapcs_vfpcc <8 x half> @vcmp_oeq_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
520 ; CHECK-MVE-LABEL: vcmp_oeq_v8f16:
521 ; CHECK-MVE:       @ %bb.0: @ %entry
522 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
523 ; CHECK-MVE-NEXT:    vpush {d8, d9}
524 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
525 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
526 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
527 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
528 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
529 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
530 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
531 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
532 ; CHECK-MVE-NEXT:    cset r0, eq
533 ; CHECK-MVE-NEXT:    cmp r0, #0
534 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
535 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
536 ; CHECK-MVE-NEXT:    cset r0, eq
537 ; CHECK-MVE-NEXT:    cmp r0, #0
538 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
539 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
540 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
541 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
542 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
543 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
544 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
545 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
546 ; CHECK-MVE-NEXT:    cset r0, eq
547 ; CHECK-MVE-NEXT:    cmp r0, #0
548 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
549 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
550 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
551 ; CHECK-MVE-NEXT:    cset r0, eq
552 ; CHECK-MVE-NEXT:    cmp r0, #0
553 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
554 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
555 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
556 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
557 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
558 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
559 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
560 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
561 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
562 ; CHECK-MVE-NEXT:    cset r0, eq
563 ; CHECK-MVE-NEXT:    cmp r0, #0
564 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
565 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
566 ; CHECK-MVE-NEXT:    cset r0, eq
567 ; CHECK-MVE-NEXT:    cmp r0, #0
568 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
569 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
570 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
571 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
572 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
573 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
574 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
575 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
576 ; CHECK-MVE-NEXT:    cset r0, eq
577 ; CHECK-MVE-NEXT:    cmp r0, #0
578 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
579 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
580 ; CHECK-MVE-NEXT:    cset r0, eq
581 ; CHECK-MVE-NEXT:    cmp r0, #0
582 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
583 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
584 ; CHECK-MVE-NEXT:    vpop {d8, d9}
585 ; CHECK-MVE-NEXT:    bx lr
587 ; CHECK-MVEFP-LABEL: vcmp_oeq_v8f16:
588 ; CHECK-MVEFP:       @ %bb.0: @ %entry
589 ; CHECK-MVEFP-NEXT:    vcmp.f16 eq, q0, q1
590 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
591 ; CHECK-MVEFP-NEXT:    bx lr
592 entry:
593   %c = fcmp oeq <8 x half> %src, %src2
594   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
595   ret <8 x half> %s
598 define arm_aapcs_vfpcc <8 x half> @vcmp_one_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
599 ; CHECK-MVE-LABEL: vcmp_one_v8f16:
600 ; CHECK-MVE:       @ %bb.0: @ %entry
601 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
602 ; CHECK-MVE-NEXT:    vpush {d8, d9}
603 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
604 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
605 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
606 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
607 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
608 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
609 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
610 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
611 ; CHECK-MVE-NEXT:    cset r0, mi
612 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, le
613 ; CHECK-MVE-NEXT:    cmp r0, #0
614 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
615 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
616 ; CHECK-MVE-NEXT:    cset r0, mi
617 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, le
618 ; CHECK-MVE-NEXT:    cmp r0, #0
619 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
620 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
621 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
622 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
623 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
624 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
625 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
626 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
627 ; CHECK-MVE-NEXT:    cset r0, mi
628 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, le
629 ; CHECK-MVE-NEXT:    cmp r0, #0
630 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
631 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
632 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
633 ; CHECK-MVE-NEXT:    cset r0, mi
634 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, le
635 ; CHECK-MVE-NEXT:    cmp r0, #0
636 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
637 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
638 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
639 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
640 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
641 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
642 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
643 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
644 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
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 s4, s8, s4
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 s2, s14, s10
654 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
655 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
656 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
657 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
658 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
659 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
660 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
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 s4, s6, s4
665 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
666 ; CHECK-MVE-NEXT:    cset r0, mi
667 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, le
668 ; CHECK-MVE-NEXT:    cmp r0, #0
669 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
670 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
671 ; CHECK-MVE-NEXT:    vpop {d8, d9}
672 ; CHECK-MVE-NEXT:    bx lr
674 ; CHECK-MVEFP-LABEL: vcmp_one_v8f16:
675 ; CHECK-MVEFP:       @ %bb.0: @ %entry
676 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q1, q0
677 ; CHECK-MVEFP-NEXT:    vcmpt.f16 le, q0, q1
678 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
679 ; CHECK-MVEFP-NEXT:    bx lr
680 entry:
681   %c = fcmp one <8 x half> %src, %src2
682   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
683   ret <8 x half> %s
686 define arm_aapcs_vfpcc <8 x half> @vcmp_ogt_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
687 ; CHECK-MVE-LABEL: vcmp_ogt_v8f16:
688 ; CHECK-MVE:       @ %bb.0: @ %entry
689 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
690 ; CHECK-MVE-NEXT:    vpush {d8, d9}
691 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
692 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
693 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
694 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
695 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
696 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
697 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
698 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
699 ; CHECK-MVE-NEXT:    cset r0, gt
700 ; CHECK-MVE-NEXT:    cmp r0, #0
701 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
702 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
703 ; CHECK-MVE-NEXT:    cset r0, gt
704 ; CHECK-MVE-NEXT:    cmp r0, #0
705 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
706 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
707 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
708 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
709 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
710 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
711 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
712 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
713 ; CHECK-MVE-NEXT:    cset r0, gt
714 ; CHECK-MVE-NEXT:    cmp r0, #0
715 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
716 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
717 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
718 ; CHECK-MVE-NEXT:    cset r0, gt
719 ; CHECK-MVE-NEXT:    cmp r0, #0
720 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
721 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
722 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
723 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
724 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
725 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
726 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
727 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
728 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
729 ; CHECK-MVE-NEXT:    cset r0, gt
730 ; CHECK-MVE-NEXT:    cmp r0, #0
731 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
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 s2, s14, s10
736 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
737 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
738 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
739 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
740 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
741 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
742 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
743 ; CHECK-MVE-NEXT:    cset r0, gt
744 ; CHECK-MVE-NEXT:    cmp r0, #0
745 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
746 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
747 ; CHECK-MVE-NEXT:    cset r0, gt
748 ; CHECK-MVE-NEXT:    cmp r0, #0
749 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
750 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
751 ; CHECK-MVE-NEXT:    vpop {d8, d9}
752 ; CHECK-MVE-NEXT:    bx lr
754 ; CHECK-MVEFP-LABEL: vcmp_ogt_v8f16:
755 ; CHECK-MVEFP:       @ %bb.0: @ %entry
756 ; CHECK-MVEFP-NEXT:    vcmp.f16 gt, q0, q1
757 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
758 ; CHECK-MVEFP-NEXT:    bx lr
759 entry:
760   %c = fcmp ogt <8 x half> %src, %src2
761   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
762   ret <8 x half> %s
765 define arm_aapcs_vfpcc <8 x half> @vcmp_oge_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
766 ; CHECK-MVE-LABEL: vcmp_oge_v8f16:
767 ; CHECK-MVE:       @ %bb.0: @ %entry
768 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
769 ; CHECK-MVE-NEXT:    vpush {d8, d9}
770 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
771 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
772 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
773 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
774 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
775 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
776 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
777 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
778 ; CHECK-MVE-NEXT:    cset r0, ge
779 ; CHECK-MVE-NEXT:    cmp r0, #0
780 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
781 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
782 ; CHECK-MVE-NEXT:    cset r0, ge
783 ; CHECK-MVE-NEXT:    cmp r0, #0
784 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
785 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
786 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
787 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
788 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
789 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
790 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
791 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
792 ; CHECK-MVE-NEXT:    cset r0, ge
793 ; CHECK-MVE-NEXT:    cmp r0, #0
794 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
795 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
796 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
797 ; CHECK-MVE-NEXT:    cset r0, ge
798 ; CHECK-MVE-NEXT:    cmp r0, #0
799 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
800 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
801 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
802 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
803 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
804 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
805 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
806 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
807 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
808 ; CHECK-MVE-NEXT:    cset r0, ge
809 ; CHECK-MVE-NEXT:    cmp r0, #0
810 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
811 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
812 ; CHECK-MVE-NEXT:    cset r0, ge
813 ; CHECK-MVE-NEXT:    cmp r0, #0
814 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
815 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
816 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
817 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
818 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
819 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
820 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
821 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
822 ; CHECK-MVE-NEXT:    cset r0, ge
823 ; CHECK-MVE-NEXT:    cmp r0, #0
824 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
825 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
826 ; CHECK-MVE-NEXT:    cset r0, ge
827 ; CHECK-MVE-NEXT:    cmp r0, #0
828 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
829 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
830 ; CHECK-MVE-NEXT:    vpop {d8, d9}
831 ; CHECK-MVE-NEXT:    bx lr
833 ; CHECK-MVEFP-LABEL: vcmp_oge_v8f16:
834 ; CHECK-MVEFP:       @ %bb.0: @ %entry
835 ; CHECK-MVEFP-NEXT:    vcmp.f16 ge, q0, q1
836 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
837 ; CHECK-MVEFP-NEXT:    bx lr
838 entry:
839   %c = fcmp oge <8 x half> %src, %src2
840   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
841   ret <8 x half> %s
844 define arm_aapcs_vfpcc <8 x half> @vcmp_olt_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
845 ; CHECK-MVE-LABEL: vcmp_olt_v8f16:
846 ; CHECK-MVE:       @ %bb.0: @ %entry
847 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
848 ; CHECK-MVE-NEXT:    vpush {d8, d9}
849 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
850 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
851 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
852 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
853 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
854 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
855 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
856 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
857 ; CHECK-MVE-NEXT:    cset r0, mi
858 ; CHECK-MVE-NEXT:    cmp r0, #0
859 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
860 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
861 ; CHECK-MVE-NEXT:    cset r0, mi
862 ; CHECK-MVE-NEXT:    cmp r0, #0
863 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
864 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
865 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
866 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
867 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
868 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
869 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
870 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
871 ; CHECK-MVE-NEXT:    cset r0, mi
872 ; CHECK-MVE-NEXT:    cmp r0, #0
873 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
874 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
875 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
876 ; CHECK-MVE-NEXT:    cset r0, mi
877 ; CHECK-MVE-NEXT:    cmp r0, #0
878 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
879 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
880 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
881 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
882 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
883 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
884 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
885 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
886 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
887 ; CHECK-MVE-NEXT:    cset r0, mi
888 ; CHECK-MVE-NEXT:    cmp r0, #0
889 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
890 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
891 ; CHECK-MVE-NEXT:    cset r0, mi
892 ; CHECK-MVE-NEXT:    cmp r0, #0
893 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
894 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
895 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
896 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
897 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
898 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
899 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
900 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
901 ; CHECK-MVE-NEXT:    cset r0, mi
902 ; CHECK-MVE-NEXT:    cmp r0, #0
903 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
904 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
905 ; CHECK-MVE-NEXT:    cset r0, mi
906 ; CHECK-MVE-NEXT:    cmp r0, #0
907 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
908 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
909 ; CHECK-MVE-NEXT:    vpop {d8, d9}
910 ; CHECK-MVE-NEXT:    bx lr
912 ; CHECK-MVEFP-LABEL: vcmp_olt_v8f16:
913 ; CHECK-MVEFP:       @ %bb.0: @ %entry
914 ; CHECK-MVEFP-NEXT:    vcmp.f16 gt, q1, q0
915 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
916 ; CHECK-MVEFP-NEXT:    bx lr
917 entry:
918   %c = fcmp olt <8 x half> %src, %src2
919   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
920   ret <8 x half> %s
923 define arm_aapcs_vfpcc <8 x half> @vcmp_ole_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
924 ; CHECK-MVE-LABEL: vcmp_ole_v8f16:
925 ; CHECK-MVE:       @ %bb.0: @ %entry
926 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
927 ; CHECK-MVE-NEXT:    vpush {d8, d9}
928 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
929 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
930 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
931 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
932 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
933 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
934 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
935 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
936 ; CHECK-MVE-NEXT:    cset r0, ls
937 ; CHECK-MVE-NEXT:    cmp r0, #0
938 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
939 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
940 ; CHECK-MVE-NEXT:    cset r0, ls
941 ; CHECK-MVE-NEXT:    cmp r0, #0
942 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
943 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
944 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
945 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
946 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
947 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
948 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
949 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
950 ; CHECK-MVE-NEXT:    cset r0, ls
951 ; CHECK-MVE-NEXT:    cmp r0, #0
952 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
953 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
954 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
955 ; CHECK-MVE-NEXT:    cset r0, ls
956 ; CHECK-MVE-NEXT:    cmp r0, #0
957 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
958 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
959 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
960 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
961 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
962 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
963 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
964 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
965 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
966 ; CHECK-MVE-NEXT:    cset r0, ls
967 ; CHECK-MVE-NEXT:    cmp r0, #0
968 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
969 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
970 ; CHECK-MVE-NEXT:    cset r0, ls
971 ; CHECK-MVE-NEXT:    cmp r0, #0
972 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
973 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
974 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
975 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
976 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
977 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
978 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
979 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
980 ; CHECK-MVE-NEXT:    cset r0, ls
981 ; CHECK-MVE-NEXT:    cmp r0, #0
982 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
983 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
984 ; CHECK-MVE-NEXT:    cset r0, ls
985 ; CHECK-MVE-NEXT:    cmp r0, #0
986 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
987 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
988 ; CHECK-MVE-NEXT:    vpop {d8, d9}
989 ; CHECK-MVE-NEXT:    bx lr
991 ; CHECK-MVEFP-LABEL: vcmp_ole_v8f16:
992 ; CHECK-MVEFP:       @ %bb.0: @ %entry
993 ; CHECK-MVEFP-NEXT:    vcmp.f16 ge, q1, q0
994 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
995 ; CHECK-MVEFP-NEXT:    bx lr
996 entry:
997   %c = fcmp ole <8 x half> %src, %src2
998   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
999   ret <8 x half> %s
1002 define arm_aapcs_vfpcc <8 x half> @vcmp_ueq_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1003 ; CHECK-MVE-LABEL: vcmp_ueq_v8f16:
1004 ; CHECK-MVE:       @ %bb.0: @ %entry
1005 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1006 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1007 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1008 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1009 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1010 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1011 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1012 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1013 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1014 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1015 ; CHECK-MVE-NEXT:    cset r0, eq
1016 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1017 ; CHECK-MVE-NEXT:    cmp r0, #0
1018 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1019 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1020 ; CHECK-MVE-NEXT:    cset r0, eq
1021 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1022 ; CHECK-MVE-NEXT:    cmp r0, #0
1023 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1024 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1025 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1026 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1027 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1028 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1029 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1030 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1031 ; CHECK-MVE-NEXT:    cset r0, eq
1032 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1033 ; CHECK-MVE-NEXT:    cmp r0, #0
1034 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1035 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1036 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1037 ; CHECK-MVE-NEXT:    cset r0, eq
1038 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1039 ; CHECK-MVE-NEXT:    cmp r0, #0
1040 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1041 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1042 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1043 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1044 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1045 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1046 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1047 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1048 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1049 ; CHECK-MVE-NEXT:    cset r0, eq
1050 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1051 ; CHECK-MVE-NEXT:    cmp r0, #0
1052 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1053 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1054 ; CHECK-MVE-NEXT:    cset r0, eq
1055 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1056 ; CHECK-MVE-NEXT:    cmp r0, #0
1057 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1058 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1059 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1060 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1061 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1062 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1063 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1064 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1065 ; CHECK-MVE-NEXT:    cset r0, eq
1066 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1067 ; CHECK-MVE-NEXT:    cmp r0, #0
1068 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
1069 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1070 ; CHECK-MVE-NEXT:    cset r0, eq
1071 ; CHECK-MVE-NEXT:    csinc r0, r0, zr, vc
1072 ; CHECK-MVE-NEXT:    cmp r0, #0
1073 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1074 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1075 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1076 ; CHECK-MVE-NEXT:    bx lr
1078 ; CHECK-MVEFP-LABEL: vcmp_ueq_v8f16:
1079 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1080 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q1, q0
1081 ; CHECK-MVEFP-NEXT:    vcmpt.f16 le, q0, q1
1082 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1083 ; CHECK-MVEFP-NEXT:    bx lr
1084 entry:
1085   %c = fcmp ueq <8 x half> %src, %src2
1086   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1087   ret <8 x half> %s
1090 define arm_aapcs_vfpcc <8 x half> @vcmp_une_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1091 ; CHECK-MVE-LABEL: vcmp_une_v8f16:
1092 ; CHECK-MVE:       @ %bb.0: @ %entry
1093 ; CHECK-MVE-NEXT:    .vsave {d8, d9, d10, d11}
1094 ; CHECK-MVE-NEXT:    vpush {d8, d9, d10, d11}
1095 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1096 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1097 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1098 ; CHECK-MVE-NEXT:    vmovx.f16 s20, s8
1099 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1100 ; CHECK-MVE-NEXT:    vmovx.f16 s22, s12
1101 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1102 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1103 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s22, s20
1104 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1105 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1106 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1107 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1108 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1109 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1110 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1111 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s9
1112 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s13
1113 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1114 ; CHECK-MVE-NEXT:    vmovx.f16 s5, s14
1115 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s16, s12
1116 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1117 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s10
1118 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1119 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1120 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1121 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1122 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s11
1123 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1124 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1125 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1126 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s5, s12
1127 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1128 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1129 ; CHECK-MVE-NEXT:    vmovx.f16 s10, s15
1130 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1131 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1132 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1133 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1134 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1135 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s10, s8
1136 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1137 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1138 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1139 ; CHECK-MVE-NEXT:    vpop {d8, d9, d10, d11}
1140 ; CHECK-MVE-NEXT:    bx lr
1142 ; CHECK-MVEFP-LABEL: vcmp_une_v8f16:
1143 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1144 ; CHECK-MVEFP-NEXT:    vcmp.f16 ne, q0, q1
1145 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1146 ; CHECK-MVEFP-NEXT:    bx lr
1147 entry:
1148   %c = fcmp une <8 x half> %src, %src2
1149   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1150   ret <8 x half> %s
1153 define arm_aapcs_vfpcc <8 x half> @vcmp_ugt_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1154 ; CHECK-MVE-LABEL: vcmp_ugt_v8f16:
1155 ; CHECK-MVE:       @ %bb.0: @ %entry
1156 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1157 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1158 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1159 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1160 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1161 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1162 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1163 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1164 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1165 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1166 ; CHECK-MVE-NEXT:    cset r0, hi
1167 ; CHECK-MVE-NEXT:    cmp r0, #0
1168 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1169 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1170 ; CHECK-MVE-NEXT:    cset r0, hi
1171 ; CHECK-MVE-NEXT:    cmp r0, #0
1172 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1173 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1174 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1175 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1176 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1177 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1178 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1179 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1180 ; CHECK-MVE-NEXT:    cset r0, hi
1181 ; CHECK-MVE-NEXT:    cmp r0, #0
1182 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1183 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1184 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1185 ; CHECK-MVE-NEXT:    cset r0, hi
1186 ; CHECK-MVE-NEXT:    cmp r0, #0
1187 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1188 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1189 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1190 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1191 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1192 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1193 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1194 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1195 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1196 ; CHECK-MVE-NEXT:    cset r0, hi
1197 ; CHECK-MVE-NEXT:    cmp r0, #0
1198 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1199 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1200 ; CHECK-MVE-NEXT:    cset r0, hi
1201 ; CHECK-MVE-NEXT:    cmp r0, #0
1202 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1203 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1204 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1205 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1206 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1207 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1208 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1209 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1210 ; CHECK-MVE-NEXT:    cset r0, hi
1211 ; CHECK-MVE-NEXT:    cmp r0, #0
1212 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
1213 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1214 ; CHECK-MVE-NEXT:    cset r0, hi
1215 ; CHECK-MVE-NEXT:    cmp r0, #0
1216 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1217 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1218 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1219 ; CHECK-MVE-NEXT:    bx lr
1221 ; CHECK-MVEFP-LABEL: vcmp_ugt_v8f16:
1222 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1223 ; CHECK-MVEFP-NEXT:    vcmp.f16 lt, q1, q0
1224 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1225 ; CHECK-MVEFP-NEXT:    bx lr
1226 entry:
1227   %c = fcmp ugt <8 x half> %src, %src2
1228   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1229   ret <8 x half> %s
1232 define arm_aapcs_vfpcc <8 x half> @vcmp_uge_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1233 ; CHECK-MVE-LABEL: vcmp_uge_v8f16:
1234 ; CHECK-MVE:       @ %bb.0: @ %entry
1235 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1236 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1237 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1238 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1239 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1240 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1241 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1242 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1243 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1244 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1245 ; CHECK-MVE-NEXT:    cset r0, pl
1246 ; CHECK-MVE-NEXT:    cmp r0, #0
1247 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1248 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1249 ; CHECK-MVE-NEXT:    cset r0, pl
1250 ; CHECK-MVE-NEXT:    cmp r0, #0
1251 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1252 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1253 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1254 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1255 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1256 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1257 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1258 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1259 ; CHECK-MVE-NEXT:    cset r0, pl
1260 ; CHECK-MVE-NEXT:    cmp r0, #0
1261 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1262 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1263 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1264 ; CHECK-MVE-NEXT:    cset r0, pl
1265 ; CHECK-MVE-NEXT:    cmp r0, #0
1266 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1267 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1268 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1269 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1270 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1271 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1272 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1273 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1274 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1275 ; CHECK-MVE-NEXT:    cset r0, pl
1276 ; CHECK-MVE-NEXT:    cmp r0, #0
1277 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1278 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1279 ; CHECK-MVE-NEXT:    cset r0, pl
1280 ; CHECK-MVE-NEXT:    cmp r0, #0
1281 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1282 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1283 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1284 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1285 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1286 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1287 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1288 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1289 ; CHECK-MVE-NEXT:    cset r0, pl
1290 ; CHECK-MVE-NEXT:    cmp r0, #0
1291 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
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, s4
1297 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1298 ; CHECK-MVE-NEXT:    bx lr
1300 ; CHECK-MVEFP-LABEL: vcmp_uge_v8f16:
1301 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1302 ; CHECK-MVEFP-NEXT:    vcmp.f16 le, q1, q0
1303 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1304 ; CHECK-MVEFP-NEXT:    bx lr
1305 entry:
1306   %c = fcmp uge <8 x half> %src, %src2
1307   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1308   ret <8 x half> %s
1311 define arm_aapcs_vfpcc <8 x half> @vcmp_ult_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1312 ; CHECK-MVE-LABEL: vcmp_ult_v8f16:
1313 ; CHECK-MVE:       @ %bb.0: @ %entry
1314 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1315 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1316 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1317 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1318 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1319 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1320 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1321 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1322 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1323 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1324 ; CHECK-MVE-NEXT:    cset r0, lt
1325 ; CHECK-MVE-NEXT:    cmp r0, #0
1326 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1327 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1328 ; CHECK-MVE-NEXT:    cset r0, lt
1329 ; CHECK-MVE-NEXT:    cmp r0, #0
1330 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1331 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1332 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1333 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1334 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1335 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1336 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1337 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1338 ; CHECK-MVE-NEXT:    cset r0, lt
1339 ; CHECK-MVE-NEXT:    cmp r0, #0
1340 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1341 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1342 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1343 ; CHECK-MVE-NEXT:    cset r0, lt
1344 ; CHECK-MVE-NEXT:    cmp r0, #0
1345 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1346 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1347 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1348 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1349 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1350 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1351 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1352 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1353 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1354 ; CHECK-MVE-NEXT:    cset r0, lt
1355 ; CHECK-MVE-NEXT:    cmp r0, #0
1356 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1357 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1358 ; CHECK-MVE-NEXT:    cset r0, lt
1359 ; CHECK-MVE-NEXT:    cmp r0, #0
1360 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1361 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1362 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1363 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1364 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1365 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1366 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1367 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1368 ; CHECK-MVE-NEXT:    cset r0, lt
1369 ; CHECK-MVE-NEXT:    cmp r0, #0
1370 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
1371 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1372 ; CHECK-MVE-NEXT:    cset r0, lt
1373 ; CHECK-MVE-NEXT:    cmp r0, #0
1374 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1375 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1376 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1377 ; CHECK-MVE-NEXT:    bx lr
1379 ; CHECK-MVEFP-LABEL: vcmp_ult_v8f16:
1380 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1381 ; CHECK-MVEFP-NEXT:    vcmp.f16 lt, q0, q1
1382 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1383 ; CHECK-MVEFP-NEXT:    bx lr
1384 entry:
1385   %c = fcmp ult <8 x half> %src, %src2
1386   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1387   ret <8 x half> %s
1390 define arm_aapcs_vfpcc <8 x half> @vcmp_ule_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1391 ; CHECK-MVE-LABEL: vcmp_ule_v8f16:
1392 ; CHECK-MVE:       @ %bb.0: @ %entry
1393 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1394 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1395 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1396 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1397 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1398 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1399 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1400 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1401 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1402 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1403 ; CHECK-MVE-NEXT:    cset r0, le
1404 ; CHECK-MVE-NEXT:    cmp r0, #0
1405 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1406 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1407 ; CHECK-MVE-NEXT:    cset r0, le
1408 ; CHECK-MVE-NEXT:    cmp r0, #0
1409 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1410 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1411 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1412 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1413 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1414 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1415 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1416 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1417 ; CHECK-MVE-NEXT:    cset r0, le
1418 ; CHECK-MVE-NEXT:    cmp r0, #0
1419 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1420 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1421 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1422 ; CHECK-MVE-NEXT:    cset r0, le
1423 ; CHECK-MVE-NEXT:    cmp r0, #0
1424 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1425 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1426 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1427 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1428 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1429 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1430 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1431 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1432 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1433 ; CHECK-MVE-NEXT:    cset r0, le
1434 ; CHECK-MVE-NEXT:    cmp r0, #0
1435 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1436 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1437 ; CHECK-MVE-NEXT:    cset r0, le
1438 ; CHECK-MVE-NEXT:    cmp r0, #0
1439 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1440 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1441 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1442 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1443 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1444 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1445 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1446 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1447 ; CHECK-MVE-NEXT:    cset r0, le
1448 ; CHECK-MVE-NEXT:    cmp r0, #0
1449 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
1450 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1451 ; CHECK-MVE-NEXT:    cset r0, le
1452 ; CHECK-MVE-NEXT:    cmp r0, #0
1453 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1454 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1455 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1456 ; CHECK-MVE-NEXT:    bx lr
1458 ; CHECK-MVEFP-LABEL: vcmp_ule_v8f16:
1459 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1460 ; CHECK-MVEFP-NEXT:    vcmp.f16 le, q0, q1
1461 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1462 ; CHECK-MVEFP-NEXT:    bx lr
1463 entry:
1464   %c = fcmp ule <8 x half> %src, %src2
1465   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1466   ret <8 x half> %s
1469 define arm_aapcs_vfpcc <8 x half> @vcmp_ord_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1470 ; CHECK-MVE-LABEL: vcmp_ord_v8f16:
1471 ; CHECK-MVE:       @ %bb.0: @ %entry
1472 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1473 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1474 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1475 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1476 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1477 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1478 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1479 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1480 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1481 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1482 ; CHECK-MVE-NEXT:    cset r0, vc
1483 ; CHECK-MVE-NEXT:    cmp r0, #0
1484 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1485 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1486 ; CHECK-MVE-NEXT:    cset r0, vc
1487 ; CHECK-MVE-NEXT:    cmp r0, #0
1488 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1489 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1490 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1491 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1492 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1493 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1494 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1495 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1496 ; CHECK-MVE-NEXT:    cset r0, vc
1497 ; CHECK-MVE-NEXT:    cmp r0, #0
1498 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1499 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1500 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1501 ; CHECK-MVE-NEXT:    cset r0, vc
1502 ; CHECK-MVE-NEXT:    cmp r0, #0
1503 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1504 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1505 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1506 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1507 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1508 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1509 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1510 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1511 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1512 ; CHECK-MVE-NEXT:    cset r0, vc
1513 ; CHECK-MVE-NEXT:    cmp r0, #0
1514 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1515 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1516 ; CHECK-MVE-NEXT:    cset r0, vc
1517 ; CHECK-MVE-NEXT:    cmp r0, #0
1518 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1519 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1520 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1521 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1522 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1523 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1524 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1525 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1526 ; CHECK-MVE-NEXT:    cset r0, vc
1527 ; CHECK-MVE-NEXT:    cmp r0, #0
1528 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
1529 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1530 ; CHECK-MVE-NEXT:    cset r0, vc
1531 ; CHECK-MVE-NEXT:    cmp r0, #0
1532 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1533 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1534 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1535 ; CHECK-MVE-NEXT:    bx lr
1537 ; CHECK-MVEFP-LABEL: vcmp_ord_v8f16:
1538 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1539 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q1, q0
1540 ; CHECK-MVEFP-NEXT:    vcmpt.f16 lt, q0, q1
1541 ; CHECK-MVEFP-NEXT:    vpsel q0, q3, q2
1542 ; CHECK-MVEFP-NEXT:    bx lr
1543 entry:
1544   %c = fcmp ord <8 x half> %src, %src2
1545   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1546   ret <8 x half> %s
1549 define arm_aapcs_vfpcc <8 x half> @vcmp_uno_v8f16(<8 x half> %src, <8 x half> %src2, <8 x half> %a, <8 x half> %b) {
1550 ; CHECK-MVE-LABEL: vcmp_uno_v8f16:
1551 ; CHECK-MVE:       @ %bb.0: @ %entry
1552 ; CHECK-MVE-NEXT:    .vsave {d8, d9}
1553 ; CHECK-MVE-NEXT:    vpush {d8, d9}
1554 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s4
1555 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s0
1556 ; CHECK-MVE-NEXT:    vcmp.f16 s18, s16
1557 ; CHECK-MVE-NEXT:    vmovx.f16 s16, s8
1558 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1559 ; CHECK-MVE-NEXT:    vcmp.f16 s0, s4
1560 ; CHECK-MVE-NEXT:    vmovx.f16 s18, s12
1561 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
1562 ; CHECK-MVE-NEXT:    cset r0, vs
1563 ; CHECK-MVE-NEXT:    cmp r0, #0
1564 ; CHECK-MVE-NEXT:    vseleq.f16 s16, s18, s16
1565 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1566 ; CHECK-MVE-NEXT:    cset r0, vs
1567 ; CHECK-MVE-NEXT:    cmp r0, #0
1568 ; CHECK-MVE-NEXT:    vseleq.f16 s0, s12, s8
1569 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s1
1570 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1571 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
1572 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1573 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s13
1574 ; CHECK-MVE-NEXT:    vcmp.f16 s1, s5
1575 ; CHECK-MVE-NEXT:    vins.f16 s0, s16
1576 ; CHECK-MVE-NEXT:    cset r0, vs
1577 ; CHECK-MVE-NEXT:    cmp r0, #0
1578 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1579 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1580 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s2
1581 ; CHECK-MVE-NEXT:    cset r0, vs
1582 ; CHECK-MVE-NEXT:    cmp r0, #0
1583 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s13, s9
1584 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
1585 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
1586 ; CHECK-MVE-NEXT:    vcmp.f16 s8, s4
1587 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
1588 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1589 ; CHECK-MVE-NEXT:    vcmp.f16 s2, s6
1590 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s14
1591 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
1592 ; CHECK-MVE-NEXT:    cset r0, vs
1593 ; CHECK-MVE-NEXT:    cmp r0, #0
1594 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s4
1595 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1596 ; CHECK-MVE-NEXT:    cset r0, vs
1597 ; CHECK-MVE-NEXT:    cmp r0, #0
1598 ; CHECK-MVE-NEXT:    vseleq.f16 s2, s14, s10
1599 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
1600 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
1601 ; CHECK-MVE-NEXT:    vcmp.f16 s6, s4
1602 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
1603 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1604 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
1605 ; CHECK-MVE-NEXT:    vcmp.f16 s3, s7
1606 ; CHECK-MVE-NEXT:    cset r0, vs
1607 ; CHECK-MVE-NEXT:    cmp r0, #0
1608 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s4
1609 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
1610 ; CHECK-MVE-NEXT:    cset r0, vs
1611 ; CHECK-MVE-NEXT:    cmp r0, #0
1612 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s15, s11
1613 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
1614 ; CHECK-MVE-NEXT:    vpop {d8, d9}
1615 ; CHECK-MVE-NEXT:    bx lr
1617 ; CHECK-MVEFP-LABEL: vcmp_uno_v8f16:
1618 ; CHECK-MVEFP:       @ %bb.0: @ %entry
1619 ; CHECK-MVEFP-NEXT:    vpt.f16 le, q1, q0
1620 ; CHECK-MVEFP-NEXT:    vcmpt.f16 lt, q0, q1
1621 ; CHECK-MVEFP-NEXT:    vpsel q0, q2, q3
1622 ; CHECK-MVEFP-NEXT:    bx lr
1623 entry:
1624   %c = fcmp uno <8 x half> %src, %src2
1625   %s = select <8 x i1> %c, <8 x half> %a, <8 x half> %b
1626   ret <8 x half> %s