Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AArch64 / fp16_intrinsic_scalar_1op.ll
blob40d2d636b94bb39e930c33e6956999afbcc9177c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=aarch64 -mattr=+v8.2a,+fullfp16  | FileCheck %s
4 declare i64 @llvm.aarch64.neon.fcvtpu.i64.f16(half)
5 declare i32 @llvm.aarch64.neon.fcvtpu.i32.f16(half)
6 declare i64 @llvm.aarch64.neon.fcvtps.i64.f16(half)
7 declare i32 @llvm.aarch64.neon.fcvtps.i32.f16(half)
8 declare i64 @llvm.aarch64.neon.fcvtnu.i64.f16(half)
9 declare i32 @llvm.aarch64.neon.fcvtnu.i32.f16(half)
10 declare i64 @llvm.aarch64.neon.fcvtns.i64.f16(half)
11 declare i32 @llvm.aarch64.neon.fcvtns.i32.f16(half)
12 declare i64 @llvm.aarch64.neon.fcvtmu.i64.f16(half)
13 declare i32 @llvm.aarch64.neon.fcvtmu.i32.f16(half)
14 declare i64 @llvm.aarch64.neon.fcvtms.i64.f16(half)
15 declare i32 @llvm.aarch64.neon.fcvtms.i32.f16(half)
16 declare i64 @llvm.aarch64.neon.fcvtau.i64.f16(half)
17 declare i32 @llvm.aarch64.neon.fcvtau.i32.f16(half)
18 declare i64 @llvm.aarch64.neon.fcvtas.i64.f16(half)
19 declare i32 @llvm.aarch64.neon.fcvtas.i32.f16(half)
20 declare i64 @llvm.aarch64.neon.fcvtzs.i64.f16(half)
21 declare i32 @llvm.aarch64.neon.fcvtzs.i32.f16(half)
22 declare i64 @llvm.aarch64.neon.fcvtzu.i64.f16(half)
23 declare i32 @llvm.aarch64.neon.fcvtzu.i32.f16(half)
24 declare half @llvm.aarch64.neon.frsqrte.f16(half)
25 declare half @llvm.aarch64.neon.frecpx.f16(half)
26 declare half @llvm.aarch64.neon.frecpe.f16(half)
28 define dso_local i16 @t2(half %a) {
29 ; CHECK-LABEL: t2:
30 ; CHECK:       // %bb.0: // %entry
31 ; CHECK-NEXT:    fcmp h0, #0.0
32 ; CHECK-NEXT:    csetm w0, eq
33 ; CHECK-NEXT:    ret
34 entry:
35   %0 = fcmp oeq half %a, 0xH0000
36   %vceqz = sext i1 %0 to i16
37   ret i16 %vceqz
40 define dso_local i16 @t3(half %a) {
41 ; CHECK-LABEL: t3:
42 ; CHECK:       // %bb.0: // %entry
43 ; CHECK-NEXT:    fcmp h0, #0.0
44 ; CHECK-NEXT:    csetm w0, ge
45 ; CHECK-NEXT:    ret
46 entry:
47   %0 = fcmp oge half %a, 0xH0000
48   %vcgez = sext i1 %0 to i16
49   ret i16 %vcgez
52 define dso_local i16 @t4(half %a) {
53 ; CHECK-LABEL: t4:
54 ; CHECK:       // %bb.0: // %entry
55 ; CHECK-NEXT:    fcmp h0, #0.0
56 ; CHECK-NEXT:    csetm w0, gt
57 ; CHECK-NEXT:    ret
58 entry:
59   %0 = fcmp ogt half %a, 0xH0000
60   %vcgtz = sext i1 %0 to i16
61   ret i16 %vcgtz
64 define dso_local i16 @t5(half %a) {
65 ; CHECK-LABEL: t5:
66 ; CHECK:       // %bb.0: // %entry
67 ; CHECK-NEXT:    fcmp h0, #0.0
68 ; CHECK-NEXT:    csetm w0, ls
69 ; CHECK-NEXT:    ret
70 entry:
71   %0 = fcmp ole half %a, 0xH0000
72   %vclez = sext i1 %0 to i16
73   ret i16 %vclez
76 define dso_local i16 @t6(half %a) {
77 ; CHECK-LABEL: t6:
78 ; CHECK:       // %bb.0: // %entry
79 ; CHECK-NEXT:    fcmp h0, #0.0
80 ; CHECK-NEXT:    csetm w0, mi
81 ; CHECK-NEXT:    ret
82 entry:
83   %0 = fcmp olt half %a, 0xH0000
84   %vcltz = sext i1 %0 to i16
85   ret i16 %vcltz
88 define dso_local half @t8(i32 %a) {
89 ; CHECK-LABEL: t8:
90 ; CHECK:       // %bb.0: // %entry
91 ; CHECK-NEXT:    scvtf h0, w0
92 ; CHECK-NEXT:    ret
93 entry:
94   %0 = sitofp i32 %a to half
95   ret half %0
98 define dso_local half @t9(i64 %a) {
99 ; CHECK-LABEL: t9:
100 ; CHECK:       // %bb.0: // %entry
101 ; CHECK-NEXT:    scvtf h0, x0
102 ; CHECK-NEXT:    ret
103 entry:
104   %0 = sitofp i64 %a to half
105   ret half %0
108 define dso_local half @t12(i64 %a) {
109 ; CHECK-LABEL: t12:
110 ; CHECK:       // %bb.0: // %entry
111 ; CHECK-NEXT:    ucvtf h0, x0
112 ; CHECK-NEXT:    ret
113 entry:
114   %0 = uitofp i64 %a to half
115   ret half %0
118 define dso_local i16 @t13(half %a) {
119 ; CHECK-LABEL: t13:
120 ; CHECK:       // %bb.0: // %entry
121 ; CHECK-NEXT:    fcvtzs w0, h0
122 ; CHECK-NEXT:    ret
123 entry:
124   %0 = fptosi half %a to i16
125   ret i16 %0
128 define dso_local i64 @t15(half %a) {
129 ; CHECK-LABEL: t15:
130 ; CHECK:       // %bb.0: // %entry
131 ; CHECK-NEXT:    fcvtzs x0, h0
132 ; CHECK-NEXT:    ret
133 entry:
134   %0 = fptosi half %a to i64
135   ret i64 %0
138 define dso_local i16 @t16(half %a) {
139 ; CHECK-LABEL: t16:
140 ; CHECK:       // %bb.0: // %entry
141 ; CHECK-NEXT:    fcvtzs w0, h0
142 ; CHECK-NEXT:    ret
143 entry:
144   %0 = fptoui half %a to i16
145   ret i16 %0
148 define dso_local i64 @t18(half %a) {
149 ; CHECK-LABEL: t18:
150 ; CHECK:       // %bb.0: // %entry
151 ; CHECK-NEXT:    fcvtzu x0, h0
152 ; CHECK-NEXT:    ret
153 entry:
154   %0 = fptoui half %a to i64
155   ret i64 %0
158 define i32 @fcvtzu_intrinsic_i32(half %a) {
159 ; CHECK-LABEL: fcvtzu_intrinsic_i32:
160 ; CHECK:       // %bb.0: // %entry
161 ; CHECK-NEXT:    fcvtzu w0, h0
162 ; CHECK-NEXT:    ret
163 entry:
164   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtzu.i32.f16(half %a)
165   ret i32 %fcvt
168 define i64 @fcvtzu_intrinsic_i64(half %a) {
169 ; CHECK-LABEL: fcvtzu_intrinsic_i64:
170 ; CHECK:       // %bb.0: // %entry
171 ; CHECK-NEXT:    fcvtzs x0, h0
172 ; CHECK-NEXT:    ret
173 entry:
174   %fcvt = tail call i64 @llvm.aarch64.neon.fcvtzs.i64.f16(half %a)
175   ret i64 %fcvt
178 define i32 @fcvtzs_intrinsic_i32(half %a) {
179 ; CHECK-LABEL: fcvtzs_intrinsic_i32:
180 ; CHECK:       // %bb.0: // %entry
181 ; CHECK-NEXT:    fcvtzs w0, h0
182 ; CHECK-NEXT:    ret
183 entry:
184   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtzs.i32.f16(half %a)
185   ret i32 %fcvt
188 define i64 @fcvtzs_intrinsic_i64(half %a) {
189 ; CHECK-LABEL: fcvtzs_intrinsic_i64:
190 ; CHECK:       // %bb.0: // %entry
191 ; CHECK-NEXT:    fcvtzs x0, h0
192 ; CHECK-NEXT:    ret
193 entry:
194   %fcvt = tail call i64 @llvm.aarch64.neon.fcvtzs.i64.f16(half %a)
195   ret i64 %fcvt
198 define dso_local i16 @t19(half %a) {
199 ; CHECK-LABEL: t19:
200 ; CHECK:       // %bb.0: // %entry
201 ; CHECK-NEXT:    fcvtas w0, h0
202 ; CHECK-NEXT:    ret
203 entry:
204   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtas.i32.f16(half %a)
205   %0 = trunc i32 %fcvt to i16
206   ret i16 %0
209 define dso_local i64 @t21(half %a) {
210 ; CHECK-LABEL: t21:
211 ; CHECK:       // %bb.0: // %entry
212 ; CHECK-NEXT:    fcvtas x0, h0
213 ; CHECK-NEXT:    ret
214 entry:
215   %vcvtah_s64_f16 = tail call i64 @llvm.aarch64.neon.fcvtas.i64.f16(half %a)
216   ret i64 %vcvtah_s64_f16
219 define dso_local i16 @t22(half %a) {
220 ; CHECK-LABEL: t22:
221 ; CHECK:       // %bb.0: // %entry
222 ; CHECK-NEXT:    fcvtau w0, h0
223 ; CHECK-NEXT:    ret
224 entry:
225   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtau.i32.f16(half %a)
226   %0 = trunc i32 %fcvt to i16
227   ret i16 %0
230 define dso_local i64 @t24(half %a) {
231 ; CHECK-LABEL: t24:
232 ; CHECK:       // %bb.0: // %entry
233 ; CHECK-NEXT:    fcvtau x0, h0
234 ; CHECK-NEXT:    ret
235 entry:
236   %vcvtah_u64_f16 = tail call i64 @llvm.aarch64.neon.fcvtau.i64.f16(half %a)
237   ret i64 %vcvtah_u64_f16
240 define dso_local i16 @t25(half %a) {
241 ; CHECK-LABEL: t25:
242 ; CHECK:       // %bb.0: // %entry
243 ; CHECK-NEXT:    fcvtms w0, h0
244 ; CHECK-NEXT:    ret
245 entry:
246   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtms.i32.f16(half %a)
247   %0 = trunc i32 %fcvt to i16
248   ret i16 %0
251 define dso_local i64 @t27(half %a) {
252 ; CHECK-LABEL: t27:
253 ; CHECK:       // %bb.0: // %entry
254 ; CHECK-NEXT:    fcvtms x0, h0
255 ; CHECK-NEXT:    ret
256 entry:
257   %vcvtmh_s64_f16 = tail call i64 @llvm.aarch64.neon.fcvtms.i64.f16(half %a)
258   ret i64 %vcvtmh_s64_f16
261 define dso_local i16 @t28(half %a) {
262 ; CHECK-LABEL: t28:
263 ; CHECK:       // %bb.0: // %entry
264 ; CHECK-NEXT:    fcvtmu w0, h0
265 ; CHECK-NEXT:    ret
266 entry:
267   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtmu.i32.f16(half %a)
268   %0 = trunc i32 %fcvt to i16
269   ret i16 %0
272 define dso_local i64 @t30(half %a) {
273 ; CHECK-LABEL: t30:
274 ; CHECK:       // %bb.0: // %entry
275 ; CHECK-NEXT:    fcvtmu x0, h0
276 ; CHECK-NEXT:    ret
277 entry:
278   %vcvtmh_u64_f16 = tail call i64 @llvm.aarch64.neon.fcvtmu.i64.f16(half %a)
279   ret i64 %vcvtmh_u64_f16
282 define dso_local i16 @t31(half %a) {
283 ; CHECK-LABEL: t31:
284 ; CHECK:       // %bb.0: // %entry
285 ; CHECK-NEXT:    fcvtns w0, h0
286 ; CHECK-NEXT:    ret
287 entry:
288   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtns.i32.f16(half %a)
289   %0 = trunc i32 %fcvt to i16
290   ret i16 %0
293 define dso_local i64 @t33(half %a) {
294 ; CHECK-LABEL: t33:
295 ; CHECK:       // %bb.0: // %entry
296 ; CHECK-NEXT:    fcvtns x0, h0
297 ; CHECK-NEXT:    ret
298 entry:
299   %vcvtnh_s64_f16 = tail call i64 @llvm.aarch64.neon.fcvtns.i64.f16(half %a)
300   ret i64 %vcvtnh_s64_f16
303 define dso_local i16 @t34(half %a) {
304 ; CHECK-LABEL: t34:
305 ; CHECK:       // %bb.0: // %entry
306 ; CHECK-NEXT:    fcvtnu w0, h0
307 ; CHECK-NEXT:    ret
308 entry:
309   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtnu.i32.f16(half %a)
310   %0 = trunc i32 %fcvt to i16
311   ret i16 %0
314 define dso_local i64 @t36(half %a) {
315 ; CHECK-LABEL: t36:
316 ; CHECK:       // %bb.0: // %entry
317 ; CHECK-NEXT:    fcvtnu x0, h0
318 ; CHECK-NEXT:    ret
319 entry:
320   %vcvtnh_u64_f16 = tail call i64 @llvm.aarch64.neon.fcvtnu.i64.f16(half %a)
321   ret i64 %vcvtnh_u64_f16
324 define dso_local i16 @t37(half %a) {
325 ; CHECK-LABEL: t37:
326 ; CHECK:       // %bb.0: // %entry
327 ; CHECK-NEXT:    fcvtps w0, h0
328 ; CHECK-NEXT:    ret
329 entry:
330   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtps.i32.f16(half %a)
331   %0 = trunc i32 %fcvt to i16
332   ret i16 %0
335 define dso_local i64 @t39(half %a) {
336 ; CHECK-LABEL: t39:
337 ; CHECK:       // %bb.0: // %entry
338 ; CHECK-NEXT:    fcvtps x0, h0
339 ; CHECK-NEXT:    ret
340 entry:
341   %vcvtph_s64_f16 = tail call i64 @llvm.aarch64.neon.fcvtps.i64.f16(half %a)
342   ret i64 %vcvtph_s64_f16
345 define dso_local i16 @t40(half %a) {
346 ; CHECK-LABEL: t40:
347 ; CHECK:       // %bb.0: // %entry
348 ; CHECK-NEXT:    fcvtpu w0, h0
349 ; CHECK-NEXT:    ret
350 entry:
351   %fcvt = tail call i32 @llvm.aarch64.neon.fcvtpu.i32.f16(half %a)
352   %0 = trunc i32 %fcvt to i16
353   ret i16 %0
356 define dso_local i64 @t42(half %a) {
357 ; CHECK-LABEL: t42:
358 ; CHECK:       // %bb.0: // %entry
359 ; CHECK-NEXT:    fcvtpu x0, h0
360 ; CHECK-NEXT:    ret
361 entry:
362   %vcvtph_u64_f16 = tail call i64 @llvm.aarch64.neon.fcvtpu.i64.f16(half %a)
363   ret i64 %vcvtph_u64_f16
366 define dso_local half @t44(half %a) {
367 ; CHECK-LABEL: t44:
368 ; CHECK:       // %bb.0: // %entry
369 ; CHECK-NEXT:    frecpe h0, h0
370 ; CHECK-NEXT:    ret
371 entry:
372   %vrecpeh_f16 = tail call half @llvm.aarch64.neon.frecpe.f16(half %a)
373   ret half %vrecpeh_f16
376 define dso_local half @t45(half %a) {
377 ; CHECK-LABEL: t45:
378 ; CHECK:       // %bb.0: // %entry
379 ; CHECK-NEXT:    frecpx h0, h0
380 ; CHECK-NEXT:    ret
381 entry:
382   %vrecpxh_f16 = tail call half @llvm.aarch64.neon.frecpx.f16(half %a)
383   ret half %vrecpxh_f16
386 define dso_local half @t53(half %a) {
387 ; CHECK-LABEL: t53:
388 ; CHECK:       // %bb.0: // %entry
389 ; CHECK-NEXT:    frsqrte h0, h0
390 ; CHECK-NEXT:    ret
391 entry:
392   %vrsqrteh_f16 = tail call half @llvm.aarch64.neon.frsqrte.f16(half %a)
393   ret half %vrsqrteh_f16