1+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
12; RUN: llc < %s -mtriple=aarch64 -mattr=+v8.2a,+fullfp16 | FileCheck %s
23
34declare <4 x half > @llvm.nearbyint.v4f16 (<4 x half >)
45declare <8 x half > @llvm.nearbyint.v8f16 (<8 x half >)
56declare <4 x half > @llvm.sqrt.v4f16 (<4 x half >)
67declare <8 x half > @llvm.sqrt.v8f16 (<8 x half >)
8+ declare <4 x i16 > @llvm.aarch64.neon.fcvtzs.v4i16.v4f16 (<4 x half >)
9+ declare <4 x i16 > @llvm.aarch64.neon.fcvtzu.v4i16.v4f16 (<4 x half >)
10+ declare <4 x i16 > @llvm.aarch64.neon.fcvtas.v4i16.v4f16 (<4 x half >)
11+ declare <4 x i16 > @llvm.aarch64.neon.fcvtau.v4i16.v4f16 (<4 x half >)
12+ declare <4 x i16 > @llvm.aarch64.neon.fcvtms.v4i16.v4f16 (<4 x half >)
13+ declare <4 x i16 > @llvm.aarch64.neon.fcvtmu.v4i16.v4f16 (<4 x half >)
14+ declare <4 x i16 > @llvm.aarch64.neon.fcvtns.v4i16.v4f16 (<4 x half >)
15+ declare <4 x i16 > @llvm.aarch64.neon.fcvtnu.v4i16.v4f16 (<4 x half >)
16+ declare <4 x i16 > @llvm.aarch64.neon.fcvtps.v4i16.v4f16 (<4 x half >)
17+ declare <4 x i16 > @llvm.aarch64.neon.fcvtpu.v4i16.v4f16 (<4 x half >)
718
819define dso_local <4 x half > @t_vrndi_f16 (<4 x half > %a ) {
920; CHECK-LABEL: t_vrndi_f16:
10- ; CHECK: frinti v0.4h, v0.4h
21+ ; CHECK: // %bb.0: // %entry
22+ ; CHECK-NEXT: frinti v0.4h, v0.4h
1123; CHECK-NEXT: ret
1224entry:
1325 %vrndi1.i = tail call <4 x half > @llvm.nearbyint.v4f16 (<4 x half > %a )
1628
1729define dso_local <8 x half > @t_vrndiq_f16 (<8 x half > %a ) {
1830; CHECK-LABEL: t_vrndiq_f16:
19- ; CHECK: frinti v0.8h, v0.8h
31+ ; CHECK: // %bb.0: // %entry
32+ ; CHECK-NEXT: frinti v0.8h, v0.8h
2033; CHECK-NEXT: ret
2134entry:
2235 %vrndi1.i = tail call <8 x half > @llvm.nearbyint.v8f16 (<8 x half > %a )
2538
2639define dso_local <4 x half > @t_vsqrt_f16 (<4 x half > %a ) {
2740; CHECK-LABEL: t_vsqrt_f16:
28- ; CHECK: fsqrt v0.4h, v0.4h
41+ ; CHECK: // %bb.0: // %entry
42+ ; CHECK-NEXT: fsqrt v0.4h, v0.4h
2943; CHECK-NEXT: ret
3044entry:
3145 %vsqrt.i = tail call <4 x half > @llvm.sqrt.v4f16 (<4 x half > %a )
@@ -34,9 +48,110 @@ entry:
3448
3549define dso_local <8 x half > @t_vsqrtq_f16 (<8 x half > %a ) {
3650; CHECK-LABEL: t_vsqrtq_f16:
37- ; CHECK: fsqrt v0.8h, v0.8h
51+ ; CHECK: // %bb.0: // %entry
52+ ; CHECK-NEXT: fsqrt v0.8h, v0.8h
3853; CHECK-NEXT: ret
3954entry:
4055 %vsqrt.i = tail call <8 x half > @llvm.sqrt.v8f16 (<8 x half > %a )
4156 ret <8 x half > %vsqrt.i
4257}
58+
59+ define <4 x i16 > @t_fcvtzs_v4i16_v4f16 (<4 x half > %a ) {
60+ ; CHECK-LABEL: t_fcvtzs_v4i16_v4f16:
61+ ; CHECK: // %bb.0: // %entry
62+ ; CHECK-NEXT: fcvtzs v0.4h, v0.4h
63+ ; CHECK-NEXT: ret
64+ entry:
65+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtzs.v4i16.v4f16 (<4 x half > %a )
66+ ret <4 x i16 > %vcvt
67+ }
68+
69+ define <4 x i16 > @t_fcvtzu_v4i16_v4f16 (<4 x half > %a ) {
70+ ; CHECK-LABEL: t_fcvtzu_v4i16_v4f16:
71+ ; CHECK: // %bb.0: // %entry
72+ ; CHECK-NEXT: fcvtzu v0.4h, v0.4h
73+ ; CHECK-NEXT: ret
74+ entry:
75+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtzu.v4i16.v4f16 (<4 x half > %a )
76+ ret <4 x i16 > %vcvt
77+ }
78+
79+ define <4 x i16 > @t_fcvtas_v4i16_v4f16 (<4 x half > %a ) {
80+ ; CHECK-LABEL: t_fcvtas_v4i16_v4f16:
81+ ; CHECK: // %bb.0: // %entry
82+ ; CHECK-NEXT: fcvtas v0.4h, v0.4h
83+ ; CHECK-NEXT: ret
84+ entry:
85+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtas.v4i16.v4f16 (<4 x half > %a )
86+ ret <4 x i16 > %vcvt
87+ }
88+
89+ define <4 x i16 > @t_fcvtau_v4i16_v4f16 (<4 x half > %a ) {
90+ ; CHECK-LABEL: t_fcvtau_v4i16_v4f16:
91+ ; CHECK: // %bb.0: // %entry
92+ ; CHECK-NEXT: fcvtau v0.4h, v0.4h
93+ ; CHECK-NEXT: ret
94+ entry:
95+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtau.v4i16.v4f16 (<4 x half > %a )
96+ ret <4 x i16 > %vcvt
97+ }
98+
99+ define <4 x i16 > @t_fcvtms_v4i16_v4f16 (<4 x half > %a ) {
100+ ; CHECK-LABEL: t_fcvtms_v4i16_v4f16:
101+ ; CHECK: // %bb.0: // %entry
102+ ; CHECK-NEXT: fcvtms v0.4h, v0.4h
103+ ; CHECK-NEXT: ret
104+ entry:
105+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtms.v4i16.v4f16 (<4 x half > %a )
106+ ret <4 x i16 > %vcvt
107+ }
108+
109+ define <4 x i16 > @t_fcvtmu_v4i16_v4f16 (<4 x half > %a ) {
110+ ; CHECK-LABEL: t_fcvtmu_v4i16_v4f16:
111+ ; CHECK: // %bb.0: // %entry
112+ ; CHECK-NEXT: fcvtmu v0.4h, v0.4h
113+ ; CHECK-NEXT: ret
114+ entry:
115+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtmu.v4i16.v4f16 (<4 x half > %a )
116+ ret <4 x i16 > %vcvt
117+ }
118+
119+ define <4 x i16 > @t_fcvtns_v4i16_v4f16 (<4 x half > %a ) {
120+ ; CHECK-LABEL: t_fcvtns_v4i16_v4f16:
121+ ; CHECK: // %bb.0: // %entry
122+ ; CHECK-NEXT: fcvtns v0.4h, v0.4h
123+ ; CHECK-NEXT: ret
124+ entry:
125+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtns.v4i16.v4f16 (<4 x half > %a )
126+ ret <4 x i16 > %vcvt
127+ }
128+
129+ define <4 x i16 > @t_fcvtnu_v4i16_v4f16 (<4 x half > %a ) {
130+ ; CHECK-LABEL: t_fcvtnu_v4i16_v4f16:
131+ ; CHECK: // %bb.0: // %entry
132+ ; CHECK-NEXT: fcvtnu v0.4h, v0.4h
133+ ; CHECK-NEXT: ret
134+ entry:
135+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtnu.v4i16.v4f16 (<4 x half > %a )
136+ ret <4 x i16 > %vcvt
137+ }
138+
139+ define <4 x i16 > @t_fcvtps_v4i16_v4f16 (<4 x half > %a ) {
140+ ; CHECK-LABEL: t_fcvtps_v4i16_v4f16:
141+ ; CHECK: // %bb.0: // %entry
142+ ; CHECK-NEXT: fcvtps v0.4h, v0.4h
143+ ; CHECK-NEXT: ret
144+ entry:
145+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtps.v4i16.v4f16 (<4 x half > %a )
146+ ret <4 x i16 > %vcvt
147+ }
148+
149+ define <4 x i16 > @t_fcvtpu_v4i16_v4f16 (<4 x half > %a ) {
150+ ; CHECK-LABEL: t_fcvtpu_v4i16_v4f16:
151+ ; CHECK: // %bb.0: // %entry
152+ ; CHECK-NEXT: fcvtpu v0.4h, v0.4h
153+ ; CHECK-NEXT: ret
154+ entry:
155+ %vcvt = tail call <4 x i16 > @llvm.aarch64.neon.fcvtpu.v4i16.v4f16 (<4 x half > %a )
156+ ret <4 x i16 > %vcvt
157+ }
0 commit comments