@@ -321,20 +321,20 @@ entry:
321321 ret <4 x i32 > %conv6
322322}
323323
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 :
326326; CHECK-CVT-SD: // %bb.0: // %entry
327327; CHECK-CVT-SD-NEXT: fcvtl v0.4s, v0.4h
328328; CHECK-CVT-SD-NEXT: fcvtzu v0.4s, v0.4s
329329; CHECK-CVT-SD-NEXT: ret
330330;
331- ; CHECK-FP16-SD-LABEL: utesth_f16i32 :
331+ ; CHECK-FP16-SD-LABEL: utest_f16i32 :
332332; CHECK-FP16-SD: // %bb.0: // %entry
333333; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h
334334; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s
335335; CHECK-FP16-SD-NEXT: ret
336336;
337- ; CHECK-CVT-GI-LABEL: utesth_f16i32 :
337+ ; CHECK-CVT-GI-LABEL: utest_f16i32 :
338338; CHECK-CVT-GI: // %bb.0: // %entry
339339; CHECK-CVT-GI-NEXT: fcvtl v0.4s, v0.4h
340340; CHECK-CVT-GI-NEXT: movi v1.2d, #0x000000ffffffff
@@ -349,7 +349,7 @@ define <4 x i32> @utesth_f16i32(<4 x half> %x) {
349349; CHECK-CVT-GI-NEXT: uzp1 v0.4s, v2.4s, v0.4s
350350; CHECK-CVT-GI-NEXT: ret
351351;
352- ; CHECK-FP16-GI-LABEL: utesth_f16i32 :
352+ ; CHECK-FP16-GI-LABEL: utest_f16i32 :
353353; CHECK-FP16-GI: // %bb.0: // %entry
354354; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
355355; CHECK-FP16-GI-NEXT: mov h2, v0.h[1]
@@ -614,8 +614,8 @@ entry:
614614 ret <8 x i16 > %conv6
615615}
616616
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 :
619619; CHECK-CVT: // %bb.0: // %entry
620620; CHECK-CVT-NEXT: fcvtl v1.4s, v0.4h
621621; CHECK-CVT-NEXT: fcvtl2 v0.4s, v0.8h
@@ -625,12 +625,12 @@ define <8 x i16> @utesth_f16i16(<8 x half> %x) {
625625; CHECK-CVT-NEXT: uqxtn2 v0.8h, v2.4s
626626; CHECK-CVT-NEXT: ret
627627;
628- ; CHECK-FP16-SD-LABEL: utesth_f16i16 :
628+ ; CHECK-FP16-SD-LABEL: utest_f16i16 :
629629; CHECK-FP16-SD: // %bb.0: // %entry
630630; CHECK-FP16-SD-NEXT: fcvtzu v0.8h, v0.8h
631631; CHECK-FP16-SD-NEXT: ret
632632;
633- ; CHECK-FP16-GI-LABEL: utesth_f16i16 :
633+ ; CHECK-FP16-GI-LABEL: utest_f16i16 :
634634; CHECK-FP16-GI: // %bb.0: // %entry
635635; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h
636636; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h
@@ -1746,8 +1746,8 @@ entry:
17461746 ret <2 x i64 > %conv6
17471747}
17481748
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 :
17511751; CHECK-CVT-SD: // %bb.0: // %entry
17521752; CHECK-CVT-SD-NEXT: sub sp, sp, #48
17531753; 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) {
17771777; CHECK-CVT-SD-NEXT: add sp, sp, #48
17781778; CHECK-CVT-SD-NEXT: ret
17791779;
1780- ; CHECK-FP16-SD-LABEL: utesth_f16i64 :
1780+ ; CHECK-FP16-SD-LABEL: utest_f16i64 :
17811781; CHECK-FP16-SD: // %bb.0: // %entry
17821782; CHECK-FP16-SD-NEXT: sub sp, sp, #48
17831783; 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) {
18071807; CHECK-FP16-SD-NEXT: add sp, sp, #48
18081808; CHECK-FP16-SD-NEXT: ret
18091809;
1810- ; CHECK-CVT-GI-LABEL: utesth_f16i64 :
1810+ ; CHECK-CVT-GI-LABEL: utest_f16i64 :
18111811; CHECK-CVT-GI: // %bb.0: // %entry
18121812; CHECK-CVT-GI-NEXT: // kill: def $d0 killed $d0 def $q0
18131813; CHECK-CVT-GI-NEXT: mov h1, v0.h[1]
@@ -1819,7 +1819,7 @@ define <2 x i64> @utesth_f16i64(<2 x half> %x) {
18191819; CHECK-CVT-GI-NEXT: mov v0.d[1], x9
18201820; CHECK-CVT-GI-NEXT: ret
18211821;
1822- ; CHECK-FP16-GI-LABEL: utesth_f16i64 :
1822+ ; CHECK-FP16-GI-LABEL: utest_f16i64 :
18231823; CHECK-FP16-GI: // %bb.0: // %entry
18241824; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
18251825; CHECK-FP16-GI-NEXT: mov h1, v0.h[1]
@@ -2307,20 +2307,20 @@ entry:
23072307 ret <4 x i32 > %conv6
23082308}
23092309
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 :
23122312; CHECK-CVT-SD: // %bb.0: // %entry
23132313; CHECK-CVT-SD-NEXT: fcvtl v0.4s, v0.4h
23142314; CHECK-CVT-SD-NEXT: fcvtzu v0.4s, v0.4s
23152315; CHECK-CVT-SD-NEXT: ret
23162316;
2317- ; CHECK-FP16-SD-LABEL: utesth_f16i32_mm :
2317+ ; CHECK-FP16-SD-LABEL: utest_f16i32_mm :
23182318; CHECK-FP16-SD: // %bb.0: // %entry
23192319; CHECK-FP16-SD-NEXT: fcvtl v0.4s, v0.4h
23202320; CHECK-FP16-SD-NEXT: fcvtzu v0.4s, v0.4s
23212321; CHECK-FP16-SD-NEXT: ret
23222322;
2323- ; CHECK-CVT-GI-LABEL: utesth_f16i32_mm :
2323+ ; CHECK-CVT-GI-LABEL: utest_f16i32_mm :
23242324; CHECK-CVT-GI: // %bb.0: // %entry
23252325; CHECK-CVT-GI-NEXT: fcvtl v0.4s, v0.4h
23262326; CHECK-CVT-GI-NEXT: movi v1.2d, #0x000000ffffffff
@@ -2335,7 +2335,7 @@ define <4 x i32> @utesth_f16i32_mm(<4 x half> %x) {
23352335; CHECK-CVT-GI-NEXT: uzp1 v0.4s, v2.4s, v0.4s
23362336; CHECK-CVT-GI-NEXT: ret
23372337;
2338- ; CHECK-FP16-GI-LABEL: utesth_f16i32_mm :
2338+ ; CHECK-FP16-GI-LABEL: utest_f16i32_mm :
23392339; CHECK-FP16-GI: // %bb.0: // %entry
23402340; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
23412341; CHECK-FP16-GI-NEXT: mov h2, v0.h[1]
@@ -2585,8 +2585,8 @@ entry:
25852585 ret <8 x i16 > %conv6
25862586}
25872587
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 :
25902590; CHECK-CVT: // %bb.0: // %entry
25912591; CHECK-CVT-NEXT: fcvtl v1.4s, v0.4h
25922592; CHECK-CVT-NEXT: fcvtl2 v0.4s, v0.8h
@@ -2596,12 +2596,12 @@ define <8 x i16> @utesth_f16i16_mm(<8 x half> %x) {
25962596; CHECK-CVT-NEXT: uqxtn2 v0.8h, v2.4s
25972597; CHECK-CVT-NEXT: ret
25982598;
2599- ; CHECK-FP16-SD-LABEL: utesth_f16i16_mm :
2599+ ; CHECK-FP16-SD-LABEL: utest_f16i16_mm :
26002600; CHECK-FP16-SD: // %bb.0: // %entry
26012601; CHECK-FP16-SD-NEXT: fcvtzu v0.8h, v0.8h
26022602; CHECK-FP16-SD-NEXT: ret
26032603;
2604- ; CHECK-FP16-GI-LABEL: utesth_f16i16_mm :
2604+ ; CHECK-FP16-GI-LABEL: utest_f16i16_mm :
26052605; CHECK-FP16-GI: // %bb.0: // %entry
26062606; CHECK-FP16-GI-NEXT: fcvtl v1.4s, v0.4h
26072607; CHECK-FP16-GI-NEXT: fcvtl2 v0.4s, v0.8h
@@ -3694,8 +3694,8 @@ entry:
36943694 ret <2 x i64 > %conv6
36953695}
36963696
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 :
36993699; CHECK-CVT-SD: // %bb.0: // %entry
37003700; CHECK-CVT-SD-NEXT: sub sp, sp, #48
37013701; 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) {
37253725; CHECK-CVT-SD-NEXT: add sp, sp, #48
37263726; CHECK-CVT-SD-NEXT: ret
37273727;
3728- ; CHECK-FP16-SD-LABEL: utesth_f16i64_mm :
3728+ ; CHECK-FP16-SD-LABEL: utest_f16i64_mm :
37293729; CHECK-FP16-SD: // %bb.0: // %entry
37303730; CHECK-FP16-SD-NEXT: sub sp, sp, #48
37313731; 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) {
37553755; CHECK-FP16-SD-NEXT: add sp, sp, #48
37563756; CHECK-FP16-SD-NEXT: ret
37573757;
3758- ; CHECK-CVT-GI-LABEL: utesth_f16i64_mm :
3758+ ; CHECK-CVT-GI-LABEL: utest_f16i64_mm :
37593759; CHECK-CVT-GI: // %bb.0: // %entry
37603760; CHECK-CVT-GI-NEXT: // kill: def $d0 killed $d0 def $q0
37613761; CHECK-CVT-GI-NEXT: mov h1, v0.h[1]
@@ -3767,7 +3767,7 @@ define <2 x i64> @utesth_f16i64_mm(<2 x half> %x) {
37673767; CHECK-CVT-GI-NEXT: mov v0.d[1], x9
37683768; CHECK-CVT-GI-NEXT: ret
37693769;
3770- ; CHECK-FP16-GI-LABEL: utesth_f16i64_mm :
3770+ ; CHECK-FP16-GI-LABEL: utest_f16i64_mm :
37713771; CHECK-FP16-GI: // %bb.0: // %entry
37723772; CHECK-FP16-GI-NEXT: // kill: def $d0 killed $d0 def $q0
37733773; CHECK-FP16-GI-NEXT: mov h1, v0.h[1]
@@ -3941,6 +3941,51 @@ entry:
39413941 ret <2 x i64 > %conv6
39423942}
39433943
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+
39443989declare <2 x i32 > @llvm.smin.v2i32 (<2 x i32 >, <2 x i32 >)
39453990declare <2 x i32 > @llvm.smax.v2i32 (<2 x i32 >, <2 x i32 >)
39463991declare <2 x i32 > @llvm.umin.v2i32 (<2 x i32 >, <2 x i32 >)
0 commit comments