1 ; RUN: llc < %s -asm-verbose=false -mtriple=aarch64-none-eabi -mattr=-fullfp16 | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=CHECK-CVT --check-prefix=CHECK
2 ; RUN: llc < %s -asm-verbose=false -mtriple=aarch64-none-eabi -mattr=+fullfp16 | FileCheck -allow-deprecated-dag-overlap %s --check-prefix=CHECK-FP16 --check-prefix=CHECK
4 define <8 x half> @add_h(<8 x half> %a, <8 x half> %b) {
6 ; CHECK-CVT-LABEL: add_h:
40 ; CHECK-FP16-LABEL: add_h:
41 ; CHECK-FP16: fadd v0.8h, v0.8h, v1.8h
42 ; CHECK-FP16-NEXT: ret
44 %0 = fadd <8 x half> %a, %b
49 define <8 x half> @sub_h(<8 x half> %a, <8 x half> %b) {
51 ; CHECK-CVT-LABEL: sub_h:
85 ; CHECK-FP16-LABEL: sub_h:
86 ; CHECK-FP16: fsub v0.8h, v0.8h, v1.8h
87 ; CHECK-FP16-NEXT: ret
89 %0 = fsub <8 x half> %a, %b
94 define <8 x half> @mul_h(<8 x half> %a, <8 x half> %b) {
96 ; CHECK-CVT-LABEL: mul_h:
100 ; CHECK-CVT-DAG: fcvt
101 ; CHECK-CVT-DAG: fcvt
102 ; CHECK-CVT-DAG: fmul
103 ; CHECK-CVT-DAG: fcvt
104 ; CHECK-CVT-DAG: fcvt
105 ; CHECK-CVT-DAG: fmul
106 ; CHECK-CVT-DAG: fcvt
107 ; CHECK-CVT-DAG: fcvt
108 ; CHECK-CVT-DAG: fmul
109 ; CHECK-CVT-DAG: fcvt
110 ; CHECK-CVT-DAG: fcvt
111 ; CHECK-CVT-DAG: fmul
112 ; CHECK-CVT-DAG: fcvt
113 ; CHECK-CVT-DAG: fcvt
114 ; CHECK-CVT-DAG: fmul
115 ; CHECK-CVT-DAG: fcvt
116 ; CHECK-CVT-DAG: fcvt
117 ; CHECK-CVT-DAG: fmul
118 ; CHECK-CVT-DAG: fcvt
119 ; CHECK-CVT-DAG: fcvt
120 ; CHECK-CVT-DAG: fmul
121 ; CHECK-CVT-DAG: fcvt
122 ; CHECK-CVT-DAG: fcvt
123 ; CHECK-CVT-DAG: fcvt
124 ; CHECK-CVT-DAG: fcvt
125 ; CHECK-CVT-DAG: fcvt
126 ; CHECK-CVT-DAG: fcvt
127 ; CHECK-CVT-DAG: fcvt
130 ; CHECK-FP16-LABEL: mul_h:
131 ; CHECK-FP16: fmul v0.8h, v0.8h, v1.8h
132 ; CHECK-FP16-NEXT: ret
134 %0 = fmul <8 x half> %a, %b
139 define <8 x half> @div_h(<8 x half> %a, <8 x half> %b) {
141 ; CHECK-CVT-LABEL: div_h:
144 ; CHECK-CVT-DAG: fdiv
145 ; CHECK-CVT-DAG: fcvt
146 ; CHECK-CVT-DAG: fcvt
147 ; CHECK-CVT-DAG: fdiv
148 ; CHECK-CVT-DAG: fcvt
149 ; CHECK-CVT-DAG: fcvt
150 ; CHECK-CVT-DAG: fdiv
151 ; CHECK-CVT-DAG: fcvt
152 ; CHECK-CVT-DAG: fcvt
153 ; CHECK-CVT-DAG: fdiv
154 ; CHECK-CVT-DAG: fcvt
155 ; CHECK-CVT-DAG: fcvt
156 ; CHECK-CVT-DAG: fdiv
157 ; CHECK-CVT-DAG: fcvt
158 ; CHECK-CVT-DAG: fcvt
159 ; CHECK-CVT-DAG: fdiv
160 ; CHECK-CVT-DAG: fcvt
161 ; CHECK-CVT-DAG: fcvt
162 ; CHECK-CVT-DAG: fdiv
163 ; CHECK-CVT-DAG: fcvt
164 ; CHECK-CVT-DAG: fcvt
165 ; CHECK-CVT-DAG: fdiv
166 ; CHECK-CVT-DAG: fcvt
167 ; CHECK-CVT-DAG: fcvt
168 ; CHECK-CVT-DAG: fcvt
169 ; CHECK-CVT-DAG: fcvt
170 ; CHECK-CVT-DAG: fcvt
171 ; CHECK-CVT-DAG: fcvt
172 ; CHECK-CVT-DAG: fcvt
175 ; CHECK-FP16-LABEL: div_h:
176 ; CHECK-FP16: fdiv v0.8h, v0.8h, v1.8h
177 ; CHECK-FP16-NEXT: ret
179 %0 = fdiv <8 x half> %a, %b
184 define <8 x half> @load_h(<8 x half>* %a) {
186 ; CHECK-LABEL: load_h:
187 ; CHECK: ldr q0, [x0]
188 %0 = load <8 x half>, <8 x half>* %a, align 4
193 define void @store_h(<8 x half>* %a, <8 x half> %b) {
195 ; CHECK-LABEL: store_h:
196 ; CHECK: str q0, [x0]
197 store <8 x half> %b, <8 x half>* %a, align 4
201 define <8 x half> @s_to_h(<8 x float> %a) {
202 ; CHECK-LABEL: s_to_h:
203 ; CHECK-DAG: fcvtn v0.4h, v0.4s
204 ; CHECK-DAG: fcvtn [[REG:v[0-9+]]].4h, v1.4s
205 ; CHECK: mov v0.d[1], [[REG]].d[0]
206 %1 = fptrunc <8 x float> %a to <8 x half>
210 define <8 x half> @d_to_h(<8 x double> %a) {
211 ; CHECK-LABEL: d_to_h:
212 ; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1]
213 ; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1]
214 ; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1]
215 ; CHECK-DAG: mov d{{[0-9]+}}, v{{[0-9]+}}.d[1]
224 ; CHECK-DAG: mov v{{[0-9]+}}.h
225 ; CHECK-DAG: mov v{{[0-9]+}}.h
226 ; CHECK-DAG: mov v{{[0-9]+}}.h
227 ; CHECK-DAG: mov v{{[0-9]+}}.h
228 ; CHECK-DAG: mov v{{[0-9]+}}.h
229 ; CHECK-DAG: mov v{{[0-9]+}}.h
230 ; CHECK-DAG: mov v{{[0-9]+}}.h
231 ; CHECK-DAG: mov v{{[0-9]+}}.h
232 %1 = fptrunc <8 x double> %a to <8 x half>
236 define <8 x float> @h_to_s(<8 x half> %a) {
237 ; CHECK-LABEL: h_to_s:
238 ; CHECK: fcvtl2 v1.4s, v0.8h
239 ; CHECK: fcvtl v0.4s, v0.4h
240 %1 = fpext <8 x half> %a to <8 x float>
244 define <8 x double> @h_to_d(<8 x half> %a) {
245 ; CHECK-LABEL: h_to_d:
246 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
247 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
248 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
249 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
250 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
251 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
252 ; CHECK-DAG: mov h{{[0-9]+}}, v0.h
261 %1 = fpext <8 x half> %a to <8 x double>
266 define <8 x half> @bitcast_i_to_h(float, <8 x i16> %a) {
267 ; CHECK-LABEL: bitcast_i_to_h:
268 ; CHECK: mov v0.16b, v1.16b
269 %2 = bitcast <8 x i16> %a to <8 x half>
273 define <8 x i16> @bitcast_h_to_i(float, <8 x half> %a) {
274 ; CHECK-LABEL: bitcast_h_to_i:
275 ; CHECK: mov v0.16b, v1.16b
276 %2 = bitcast <8 x half> %a to <8 x i16>
281 define <8 x half> @sitofp_i8(<8 x i8> %a) #0 {
282 ; CHECK-LABEL: sitofp_i8:
283 ; CHECK-NEXT: sshll v[[REG1:[0-9]+]].8h, v0.8b, #0
284 ; CHECK-NEXT: sshll2 [[LO:v[0-9]+\.4s]], v[[REG1]].8h, #0
285 ; CHECK-NEXT: sshll [[HI:v[0-9]+\.4s]], v[[REG1]].4h, #0
286 ; CHECK-DAG: scvtf [[HIF:v[0-9]+\.4s]], [[HI]]
287 ; CHECK-DAG: scvtf [[LOF:v[0-9]+\.4s]], [[LO]]
288 ; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]]
289 ; CHECK-DAG: fcvtn v0.4h, [[HIF]]
290 ; CHECK: mov v0.d[1], v[[LOREG]].d[0]
291 %1 = sitofp <8 x i8> %a to <8 x half>
296 define <8 x half> @sitofp_i16(<8 x i16> %a) #0 {
297 ; CHECK-LABEL: sitofp_i16:
298 ; CHECK-NEXT: sshll2 [[LO:v[0-9]+\.4s]], v0.8h, #0
299 ; CHECK-NEXT: sshll [[HI:v[0-9]+\.4s]], v0.4h, #0
300 ; CHECK-DAG: scvtf [[HIF:v[0-9]+\.4s]], [[HI]]
301 ; CHECK-DAG: scvtf [[LOF:v[0-9]+\.4s]], [[LO]]
302 ; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]]
303 ; CHECK-DAG: fcvtn v0.4h, [[HIF]]
304 ; CHECK: mov v0.d[1], v[[LOREG]].d[0]
305 %1 = sitofp <8 x i16> %a to <8 x half>
310 define <8 x half> @sitofp_i32(<8 x i32> %a) #0 {
311 ; CHECK-LABEL: sitofp_i32:
312 ; CHECK-DAG: scvtf [[OP1:v[0-9]+\.4s]], v0.4s
313 ; CHECK-DAG: scvtf [[OP2:v[0-9]+\.4s]], v1.4s
314 ; CHECK-DAG: fcvtn v[[REG:[0-9]+]].4h, [[OP2]]
315 ; CHECK-DAG: fcvtn v0.4h, [[OP1]]
316 ; CHECK: mov v0.d[1], v[[REG]].d[0]
317 %1 = sitofp <8 x i32> %a to <8 x half>
322 define <8 x half> @sitofp_i64(<8 x i64> %a) #0 {
323 ; CHECK-LABEL: sitofp_i64:
324 ; CHECK-DAG: scvtf [[OP1:v[0-9]+\.2d]], v0.2d
325 ; CHECK-DAG: scvtf [[OP2:v[0-9]+\.2d]], v1.2d
326 ; CHECK-DAG: fcvtn [[OP3:v[0-9]+]].2s, [[OP1]]
327 ; CHECK-DAG: fcvtn2 [[OP3]].4s, [[OP2]]
328 ; CHECK: fcvtn v0.4h, [[OP3]].4s
329 %1 = sitofp <8 x i64> %a to <8 x half>
333 define <8 x half> @uitofp_i8(<8 x i8> %a) #0 {
334 ; CHECK-LABEL: uitofp_i8:
335 ; CHECK-NEXT: ushll v[[REG1:[0-9]+]].8h, v0.8b, #0
336 ; CHECK-NEXT: ushll2 [[LO:v[0-9]+\.4s]], v[[REG1]].8h, #0
337 ; CHECK-NEXT: ushll [[HI:v[0-9]+\.4s]], v[[REG1]].4h, #0
338 ; CHECK-DAG: ucvtf [[HIF:v[0-9]+\.4s]], [[HI]]
339 ; CHECK-DAG: ucvtf [[LOF:v[0-9]+\.4s]], [[LO]]
340 ; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]]
341 ; CHECK-DAG: fcvtn v0.4h, [[HIF]]
342 ; CHECK: mov v0.d[1], v[[LOREG]].d[0]
343 %1 = uitofp <8 x i8> %a to <8 x half>
348 define <8 x half> @uitofp_i16(<8 x i16> %a) #0 {
349 ; CHECK-LABEL: uitofp_i16:
350 ; CHECK-NEXT: ushll2 [[LO:v[0-9]+\.4s]], v0.8h, #0
351 ; CHECK-NEXT: ushll [[HI:v[0-9]+\.4s]], v0.4h, #0
352 ; CHECK-DAG: ucvtf [[HIF:v[0-9]+\.4s]], [[HI]]
353 ; CHECK-DAG: ucvtf [[LOF:v[0-9]+\.4s]], [[LO]]
354 ; CHECK-DAG: fcvtn v[[LOREG:[0-9]+]].4h, [[LOF]]
355 ; CHECK-DAG: fcvtn v0.4h, [[HIF]]
356 ; CHECK: mov v0.d[1], v[[LOREG]].d[0]
357 %1 = uitofp <8 x i16> %a to <8 x half>
362 define <8 x half> @uitofp_i32(<8 x i32> %a) #0 {
363 ; CHECK-LABEL: uitofp_i32:
364 ; CHECK-DAG: ucvtf [[OP1:v[0-9]+\.4s]], v0.4s
365 ; CHECK-DAG: ucvtf [[OP2:v[0-9]+\.4s]], v1.4s
366 ; CHECK-DAG: fcvtn v[[REG:[0-9]+]].4h, [[OP2]]
367 ; CHECK-DAG: fcvtn v0.4h, [[OP1]]
368 ; CHECK: mov v0.d[1], v[[REG]].d[0]
369 %1 = uitofp <8 x i32> %a to <8 x half>
374 define <8 x half> @uitofp_i64(<8 x i64> %a) #0 {
375 ; CHECK-LABEL: uitofp_i64:
376 ; CHECK-DAG: ucvtf [[OP1:v[0-9]+\.2d]], v0.2d
377 ; CHECK-DAG: ucvtf [[OP2:v[0-9]+\.2d]], v1.2d
378 ; CHECK-DAG: fcvtn [[OP3:v[0-9]+]].2s, [[OP1]]
379 ; CHECK-DAG: fcvtn2 [[OP3]].4s, [[OP2]]
380 ; CHECK: fcvtn v0.4h, [[OP3]].4s
381 %1 = uitofp <8 x i64> %a to <8 x half>
385 define void @test_insert_at_zero(half %a, <8 x half>* %b) #0 {
386 ; CHECK-LABEL: test_insert_at_zero:
387 ; CHECK-NEXT: str q0, [x0]
389 %1 = insertelement <8 x half> undef, half %a, i64 0
390 store <8 x half> %1, <8 x half>* %b, align 4
394 define <8 x i8> @fptosi_i8(<8 x half> %a) #0 {
395 ; CHECK-LABEL: fptosi_i8:
396 ; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h
397 ; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h
398 ; CHECK-DAG: fcvtzs [[LOF32:v[0-9]+\.4s]], [[LO]]
399 ; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]]
400 ; CHECK-DAG: fcvtzs [[HIF32:v[0-9]+\.4s]], [[HI]]
401 ; CHECK-DAG: xtn2 [[I16]].8h, [[HIF32]]
402 ; CHECK-NEXT: xtn v0.8b, [[I16]].8h
404 %1 = fptosi<8 x half> %a to <8 x i8>
408 define <8 x i16> @fptosi_i16(<8 x half> %a) #0 {
409 ; CHECK-LABEL: fptosi_i16:
410 ; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h
411 ; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h
412 ; CHECK-DAG: fcvtzs [[LOF32:v[0-9]+\.4s]], [[LO]]
413 ; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]]
414 ; CHECK-DAG: fcvtzs [[HIF32:v[0-9]+\.4s]], [[HI]]
415 ; CHECK-NEXT: xtn2 [[I16]].8h, [[HIF32]]
417 %1 = fptosi<8 x half> %a to <8 x i16>
421 define <8 x i8> @fptoui_i8(<8 x half> %a) #0 {
422 ; CHECK-LABEL: fptoui_i8:
423 ; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h
424 ; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h
425 ; CHECK-DAG: fcvtzu [[LOF32:v[0-9]+\.4s]], [[LO]]
426 ; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]]
427 ; CHECK-DAG: fcvtzu [[HIF32:v[0-9]+\.4s]], [[HI]]
428 ; CHECK-DAG: xtn2 [[I16]].8h, [[HIF32]]
429 ; CHECK-NEXT: xtn v0.8b, [[I16]].8h
431 %1 = fptoui<8 x half> %a to <8 x i8>
435 define <8 x i16> @fptoui_i16(<8 x half> %a) #0 {
436 ; CHECK-LABEL: fptoui_i16:
437 ; CHECK-DAG: fcvtl [[LO:v[0-9]+\.4s]], v0.4h
438 ; CHECK-DAG: fcvtl2 [[HI:v[0-9]+\.4s]], v0.8h
439 ; CHECK-DAG: fcvtzu [[LOF32:v[0-9]+\.4s]], [[LO]]
440 ; CHECK-DAG: xtn [[I16:v[0-9]+]].4h, [[LOF32]]
441 ; CHECK-DAG: fcvtzu [[HIF32:v[0-9]+\.4s]], [[HI]]
442 ; CHECK-NEXT: xtn2 [[I16]].8h, [[HIF32]]
444 %1 = fptoui<8 x half> %a to <8 x i16>
448 define <8 x i1> @test_fcmp_une(<8 x half> %a, <8 x half> %b) #0 {
449 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
451 ; CHECK-FP16-LABEL: test_fcmp_une:
452 ; CHECK-FP16-NOT: fcvt
453 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
454 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
455 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
456 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
457 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
458 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
459 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
460 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
462 %1 = fcmp une <8 x half> %a, %b
466 define <8 x i1> @test_fcmp_ueq(<8 x half> %a, <8 x half> %b) #0 {
467 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
469 ; CHECK-FP16-LABEL: test_fcmp_ueq:
470 ; CHECK-FP16-NOT: fcvt
471 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
472 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
473 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
474 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
475 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
476 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
477 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
478 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
480 %1 = fcmp ueq <8 x half> %a, %b
484 define <8 x i1> @test_fcmp_ugt(<8 x half> %a, <8 x half> %b) #0 {
485 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
487 ; CHECK-FP16-LABEL: test_fcmp_ugt:
488 ; CHECK-FP16-NOT: fcvt
489 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
490 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
491 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
492 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
493 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
494 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
495 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
496 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
498 %1 = fcmp ugt <8 x half> %a, %b
502 define <8 x i1> @test_fcmp_uge(<8 x half> %a, <8 x half> %b) #0 {
503 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
505 ; CHECK-FP16-LABEL: test_fcmp_uge:
506 ; CHECK-FP16-NOT: fcvt
507 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
508 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
509 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
510 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
511 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
512 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
513 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
514 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
516 %1 = fcmp uge <8 x half> %a, %b
520 define <8 x i1> @test_fcmp_ult(<8 x half> %a, <8 x half> %b) #0 {
521 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
523 ; CHECK-FP16-LABEL: test_fcmp_ult:
524 ; CHECK-FP16-NOT: fcvt
525 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
526 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
527 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
528 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
529 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
530 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
531 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
532 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
534 %1 = fcmp ult <8 x half> %a, %b
538 define <8 x i1> @test_fcmp_ule(<8 x half> %a, <8 x half> %b) #0 {
539 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
541 ; CHECK-FP16-LABEL: test_fcmp_ule:
542 ; CHECK-FP16-NOT: fcvt
543 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
544 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
545 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
546 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
547 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
548 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
549 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
550 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
552 %1 = fcmp ule <8 x half> %a, %b
556 define <8 x i1> @test_fcmp_uno(<8 x half> %a, <8 x half> %b) #0 {
557 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
559 ; CHECK-FP16-LABEL: test_fcmp_uno:
560 ; CHECK-FP16-NOT: fcvt
561 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
562 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
563 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
564 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
565 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
566 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
567 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
568 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
570 %1 = fcmp uno <8 x half> %a, %b
574 define <8 x i1> @test_fcmp_one(<8 x half> %a, <8 x half> %b) #0 {
575 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
577 ; CHECK-FP16-LABEL: test_fcmp_one:
578 ; CHECK-FP16-NOT: fcvt
579 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
580 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
581 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
582 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
583 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
584 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
585 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
586 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
588 %1 = fcmp one <8 x half> %a, %b
592 define <8 x i1> @test_fcmp_oeq(<8 x half> %a, <8 x half> %b) #0 {
593 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
595 ; CHECK-FP16-LABEL: test_fcmp_oeq:
596 ; CHECK-FP16-NOT: fcvt
597 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
598 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
599 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
600 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
601 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
602 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
603 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
604 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
606 %1 = fcmp oeq <8 x half> %a, %b
610 define <8 x i1> @test_fcmp_ogt(<8 x half> %a, <8 x half> %b) #0 {
611 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
613 ; CHECK-FP16-LABEL: test_fcmp_ogt:
614 ; CHECK-FP16-NOT: fcvt
615 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
616 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
617 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
618 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
619 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
620 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
621 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
622 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
624 %1 = fcmp ogt <8 x half> %a, %b
628 define <8 x i1> @test_fcmp_oge(<8 x half> %a, <8 x half> %b) #0 {
629 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
631 ; CHECK-FP16-LABEL: test_fcmp_oge:
632 ; CHECK-FP16-NOT: fcvt
633 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
634 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
635 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
636 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
637 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
638 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
639 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
640 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
642 %1 = fcmp oge <8 x half> %a, %b
646 define <8 x i1> @test_fcmp_olt(<8 x half> %a, <8 x half> %b) #0 {
647 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
649 ; CHECK-FP16-LABEL: test_fcmp_olt:
650 ; CHECK-FP16-NOT: fcvt
651 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
652 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
653 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
654 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
655 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
656 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
657 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
658 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
660 %1 = fcmp olt <8 x half> %a, %b
664 define <8 x i1> @test_fcmp_ole(<8 x half> %a, <8 x half> %b) #0 {
665 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
667 ; CHECK-FP16-LABEL: test_fcmp_ole:
668 ; CHECK-FP16-NOT: fcvt
669 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
670 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
671 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
672 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
673 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
674 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
675 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
676 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
678 %1 = fcmp ole <8 x half> %a, %b
682 define <8 x i1> @test_fcmp_ord(<8 x half> %a, <8 x half> %b) #0 {
683 ; FileCheck checks are unwieldy with 16 fcvt and 8 csel tests, so skipped for -fullfp16.
685 ; CHECK-FP16-LABEL: test_fcmp_ord:
686 ; CHECK-FP16-NOT: fcvt
687 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
688 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
689 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
690 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
691 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
692 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
693 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
694 ; CHECK-FP16-DAG: fcmp h{{[0-9]}}, h{{[0-9]}}
696 %1 = fcmp ord <8 x half> %a, %b
700 attributes #0 = { nounwind }