Skip to content

Commit c6258a2

Browse files
committed
[AArch64] Add missing tests for i8 vector to half conversions.
1 parent fbf665a commit c6258a2

File tree

1 file changed

+88
-5
lines changed

1 file changed

+88
-5
lines changed

llvm/test/CodeGen/AArch64/fp16-v8-instructions.ll

Lines changed: 88 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,28 @@ define <8 x i16> @bitcast_h_to_i(float, <8 x half> %a) {
393393
ret <8 x i16> %2
394394
}
395395

396+
define <4 x half> @sitofp_v4i8(<4 x i8> %a) #0 {
397+
; CHECK-CVT-LABEL: sitofp_v4i8:
398+
; CHECK-CVT: // %bb.0:
399+
; CHECK-CVT-NEXT: shl v0.4h, v0.4h, #8
400+
; CHECK-CVT-NEXT: sshr v0.4h, v0.4h, #8
401+
; CHECK-CVT-NEXT: sshll v0.4s, v0.4h, #0
402+
; CHECK-CVT-NEXT: scvtf v0.4s, v0.4s
403+
; CHECK-CVT-NEXT: fcvtn v0.4h, v0.4s
404+
; CHECK-CVT-NEXT: ret
405+
;
406+
; CHECK-FP16-LABEL: sitofp_v4i8:
407+
; CHECK-FP16: // %bb.0:
408+
; CHECK-FP16-NEXT: shl v0.4h, v0.4h, #8
409+
; CHECK-FP16-NEXT: sshr v0.4h, v0.4h, #8
410+
; CHECK-FP16-NEXT: scvtf v0.4h, v0.4h
411+
; CHECK-FP16-NEXT: ret
412+
%1 = sitofp <4 x i8> %a to <4 x half>
413+
ret <4 x half> %1
414+
}
396415

397-
define <8 x half> @sitofp_i8(<8 x i8> %a) #0 {
398-
; CHECK-LABEL: sitofp_i8:
416+
define <8 x half> @sitofp_v8i8(<8 x i8> %a) #0 {
417+
; CHECK-LABEL: sitofp_v8i8:
399418
; CHECK: // %bb.0:
400419
; CHECK-NEXT: sshll v0.8h, v0.8b, #0
401420
; CHECK-NEXT: sshll2 v1.4s, v0.8h, #0
@@ -410,6 +429,29 @@ define <8 x half> @sitofp_i8(<8 x i8> %a) #0 {
410429
ret <8 x half> %1
411430
}
412431

432+
define <16 x half> @sitofp_v16i8(<16 x i8> %a) #0 {
433+
; CHECK-LABEL: sitofp_v16i8:
434+
; CHECK: // %bb.0:
435+
; CHECK-NEXT: sshll2 v1.8h, v0.16b, #0
436+
; CHECK-NEXT: sshll v0.8h, v0.8b, #0
437+
; CHECK-NEXT: sshll2 v2.4s, v1.8h, #0
438+
; CHECK-NEXT: sshll v1.4s, v1.4h, #0
439+
; CHECK-NEXT: sshll2 v3.4s, v0.8h, #0
440+
; CHECK-NEXT: sshll v0.4s, v0.4h, #0
441+
; CHECK-NEXT: scvtf v2.4s, v2.4s
442+
; CHECK-NEXT: scvtf v1.4s, v1.4s
443+
; CHECK-NEXT: scvtf v3.4s, v3.4s
444+
; CHECK-NEXT: scvtf v0.4s, v0.4s
445+
; CHECK-NEXT: fcvtn v2.4h, v2.4s
446+
; CHECK-NEXT: fcvtn v1.4h, v1.4s
447+
; CHECK-NEXT: fcvtn v3.4h, v3.4s
448+
; CHECK-NEXT: fcvtn v0.4h, v0.4s
449+
; CHECK-NEXT: mov v1.d[1], v2.d[0]
450+
; CHECK-NEXT: mov v0.d[1], v3.d[0]
451+
; CHECK-NEXT: ret
452+
%1 = sitofp <16 x i8> %a to <16 x half>
453+
ret <16 x half> %1
454+
}
413455

414456
define <8 x half> @sitofp_i16(<8 x i16> %a) #0 {
415457
; CHECK-CVT-LABEL: sitofp_i16:
@@ -431,7 +473,6 @@ define <8 x half> @sitofp_i16(<8 x i16> %a) #0 {
431473
ret <8 x half> %1
432474
}
433475

434-
435476
define <8 x half> @sitofp_i32(<8 x i32> %a) #0 {
436477
; CHECK-LABEL: sitofp_i32:
437478
; CHECK: // %bb.0:
@@ -465,8 +506,26 @@ define <8 x half> @sitofp_i64(<8 x i64> %a) #0 {
465506
ret <8 x half> %1
466507
}
467508

468-
define <8 x half> @uitofp_i8(<8 x i8> %a) #0 {
469-
; CHECK-LABEL: uitofp_i8:
509+
define <4 x half> @uitofp_v4i8(<4 x i8> %a) #0 {
510+
; CHECK-CVT-LABEL: uitofp_v4i8:
511+
; CHECK-CVT: // %bb.0:
512+
; CHECK-CVT-NEXT: bic v0.4h, #255, lsl #8
513+
; CHECK-CVT-NEXT: ushll v0.4s, v0.4h, #0
514+
; CHECK-CVT-NEXT: ucvtf v0.4s, v0.4s
515+
; CHECK-CVT-NEXT: fcvtn v0.4h, v0.4s
516+
; CHECK-CVT-NEXT: ret
517+
;
518+
; CHECK-FP16-LABEL: uitofp_v4i8:
519+
; CHECK-FP16: // %bb.0:
520+
; CHECK-FP16-NEXT: bic v0.4h, #255, lsl #8
521+
; CHECK-FP16-NEXT: ucvtf v0.4h, v0.4h
522+
; CHECK-FP16-NEXT: ret
523+
%1 = uitofp <4 x i8> %a to <4 x half>
524+
ret <4 x half> %1
525+
}
526+
527+
define <8 x half> @uitofp_v8i8(<8 x i8> %a) #0 {
528+
; CHECK-LABEL: uitofp_v8i8:
470529
; CHECK: // %bb.0:
471530
; CHECK-NEXT: ushll v0.8h, v0.8b, #0
472531
; CHECK-NEXT: ushll2 v1.4s, v0.8h, #0
@@ -481,6 +540,30 @@ define <8 x half> @uitofp_i8(<8 x i8> %a) #0 {
481540
ret <8 x half> %1
482541
}
483542

543+
define <16 x half> @uitofp_v16i8(<16 x i8> %a) #0 {
544+
; CHECK-LABEL: uitofp_v16i8:
545+
; CHECK: // %bb.0:
546+
; CHECK-NEXT: ushll2 v1.8h, v0.16b, #0
547+
; CHECK-NEXT: ushll v0.8h, v0.8b, #0
548+
; CHECK-NEXT: ushll2 v2.4s, v1.8h, #0
549+
; CHECK-NEXT: ushll v1.4s, v1.4h, #0
550+
; CHECK-NEXT: ushll2 v3.4s, v0.8h, #0
551+
; CHECK-NEXT: ushll v0.4s, v0.4h, #0
552+
; CHECK-NEXT: ucvtf v2.4s, v2.4s
553+
; CHECK-NEXT: ucvtf v1.4s, v1.4s
554+
; CHECK-NEXT: ucvtf v3.4s, v3.4s
555+
; CHECK-NEXT: ucvtf v0.4s, v0.4s
556+
; CHECK-NEXT: fcvtn v2.4h, v2.4s
557+
; CHECK-NEXT: fcvtn v1.4h, v1.4s
558+
; CHECK-NEXT: fcvtn v3.4h, v3.4s
559+
; CHECK-NEXT: fcvtn v0.4h, v0.4s
560+
; CHECK-NEXT: mov v1.d[1], v2.d[0]
561+
; CHECK-NEXT: mov v0.d[1], v3.d[0]
562+
; CHECK-NEXT: ret
563+
%1 = uitofp <16 x i8> %a to <16 x half>
564+
ret <16 x half> %1
565+
}
566+
484567

485568
define <8 x half> @uitofp_i16(<8 x i16> %a) #0 {
486569
; CHECK-CVT-LABEL: uitofp_i16:

0 commit comments

Comments
 (0)