@@ -321,20 +321,20 @@ entry:
321
321
ret <4 x i32 > %conv6
322
322
}
323
323
324
- define <4 x i32 > @utesth_f16i32 (<4 x half > %x ) {
325
- ; CHECK-CVT-SD-LABEL: utesth_f16i32 :
324
+ define <4 x i32 > @utest_f16i32 (<4 x half > %x ) {
325
+ ; CHECK-CVT-SD-LABEL: utest_f16i32 :
326
326
; CHECK-CVT-SD: // %bb.0: // %entry
327
327
; CHECK-CVT-SD-NEXT: fcvtl v0.4s, v0.4h
328
328
; CHECK-CVT-SD-NEXT: fcvtzu v0.4s, v0.4s
329
329
; CHECK-CVT-SD-NEXT: ret
330
330
;
331
- ; CHECK-FP16-SD-LABEL: utesth_f16i32 :
331
+ ; CHECK-FP16-SD-LABEL: utest_f16i32 :
332
332
; CHECK-FP16-SD: // %bb.0: // %entry
333
333
; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h
334
334
; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s
335
335
; CHECK-FP16-SD-NEXT: ret
336
336
;
337
- ; CHECK-CVT-GI-LABEL: utesth_f16i32 :
337
+ ; CHECK-CVT-GI-LABEL: utest_f16i32 :
338
338
; CHECK-CVT-GI: // %bb.0: // %entry
339
339
; CHECK-CVT-GI-NEXT: fcvtl v0.4s, v0.4h
340
340
; CHECK-CVT-GI-NEXT: movi v1.2d, #0x000000ffffffff
@@ -349,7 +349,7 @@ define <4 x i32> @utesth_f16i32(<4 x half> %x) {
349
349
; CHECK-CVT-GI-NEXT: uzp1 v0.4s, v2.4s, v0.4s
350
350
; CHECK-CVT-GI-NEXT: ret
351
351
;
352
- ; CHECK-FP16-GI-LABEL: utesth_f16i32 :
352
+ ; CHECK-FP16-GI-LABEL: utest_f16i32 :
353
353
; CHECK-FP16-GI: // %bb.0: // %entry
354
354
; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
355
355
; CHECK-FP16-GI-NEXT: mov h2, v0.h[1]
@@ -614,8 +614,8 @@ entry:
614
614
ret <8 x i16 > %conv6
615
615
}
616
616
617
- define <8 x i16 > @utesth_f16i16 (<8 x half > %x ) {
618
- ; CHECK-CVT-LABEL: utesth_f16i16 :
617
+ define <8 x i16 > @utest_f16i16 (<8 x half > %x ) {
618
+ ; CHECK-CVT-LABEL: utest_f16i16 :
619
619
; CHECK-CVT: // %bb.0: // %entry
620
620
; CHECK-CVT-NEXT: fcvtl v1.4s, v0.4h
621
621
; CHECK-CVT-NEXT: fcvtl2 v0.4s, v0.8h
@@ -625,12 +625,12 @@ define <8 x i16> @utesth_f16i16(<8 x half> %x) {
625
625
; CHECK-CVT-NEXT: uqxtn2 v0.8h, v2.4s
626
626
; CHECK-CVT-NEXT: ret
627
627
;
628
- ; CHECK-FP16-SD-LABEL: utesth_f16i16 :
628
+ ; CHECK-FP16-SD-LABEL: utest_f16i16 :
629
629
; CHECK-FP16-SD: // %bb.0: // %entry
630
630
; CHECK-FP16-SD-NEXT: fcvtzu v0.8h, v0.8h
631
631
; CHECK-FP16-SD-NEXT: ret
632
632
;
633
- ; CHECK-FP16-GI-LABEL: utesth_f16i16 :
633
+ ; CHECK-FP16-GI-LABEL: utest_f16i16 :
634
634
; CHECK-FP16-GI: // %bb.0: // %entry
635
635
; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h
636
636
; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h
@@ -1746,8 +1746,8 @@ entry:
1746
1746
ret <2 x i64 > %conv6
1747
1747
}
1748
1748
1749
- define <2 x i64 > @utesth_f16i64 (<2 x half > %x ) {
1750
- ; CHECK-CVT-SD-LABEL: utesth_f16i64 :
1749
+ define <2 x i64 > @utest_f16i64 (<2 x half > %x ) {
1750
+ ; CHECK-CVT-SD-LABEL: utest_f16i64 :
1751
1751
; CHECK-CVT-SD: // %bb.0: // %entry
1752
1752
; CHECK-CVT-SD-NEXT: sub sp, sp, #48
1753
1753
; CHECK-CVT-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
@@ -1777,7 +1777,7 @@ define <2 x i64> @utesth_f16i64(<2 x half> %x) {
1777
1777
; CHECK-CVT-SD-NEXT: add sp, sp, #48
1778
1778
; CHECK-CVT-SD-NEXT: ret
1779
1779
;
1780
- ; CHECK-FP16-SD-LABEL: utesth_f16i64 :
1780
+ ; CHECK-FP16-SD-LABEL: utest_f16i64 :
1781
1781
; CHECK-FP16-SD: // %bb.0: // %entry
1782
1782
; CHECK-FP16-SD-NEXT: sub sp, sp, #48
1783
1783
; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
@@ -1807,7 +1807,7 @@ define <2 x i64> @utesth_f16i64(<2 x half> %x) {
1807
1807
; CHECK-FP16-SD-NEXT: add sp, sp, #48
1808
1808
; CHECK-FP16-SD-NEXT: ret
1809
1809
;
1810
- ; CHECK-CVT-GI-LABEL: utesth_f16i64 :
1810
+ ; CHECK-CVT-GI-LABEL: utest_f16i64 :
1811
1811
; CHECK-CVT-GI: // %bb.0: // %entry
1812
1812
; CHECK-CVT-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1813
1813
; CHECK-CVT-GI-NEXT: mov h1, v0.h[1]
@@ -1819,7 +1819,7 @@ define <2 x i64> @utesth_f16i64(<2 x half> %x) {
1819
1819
; CHECK-CVT-GI-NEXT: mov v0.d[1], x9
1820
1820
; CHECK-CVT-GI-NEXT: ret
1821
1821
;
1822
- ; CHECK-FP16-GI-LABEL: utesth_f16i64 :
1822
+ ; CHECK-FP16-GI-LABEL: utest_f16i64 :
1823
1823
; CHECK-FP16-GI: // %bb.0: // %entry
1824
1824
; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1825
1825
; CHECK-FP16-GI-NEXT: mov h1, v0.h[1]
@@ -2307,20 +2307,20 @@ entry:
2307
2307
ret <4 x i32 > %conv6
2308
2308
}
2309
2309
2310
- define <4 x i32 > @utesth_f16i32_mm (<4 x half > %x ) {
2311
- ; CHECK-CVT-SD-LABEL: utesth_f16i32_mm :
2310
+ define <4 x i32 > @utest_f16i32_mm (<4 x half > %x ) {
2311
+ ; CHECK-CVT-SD-LABEL: utest_f16i32_mm :
2312
2312
; CHECK-CVT-SD: // %bb.0: // %entry
2313
2313
; CHECK-CVT-SD-NEXT: fcvtl v0.4s, v0.4h
2314
2314
; CHECK-CVT-SD-NEXT: fcvtzu v0.4s, v0.4s
2315
2315
; CHECK-CVT-SD-NEXT: ret
2316
2316
;
2317
- ; CHECK-FP16-SD-LABEL: utesth_f16i32_mm :
2317
+ ; CHECK-FP16-SD-LABEL: utest_f16i32_mm :
2318
2318
; CHECK-FP16-SD: // %bb.0: // %entry
2319
2319
; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h
2320
2320
; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s
2321
2321
; CHECK-FP16-SD-NEXT: ret
2322
2322
;
2323
- ; CHECK-CVT-GI-LABEL: utesth_f16i32_mm :
2323
+ ; CHECK-CVT-GI-LABEL: utest_f16i32_mm :
2324
2324
; CHECK-CVT-GI: // %bb.0: // %entry
2325
2325
; CHECK-CVT-GI-NEXT: fcvtl v0.4s, v0.4h
2326
2326
; CHECK-CVT-GI-NEXT: movi v1.2d, #0x000000ffffffff
@@ -2335,7 +2335,7 @@ define <4 x i32> @utesth_f16i32_mm(<4 x half> %x) {
2335
2335
; CHECK-CVT-GI-NEXT: uzp1 v0.4s, v2.4s, v0.4s
2336
2336
; CHECK-CVT-GI-NEXT: ret
2337
2337
;
2338
- ; CHECK-FP16-GI-LABEL: utesth_f16i32_mm :
2338
+ ; CHECK-FP16-GI-LABEL: utest_f16i32_mm :
2339
2339
; CHECK-FP16-GI: // %bb.0: // %entry
2340
2340
; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
2341
2341
; CHECK-FP16-GI-NEXT: mov h2, v0.h[1]
@@ -2585,8 +2585,8 @@ entry:
2585
2585
ret <8 x i16 > %conv6
2586
2586
}
2587
2587
2588
- define <8 x i16 > @utesth_f16i16_mm (<8 x half > %x ) {
2589
- ; CHECK-CVT-LABEL: utesth_f16i16_mm :
2588
+ define <8 x i16 > @utest_f16i16_mm (<8 x half > %x ) {
2589
+ ; CHECK-CVT-LABEL: utest_f16i16_mm :
2590
2590
; CHECK-CVT: // %bb.0: // %entry
2591
2591
; CHECK-CVT-NEXT: fcvtl v1.4s, v0.4h
2592
2592
; CHECK-CVT-NEXT: fcvtl2 v0.4s, v0.8h
@@ -2596,12 +2596,12 @@ define <8 x i16> @utesth_f16i16_mm(<8 x half> %x) {
2596
2596
; CHECK-CVT-NEXT: uqxtn2 v0.8h, v2.4s
2597
2597
; CHECK-CVT-NEXT: ret
2598
2598
;
2599
- ; CHECK-FP16-SD-LABEL: utesth_f16i16_mm :
2599
+ ; CHECK-FP16-SD-LABEL: utest_f16i16_mm :
2600
2600
; CHECK-FP16-SD: // %bb.0: // %entry
2601
2601
; CHECK-FP16-SD-NEXT: fcvtzu v0.8h, v0.8h
2602
2602
; CHECK-FP16-SD-NEXT: ret
2603
2603
;
2604
- ; CHECK-FP16-GI-LABEL: utesth_f16i16_mm :
2604
+ ; CHECK-FP16-GI-LABEL: utest_f16i16_mm :
2605
2605
; CHECK-FP16-GI: // %bb.0: // %entry
2606
2606
; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h
2607
2607
; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h
@@ -3694,8 +3694,8 @@ entry:
3694
3694
ret <2 x i64 > %conv6
3695
3695
}
3696
3696
3697
- define <2 x i64 > @utesth_f16i64_mm (<2 x half > %x ) {
3698
- ; CHECK-CVT-SD-LABEL: utesth_f16i64_mm :
3697
+ define <2 x i64 > @utest_f16i64_mm (<2 x half > %x ) {
3698
+ ; CHECK-CVT-SD-LABEL: utest_f16i64_mm :
3699
3699
; CHECK-CVT-SD: // %bb.0: // %entry
3700
3700
; CHECK-CVT-SD-NEXT: sub sp, sp, #48
3701
3701
; CHECK-CVT-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
@@ -3725,7 +3725,7 @@ define <2 x i64> @utesth_f16i64_mm(<2 x half> %x) {
3725
3725
; CHECK-CVT-SD-NEXT: add sp, sp, #48
3726
3726
; CHECK-CVT-SD-NEXT: ret
3727
3727
;
3728
- ; CHECK-FP16-SD-LABEL: utesth_f16i64_mm :
3728
+ ; CHECK-FP16-SD-LABEL: utest_f16i64_mm :
3729
3729
; CHECK-FP16-SD: // %bb.0: // %entry
3730
3730
; CHECK-FP16-SD-NEXT: sub sp, sp, #48
3731
3731
; CHECK-FP16-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
@@ -3755,7 +3755,7 @@ define <2 x i64> @utesth_f16i64_mm(<2 x half> %x) {
3755
3755
; CHECK-FP16-SD-NEXT: add sp, sp, #48
3756
3756
; CHECK-FP16-SD-NEXT: ret
3757
3757
;
3758
- ; CHECK-CVT-GI-LABEL: utesth_f16i64_mm :
3758
+ ; CHECK-CVT-GI-LABEL: utest_f16i64_mm :
3759
3759
; CHECK-CVT-GI: // %bb.0: // %entry
3760
3760
; CHECK-CVT-GI-NEXT: // kill: def $d0 killed $d0 def $q0
3761
3761
; CHECK-CVT-GI-NEXT: mov h1, v0.h[1]
@@ -3767,7 +3767,7 @@ define <2 x i64> @utesth_f16i64_mm(<2 x half> %x) {
3767
3767
; CHECK-CVT-GI-NEXT: mov v0.d[1], x9
3768
3768
; CHECK-CVT-GI-NEXT: ret
3769
3769
;
3770
- ; CHECK-FP16-GI-LABEL: utesth_f16i64_mm :
3770
+ ; CHECK-FP16-GI-LABEL: utest_f16i64_mm :
3771
3771
; CHECK-FP16-GI: // %bb.0: // %entry
3772
3772
; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
3773
3773
; CHECK-FP16-GI-NEXT: mov h1, v0.h[1]
@@ -3941,6 +3941,51 @@ entry:
3941
3941
ret <2 x i64 > %conv6
3942
3942
}
3943
3943
3944
+ ; i32 non saturate
3945
+
3946
+ define <4 x i32 > @ustest_f16i32_nsat (<4 x half > %x ) {
3947
+ ; CHECK-CVT-SD-LABEL: ustest_f16i32_nsat:
3948
+ ; CHECK-CVT-SD: // %bb.0: // %entry
3949
+ ; CHECK-CVT-SD-NEXT: fcvtl v0.4s, v0.4h
3950
+ ; CHECK-CVT-SD-NEXT: movi v1.2d, #0000000000000000
3951
+ ; CHECK-CVT-SD-NEXT: fcvtzs v0.4s, v0.4s
3952
+ ; CHECK-CVT-SD-NEXT: smin v0.4s, v0.4s, v1.4s
3953
+ ; CHECK-CVT-SD-NEXT: smax v0.4s, v0.4s, v1.4s
3954
+ ; CHECK-CVT-SD-NEXT: ret
3955
+ ;
3956
+ ; CHECK-FP16-SD-LABEL: ustest_f16i32_nsat:
3957
+ ; CHECK-FP16-SD: // %bb.0: // %entry
3958
+ ; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h
3959
+ ; CHECK-FP16-SD-NEXT: movi v1.2d, #0000000000000000
3960
+ ; CHECK-FP16-SD-NEXT: fcvtzs v0.4s, v0.4s
3961
+ ; CHECK-FP16-SD-NEXT: smin v0.4s, v0.4s, v1.4s
3962
+ ; CHECK-FP16-SD-NEXT: smax v0.4s, v0.4s, v1.4s
3963
+ ; CHECK-FP16-SD-NEXT: ret
3964
+ ;
3965
+ ; CHECK-CVT-GI-LABEL: ustest_f16i32_nsat:
3966
+ ; CHECK-CVT-GI: // %bb.0: // %entry
3967
+ ; CHECK-CVT-GI-NEXT: fcvtl v0.4s, v0.4h
3968
+ ; CHECK-CVT-GI-NEXT: movi v1.2d, #0000000000000000
3969
+ ; CHECK-CVT-GI-NEXT: fcvtzs v0.4s, v0.4s
3970
+ ; CHECK-CVT-GI-NEXT: smin v0.4s, v1.4s, v0.4s
3971
+ ; CHECK-CVT-GI-NEXT: smax v0.4s, v0.4s, v1.4s
3972
+ ; CHECK-CVT-GI-NEXT: ret
3973
+ ;
3974
+ ; CHECK-FP16-GI-LABEL: ustest_f16i32_nsat:
3975
+ ; CHECK-FP16-GI: // %bb.0: // %entry
3976
+ ; CHECK-FP16-GI-NEXT: fcvtl v0.4s, v0.4h
3977
+ ; CHECK-FP16-GI-NEXT: movi v1.2d, #0000000000000000
3978
+ ; CHECK-FP16-GI-NEXT: fcvtzs v0.4s, v0.4s
3979
+ ; CHECK-FP16-GI-NEXT: smin v0.4s, v1.4s, v0.4s
3980
+ ; CHECK-FP16-GI-NEXT: smax v0.4s, v0.4s, v1.4s
3981
+ ; CHECK-FP16-GI-NEXT: ret
3982
+ entry:
3983
+ %conv = fptosi <4 x half > %x to <4 x i32 >
3984
+ %spec.store.select = call <4 x i32 > @llvm.smin.v4i32 (<4 x i32 > zeroinitializer , <4 x i32 > %conv )
3985
+ %spec.store.select7 = call <4 x i32 > @llvm.smax.v4i32 (<4 x i32 > %spec.store.select , <4 x i32 > zeroinitializer )
3986
+ ret <4 x i32 > %spec.store.select7
3987
+ }
3988
+
3944
3989
declare <2 x i32 > @llvm.smin.v2i32 (<2 x i32 >, <2 x i32 >)
3945
3990
declare <2 x i32 > @llvm.smax.v2i32 (<2 x i32 >, <2 x i32 >)
3946
3991
declare <2 x i32 > @llvm.umin.v2i32 (<2 x i32 >, <2 x i32 >)
0 commit comments