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