1 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -mattr=-fullfp16 \
2 ; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOFP16
3 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -mattr=+fullfp16 \
4 ; RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-FP16
6 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -mattr=-fullfp16 \
7 ; RUN: -global-isel -global-isel-abort=2 -pass-remarks-missed=gisel* \
8 ; RUN: 2>&1 | FileCheck %s --check-prefixes=GISEL,GISEL-NOFP16,FALLBACK
9 ; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -mattr=+fullfp16 \
10 ; RUN: -global-isel -global-isel-abort=2 -pass-remarks-missed=gisel* \
11 ; RUN: 2>&1 | FileCheck %s --check-prefixes=GISEL,GISEL-FP16,FALLBACK
15 %v4f16 = type <4 x half>
17 ; FALLBACK-NOT: remark{{.*}}test_v4f16.sqrt
18 define %v4f16 @test_v4f16.sqrt(%v4f16 %a) {
19 ; CHECK-LABEL: test_v4f16.sqrt:
20 ; CHECK-NOFP16-COUNT-4: fsqrt s{{[0-9]+}}, s{{[0-9]+}}
21 ; CHECK-FP16-NOT: fcvt
22 ; CHECK-FP16: fsqrt.4h
23 ; CHECK-FP16-NEXT: ret
24 ; GISEL-LABEL: test_v4f16.sqrt:
25 ; GISEL-NOFP16-COUNT-4: fsqrt s{{[0-9]+}}, s{{[0-9]+}}
26 ; GISEL-FP16-NOT: fcvt
27 ; GISEL-FP16: fsqrt.4h
28 ; GISEL-FP16-NEXT: ret
29 %1 = call %v4f16 @llvm.sqrt.v4f16(%v4f16 %a)
32 define %v4f16 @test_v4f16.powi(%v4f16 %a, i32 %b) {
33 ; This operation is expanded, whether with or without +fullfp16.
34 ; CHECK-LABEL: test_v4f16.powi:
35 ; CHECK-COUNT-4: bl __powi
36 %1 = call %v4f16 @llvm.powi.v4f16(%v4f16 %a, i32 %b)
40 ; FALLBACK-NOT: remark{{.*}}test_v4f16.sin
41 define %v4f16 @test_v4f16.sin(%v4f16 %a) {
42 ; This operation is expanded, whether with or without +fullfp16.
43 ; CHECK-LABEL: test_v4f16.sin:
44 ; CHECK-COUNT-4: bl sinf
45 ; GISEL-LABEL: test_v4f16.sin:
46 ; GISEL-COUNT-4: bl sinf
47 %1 = call %v4f16 @llvm.sin.v4f16(%v4f16 %a)
51 ; FALLBACK-NOT: remark{{.*}}test_v4f16.cos
52 define %v4f16 @test_v4f16.cos(%v4f16 %a) {
53 ; This operation is expanded, whether with or without +fullfp16.
54 ; CHECK-LABEL: test_v4f16.cos:
55 ; CHECK-COUNT-4: bl cosf
56 ; GISEL-LABEL: test_v4f16.cos:
57 ; GISEL-COUNT-4: bl cosf
58 %1 = call %v4f16 @llvm.cos.v4f16(%v4f16 %a)
62 ; FALLBACK-NOT: remark{{.*}}test_v4f16.pow
63 define %v4f16 @test_v4f16.pow(%v4f16 %a, %v4f16 %b) {
64 ; This operation is expanded, whether with or without +fullfp16.
65 ; CHECK-LABEL: test_v4f16.pow:
66 ; GISEL-LABEL: test_v4f16.pow:
67 ; CHECK-COUNT-4: bl pow
68 ; GISEL-COUNT-4: bl pow
69 %1 = call %v4f16 @llvm.pow.v4f16(%v4f16 %a, %v4f16 %b)
73 ; FALLBACK-NOT: remark{{.*}}test_v4f16.exp
74 define %v4f16 @test_v4f16.exp(%v4f16 %a) {
75 ; This operation is expanded, whether with or without +fullfp16.
76 ; CHECK-LABEL: test_v4f16.exp:
77 ; CHECK-COUNT-4: bl exp
78 ; GISEL-LABEL: test_v4f16.exp:
79 ; GISEL-COUNT-4: bl exp
80 %1 = call %v4f16 @llvm.exp.v4f16(%v4f16 %a)
83 define %v4f16 @test_v4f16.exp2(%v4f16 %a) {
84 ; This operation is expanded, whether with or without +fullfp16.
85 ; CHECK-LABEL: test_v4f16.exp2:
86 ; CHECK-COUNT-4: bl exp2
87 %1 = call %v4f16 @llvm.exp2.v4f16(%v4f16 %a)
91 ; FALLBACK-NOT: remark{{.*}}test_v4f16.log
92 define %v4f16 @test_v4f16.log(%v4f16 %a) {
93 ; This operation is expanded, whether with or without +fullfp16.
94 ; CHECK-LABEL: test_v4f16.log:
95 ; CHECK-COUNT-4: bl log
96 ; GISEL-LABEL: test_v4f16.log:
97 ; GISEL-COUNT-4: bl log
98 %1 = call %v4f16 @llvm.log.v4f16(%v4f16 %a)
102 ; FALLBACK-NOT: remark{{.*}}test_v4f16.log10
103 define %v4f16 @test_v4f16.log10(%v4f16 %a) {
104 ; This operation is expanded, whether with or without +fullfp16.
105 ; CHECK-LABEL: test_v4f16.log10:
106 ; CHECK-COUNT-4: bl log10
107 ; GISEL-LABEL: test_v4f16.log10:
108 ; GISEL-COUNT-4: bl log10
109 %1 = call %v4f16 @llvm.log10.v4f16(%v4f16 %a)
113 ; FALLBACK-NOT: remark{{.*}}test_v4f16.log2
114 define %v4f16 @test_v4f16.log2(%v4f16 %a) {
115 ; This operation is expanded, whether with or without +fullfp16.
116 ; CHECK-LABEL: test_v4f16.log2:
117 ; CHECK-COUNT-4: bl log2
118 ; GISEL-LABEL: test_v4f16.log2:
119 ; GISEL-COUNT-4: bl log2
120 %1 = call %v4f16 @llvm.log2.v4f16(%v4f16 %a)
124 ; FALLBACK-NOT: remark{{.*}}test_v4f16.fma
125 define %v4f16 @test_v4f16.fma(%v4f16 %a, %v4f16 %b, %v4f16 %c) {
126 ; CHECK-LABEL: test_v4f16.fma:
127 ; CHECK-NOFP16-COUNT-4: fmadd s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}
128 ; CHECK-FP16-NOT: fcvt
129 ; CHECK-FP16: fmla.4h
130 ; GISEL-LABEL: test_v4f16.fma:
131 ; GISEL-NOFP16-COUNT-4: fmadd s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}
132 ; GISEL-FP16-NOT: fcvt
133 ; GISEL-FP16: fmla.4h
134 %1 = call %v4f16 @llvm.fma.v4f16(%v4f16 %a, %v4f16 %b, %v4f16 %c)
138 ; FALLBACK-NOT: remark{{.*}}test_v4f16.fabs
139 define %v4f16 @test_v4f16.fabs(%v4f16 %a) {
140 ; CHECK-LABEL: test_v4f16.fabs:
141 ; CHECK-NOFP16-COUNT-4: fabs s{{[0-9]+}}, s{{[0-9]+}}
142 ; CHECK-FP16-NOT: fcvt
143 ; CHECK-FP16: fabs.4h
144 ; CHECK-FP16-NEXT: ret
146 ; GISEL-LABEL: test_v4f16.fabs:
147 ; GISEL-NOFP16-COUNT-4: fabs s{{[0-9]+}}, s{{[0-9]+}}
148 ; GISEL-FP16-NOT: fcvt
149 ; GISEL-FP16: fabs.4h
150 ; GISEL-FP16-NEXT: ret
151 %1 = call %v4f16 @llvm.fabs.v4f16(%v4f16 %a)
155 ; FALLBACK-NOT: remark{{.*}}test_v4f16.floor
156 define %v4f16 @test_v4f16.floor(%v4f16 %a) {
157 ; CHECK-LABEL: test_v4f16.floor:
158 ; CHECK-NOFP16-COUNT-4: frintm s{{[0-9]+}}, s{{[0-9]+}}
159 ; CHECK-FP16-NOT: fcvt
160 ; CHECK-FP16: frintm.4h
161 ; CHECK-FP16-NEXT: ret
163 ; GISEL-LABEL: test_v4f16.floor:
164 ; GISEL-NOFP16-COUNT-4: frintm s{{[0-9]+}}, s{{[0-9]+}}
165 ; GISEL-FP16-NOT: fcvt
166 ; GISEL-FP16: frintm.4h
167 ; GISEL-FP16-NEXT: ret
168 %1 = call %v4f16 @llvm.floor.v4f16(%v4f16 %a)
171 define %v4f16 @test_v4f16.ceil(%v4f16 %a) {
172 ; CHECK-LABEL: test_v4f16.ceil:
173 ; CHECK-NOFP16-COUNT-4: frintp s{{[0-9]+}}, s{{[0-9]+}}
174 ; CHECK-FP16-NOT: fcvt
175 ; CHECK-FP16: frintp.4h
176 ; CHECK-FP16-NEXT: ret
177 ; FALLBACK-NOT: remark{{.*}}test_v4f16.ceil:
178 ; GISEL-LABEL: test_v4f16.ceil:
179 ; GISEL-NOFP16-COUNT-4: frintp s{{[0-9]+}}, s{{[0-9]+}}
180 ; GISEL-FP16-NOT: fcvt
181 ; GISEL-FP16: frintp.4h
182 ; GISEL-FP16-NEXT: ret
183 %1 = call %v4f16 @llvm.ceil.v4f16(%v4f16 %a)
187 ; FALLBACK-NOT: remark{{.*}}test_v4f16.trunc
188 define %v4f16 @test_v4f16.trunc(%v4f16 %a) {
189 ; CHECK-LABEL: test_v4f16.trunc:
190 ; CHECK-NOFP16-COUNT-4: frintz s{{[0-9]+}}, s{{[0-9]+}}
191 ; CHECK-FP16-NOT: fcvt
192 ; CHECK-FP16: frintz.4h
193 ; CHECK-FP16-NEXT: ret
194 ; GISEL-LABEL: test_v4f16.trunc:
195 ; GISEL-NOFP16-COUNT-4: frintz s{{[0-9]+}}, s{{[0-9]+}}
196 ; GISEL-FP16-NOT: fcvt
197 ; GISEL-FP16: frintz.4h
198 ; GISEL-FP16-NEXT: ret
199 %1 = call %v4f16 @llvm.trunc.v4f16(%v4f16 %a)
203 ; FALLBACK-NOT: remark{{.*}}test_v4f16.rint
204 define %v4f16 @test_v4f16.rint(%v4f16 %a) {
205 ; CHECK-LABEL: test_v4f16.rint:
206 ; CHECK-NOFP16-COUNT-4: frintx s{{[0-9]+}}, s{{[0-9]+}}
207 ; CHECK-FP16-NOT: fcvt
208 ; CHECK-FP16: frintx.4h
209 ; CHECK-FP16-NEXT: ret
210 ; GISEL-LABEL: test_v4f16.rint:
211 ; GISEL-NOFP16-COUNT-4: frintx s{{[0-9]+}}, s{{[0-9]+}}
212 ; GISEL-FP16-NOT: fcvt
213 ; GISEL-FP16: frintx.4h
214 ; GISEL-FP16-NEXT: ret
215 %1 = call %v4f16 @llvm.rint.v4f16(%v4f16 %a)
219 ; FALLBACK-NOT: remark{{.*}}test_v4f16.nearbyint
220 define %v4f16 @test_v4f16.nearbyint(%v4f16 %a) {
221 ; CHECK-LABEL: test_v4f16.nearbyint:
222 ; CHECK-NOFP16-COUNT-4: frinti s{{[0-9]+}}, s{{[0-9]+}}
223 ; CHECK-FP16-NOT: fcvt
224 ; CHECK-FP16: frinti.4h
225 ; CHECK-FP16-NEXT: ret
226 ; GISEL-LABEL: test_v4f16.nearbyint:
227 ; GISEL-NOFP16-COUNT-4: frinti s{{[0-9]+}}, s{{[0-9]+}}
228 ; GISEL-FP16-NOT: fcvt
229 ; GISEL-FP16: frinti.4h
230 ; GISEL-FP16-NEXT: ret
231 %1 = call %v4f16 @llvm.nearbyint.v4f16(%v4f16 %a)
234 define %v4f16 @test_v4f16.round(%v4f16 %a) {
235 ; CHECK-LABEL: test_v4f16.round:
236 ; CHECK-NOFP16-COUNT-4: frinta s{{[0-9]+}}, s{{[0-9]+}}
237 ; CHECK-FP16-NOT: fcvt
238 ; CHECK-FP16: frinta.4h
239 ; CHECK-FP16-NEXT: ret
240 ; GISEL-LABEL: test_v4f16.round:
241 ; GISEL-NOFP16-COUNT-4: frinta s{{[0-9]+}}, s{{[0-9]+}}
242 ; GISEL-FP16-NOT: fcvt
243 ; GISEL-FP16: frinta.4h
244 ; GISEL-FP16-NEXT: ret
245 %1 = call %v4f16 @llvm.round.v4f16(%v4f16 %a)
249 declare %v4f16 @llvm.sqrt.v4f16(%v4f16) #0
250 declare %v4f16 @llvm.powi.v4f16(%v4f16, i32) #0
251 declare %v4f16 @llvm.sin.v4f16(%v4f16) #0
252 declare %v4f16 @llvm.cos.v4f16(%v4f16) #0
253 declare %v4f16 @llvm.pow.v4f16(%v4f16, %v4f16) #0
254 declare %v4f16 @llvm.exp.v4f16(%v4f16) #0
255 declare %v4f16 @llvm.exp2.v4f16(%v4f16) #0
256 declare %v4f16 @llvm.log.v4f16(%v4f16) #0
257 declare %v4f16 @llvm.log10.v4f16(%v4f16) #0
258 declare %v4f16 @llvm.log2.v4f16(%v4f16) #0
259 declare %v4f16 @llvm.fma.v4f16(%v4f16, %v4f16, %v4f16) #0
260 declare %v4f16 @llvm.fabs.v4f16(%v4f16) #0
261 declare %v4f16 @llvm.floor.v4f16(%v4f16) #0
262 declare %v4f16 @llvm.ceil.v4f16(%v4f16) #0
263 declare %v4f16 @llvm.trunc.v4f16(%v4f16) #0
264 declare %v4f16 @llvm.rint.v4f16(%v4f16) #0
265 declare %v4f16 @llvm.nearbyint.v4f16(%v4f16) #0
266 declare %v4f16 @llvm.round.v4f16(%v4f16) #0
270 %v8f16 = type <8 x half>
272 ; FALLBACK-NOT: remark{{.*}}test_v8f16.sqrt
273 define %v8f16 @test_v8f16.sqrt(%v8f16 %a) {
274 ; CHECK-LABEL: test_v8f16.sqrt:
275 ; CHECK-NOFP16-COUNT-8: fsqrt s{{[0-9]+}}, s{{[0-9]+}}
276 ; CHECK-FP16-NOT: fcvt
277 ; CHECK-FP16: fsqrt.8h
278 ; CHECK-FP16-NEXT: ret
279 ; GISEL-LABEL: test_v8f16.sqrt:
280 ; GISEL-NOFP16-COUNT-8: fsqrt s{{[0-9]+}}, s{{[0-9]+}}
281 ; GISEL-FP16-NOT: fcvt
282 ; GISEL-FP16: fsqrt.8h
283 ; GISEL-FP16-NEXT: ret
284 %1 = call %v8f16 @llvm.sqrt.v8f16(%v8f16 %a)
287 define %v8f16 @test_v8f16.powi(%v8f16 %a, i32 %b) {
288 ; This operation is expanded, whether with or without +fullfp16.
289 ; CHECK-LABEL: test_v8f16.powi:
290 ; CHECK-COUNT-8: bl __powi
291 ; GISEL-LABEL: test_v8f16.powi:
292 ; GISEL-COUNT-8: bl __powi
293 %1 = call %v8f16 @llvm.powi.v8f16(%v8f16 %a, i32 %b)
297 ; FALLBACK-NOT: remark{{.*}}test_v8f16.sin
298 define %v8f16 @test_v8f16.sin(%v8f16 %a) {
299 ; This operation is expanded, whether with or without +fullfp16.
300 ; CHECK-LABEL: test_v8f16.sin:
301 ; CHECK-COUNT-8: bl sinf
302 ; GISEL-LABEL: test_v8f16.sin:
303 ; GISEL-COUNT-8: bl sinf
304 %1 = call %v8f16 @llvm.sin.v8f16(%v8f16 %a)
308 ; FALLBACK-NOT: remark{{.*}}test_v8f16.cos
309 define %v8f16 @test_v8f16.cos(%v8f16 %a) {
310 ; This operation is expanded, whether with or without +fullfp16.
311 ; CHECK-LABEL: test_v8f16.cos:
312 ; CHECK-COUNT-8: bl cosf
313 ; GISEL-LABEL: test_v8f16.cos:
314 ; GISEL-COUNT-8: bl cosf
315 %1 = call %v8f16 @llvm.cos.v8f16(%v8f16 %a)
319 ; FALLBACK-NOT: remark{{.*}}test_v8f16.pow
320 define %v8f16 @test_v8f16.pow(%v8f16 %a, %v8f16 %b) {
321 ; This operation is expanded, whether with or without +fullfp16.
322 ; CHECK-LABEL: test_v8f16.pow:
323 ; CHECK-COUNT-8: bl pow
324 ; GISEL-LABEL: test_v8f16.pow:
325 ; GISEL-COUNT-8: bl pow
326 %1 = call %v8f16 @llvm.pow.v8f16(%v8f16 %a, %v8f16 %b)
330 ; FALLBACK-NOT: remark{{.*}}test_v8f16.exp
331 define %v8f16 @test_v8f16.exp(%v8f16 %a) {
332 ; This operation is expanded, whether with or without +fullfp16.
333 ; CHECK-LABEL: test_v8f16.exp:
334 ; CHECK-COUNT-8: bl exp
335 ; GISEL-LABEL: test_v8f16.exp:
336 ; GISEL-COUNT-8: bl exp
337 %1 = call %v8f16 @llvm.exp.v8f16(%v8f16 %a)
340 define %v8f16 @test_v8f16.exp2(%v8f16 %a) {
341 ; This operation is expanded, whether with or without +fullfp16.
342 ; CHECK-LABEL: test_v8f16.exp2:
343 ; CHECK-COUNT-8: bl exp2
344 %1 = call %v8f16 @llvm.exp2.v8f16(%v8f16 %a)
348 ; FALLBACK-NOT: remark{{.*}}test_v8f16.log
349 define %v8f16 @test_v8f16.log(%v8f16 %a) {
350 ; This operation is expanded, whether with or without +fullfp16.
351 ; CHECK-LABEL: test_v8f16.log:
352 ; CHECK-COUNT-8: bl log
353 ; GISEL-LABEL: test_v8f16.log:
354 ; GISEL-COUNT-8: bl log
355 %1 = call %v8f16 @llvm.log.v8f16(%v8f16 %a)
359 ; FALLBACK-NOT: remark{{.*}}test_v8f16.log10
360 define %v8f16 @test_v8f16.log10(%v8f16 %a) {
361 ; This operation is expanded, whether with or without +fullfp16.
362 ; CHECK-LABEL: test_v8f16.log10:
363 ; CHECK-COUNT-8: bl log10
364 ; GISEL-LABEL: test_v8f16.log10:
365 ; GISEL-COUNT-8: bl log10
366 %1 = call %v8f16 @llvm.log10.v8f16(%v8f16 %a)
370 ; FALLBACK-NOT: remark{{.*}}test_v8f16.log2
371 define %v8f16 @test_v8f16.log2(%v8f16 %a) {
372 ; This operation is expanded, whether with or without +fullfp16.
373 ; CHECK-LABEL: test_v8f16.log2:
374 ; CHECK-COUNT-8: bl log2
375 ; GISEL-LABEL: test_v8f16.log2:
376 ; GISEL-COUNT-8: bl log2
377 %1 = call %v8f16 @llvm.log2.v8f16(%v8f16 %a)
381 ; FALLBACK-NOT: remark{{.*}}test_v8f16.fma
382 define %v8f16 @test_v8f16.fma(%v8f16 %a, %v8f16 %b, %v8f16 %c) {
383 ; CHECK-LABEL: test_v8f16.fma:
384 ; CHECK-NOFP16-COUNT-8: fmadd s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}
385 ; CHECK-FP16-NOT: fcvt
386 ; CHECK-FP16: fmla.8h
387 ; GISEL-LABEL: test_v8f16.fma:
388 ; GISEL-NOFP16-COUNT-8: fmadd s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}
389 ; GISEL-FP16-NOT: fcvt
390 ; GISEL-FP16: fmla.8h
391 %1 = call %v8f16 @llvm.fma.v8f16(%v8f16 %a, %v8f16 %b, %v8f16 %c)
395 ; FALLBACK-NOT: remark{{.*}}test_v8f16.fabs
396 define %v8f16 @test_v8f16.fabs(%v8f16 %a) {
397 ; CHECK-LABEL: test_v8f16.fabs:
398 ; CHECK-NOFP16-COUNT-8: fabs s{{[0-9]+}}, s{{[0-9]+}}
399 ; CHECK-FP16-NOT: fcvt
400 ; CHECK-FP16: fabs.8h
401 ; CHECK-FP16-NEXT: ret
403 ; GISEL-LABEL: test_v8f16.fabs:
404 ; GISEL-NOFP16-COUNT-8: fabs s{{[0-9]+}}, s{{[0-9]+}}
405 ; GISEL-FP16-NOT: fcvt
406 ; GISEL-FP16: fabs.8h
407 ; GISEL-FP16-NEXT: ret
408 %1 = call %v8f16 @llvm.fabs.v8f16(%v8f16 %a)
412 ; FALLBACK-NOT: remark{{.*}}test_v8f16.floor
413 define %v8f16 @test_v8f16.floor(%v8f16 %a) {
414 ; CHECK-LABEL: test_v8f16.floor:
415 ; CHECK-NOFP16-COUNT-8: frintm s{{[0-9]+}}, s{{[0-9]+}}
416 ; CHECK-FP16-NOT: fcvt
417 ; CHECK-FP16: frintm.8h
418 ; CHECK-FP16-NEXT: ret
420 ; GISEL-LABEL: test_v8f16.floor:
421 ; GISEL-NOFP16-COUNT-8: frintm s{{[0-9]+}}, s{{[0-9]+}}
422 ; GISEL-FP16-NOT: fcvt
423 ; GISEL-FP16: frintm.8h
424 ; GISEL-FP16-NEXT: ret
425 %1 = call %v8f16 @llvm.floor.v8f16(%v8f16 %a)
428 define %v8f16 @test_v8f16.ceil(%v8f16 %a) {
429 ; CHECK-LABEL: test_v8f16.ceil:
430 ; CHECK-NOFP16-COUNT-8: frintp s{{[0-9]+}}, s{{[0-9]+}}
431 ; CHECK-FP16-NOT: fcvt
432 ; CHECK-FP16: frintp.8h
433 ; CHECK-FP16-NEXT: ret
434 ; FALLBACK-NOT: remark{{.*}}test_v8f16.ceil:
435 ; GISEL-LABEL: test_v8f16.ceil:
436 ; GISEL-NOFP16-COUNT-8: frintp s{{[0-9]+}}, s{{[0-9]+}}
437 ; GISEL-FP16-NOT: fcvt
438 ; GISEL-FP16: frintp.8h
439 ; GISEL-FP16-NEXT: ret
440 %1 = call %v8f16 @llvm.ceil.v8f16(%v8f16 %a)
444 ; FALLBACK-NOT: remark{{.*}}test_v8f16.trunc
445 define %v8f16 @test_v8f16.trunc(%v8f16 %a) {
446 ; CHECK-LABEL: test_v8f16.trunc:
447 ; CHECK-NOFP16-COUNT-8: frintz s{{[0-9]+}}, s{{[0-9]+}}
448 ; CHECK-FP16-NOT: fcvt
449 ; CHECK-FP16: frintz.8h
450 ; CHECK-FP16-NEXT: ret
451 ; GISEL-LABEL: test_v8f16.trunc:
452 ; GISEL-NOFP16-COUNT-8: frintz s{{[0-9]+}}, s{{[0-9]+}}
453 ; GISEL-FP16-NOT: fcvt
454 ; GISEL-FP16: frintz.8h
455 ; GISEL-FP16-NEXT: ret
456 %1 = call %v8f16 @llvm.trunc.v8f16(%v8f16 %a)
460 ; FALLBACK-NOT: remark{{.*}}test_v8f16.rint
461 define %v8f16 @test_v8f16.rint(%v8f16 %a) {
462 ; CHECK-LABEL: test_v8f16.rint:
463 ; CHECK-NOFP16-COUNT-8: frintx s{{[0-9]+}}, s{{[0-9]+}}
464 ; CHECK-FP16-NOT: fcvt
465 ; CHECK-FP16: frintx.8h
466 ; CHECK-FP16-NEXT: ret
467 ; GISEL-LABEL: test_v8f16.rint:
468 ; GISEL-NOFP16-COUNT-8: frintx s{{[0-9]+}}, s{{[0-9]+}}
469 ; GISEL-FP16-NOT: fcvt
470 ; GISEL-FP16: frintx.8h
471 ; GISEL-FP16-NEXT: ret
472 %1 = call %v8f16 @llvm.rint.v8f16(%v8f16 %a)
476 ; FALLBACK-NOT: remark{{.*}}test_v8f16.nearbyint
477 define %v8f16 @test_v8f16.nearbyint(%v8f16 %a) {
478 ; CHECK-LABEL: test_v8f16.nearbyint:
479 ; CHECK-NOFP16-COUNT-8: frinti s{{[0-9]+}}, s{{[0-9]+}}
480 ; CHECK-FP16-NOT: fcvt
481 ; CHECK-FP16: frinti.8h
482 ; CHECK-FP16-NEXT: ret
483 ; GISEL-LABEL: test_v8f16.nearbyint:
484 ; GISEL-NOFP16-COUNT-8: frinti s{{[0-9]+}}, s{{[0-9]+}}
485 ; GISEL-FP16-NOT: fcvt
486 ; GISEL-FP16: frinti.8h
487 ; GISEL-FP16-NEXT: ret
488 %1 = call %v8f16 @llvm.nearbyint.v8f16(%v8f16 %a)
491 define %v8f16 @test_v8f16.round(%v8f16 %a) {
492 ; CHECK-LABEL: test_v8f16.round:
493 ; CHECK-NOFP16-COUNT-8: frinta s{{[0-9]+}}, s{{[0-9]+}}
494 ; CHECK-FP16-NOT: fcvt
495 ; CHECK-FP16: frinta.8h
496 ; CHECK-FP16-NEXT: ret
497 ; GISEL-LABEL: test_v8f16.round:
498 ; GISEL-NOFP16-COUNT-8: frinta s{{[0-9]+}}, s{{[0-9]+}}
499 ; GISEL-FP16-NOT: fcvt
500 ; GISEL-FP16: frinta.8h
501 ; GISEL-FP16-NEXT: ret
502 %1 = call %v8f16 @llvm.round.v8f16(%v8f16 %a)
506 declare %v8f16 @llvm.sqrt.v8f16(%v8f16) #0
507 declare %v8f16 @llvm.powi.v8f16(%v8f16, i32) #0
508 declare %v8f16 @llvm.sin.v8f16(%v8f16) #0
509 declare %v8f16 @llvm.cos.v8f16(%v8f16) #0
510 declare %v8f16 @llvm.pow.v8f16(%v8f16, %v8f16) #0
511 declare %v8f16 @llvm.exp.v8f16(%v8f16) #0
512 declare %v8f16 @llvm.exp2.v8f16(%v8f16) #0
513 declare %v8f16 @llvm.log.v8f16(%v8f16) #0
514 declare %v8f16 @llvm.log10.v8f16(%v8f16) #0
515 declare %v8f16 @llvm.log2.v8f16(%v8f16) #0
516 declare %v8f16 @llvm.fma.v8f16(%v8f16, %v8f16, %v8f16) #0
517 declare %v8f16 @llvm.fabs.v8f16(%v8f16) #0
518 declare %v8f16 @llvm.floor.v8f16(%v8f16) #0
519 declare %v8f16 @llvm.ceil.v8f16(%v8f16) #0
520 declare %v8f16 @llvm.trunc.v8f16(%v8f16) #0
521 declare %v8f16 @llvm.rint.v8f16(%v8f16) #0
522 declare %v8f16 @llvm.nearbyint.v8f16(%v8f16) #0
523 declare %v8f16 @llvm.round.v8f16(%v8f16) #0
527 %v2f32 = type <2 x float>
529 ; FALLBACK-NOT: remark{{.*}}test_v2f32.sqrt
530 ; CHECK-LABEL: test_v2f32.sqrt:
531 ; GISEL-LABEL: test_v2f32.sqrt:
532 define %v2f32 @test_v2f32.sqrt(%v2f32 %a) {
535 %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a)
538 ; CHECK: test_v2f32.powi:
539 define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) {
541 %1 = call %v2f32 @llvm.powi.v2f32(%v2f32 %a, i32 %b)
545 ; FALLBACK-NOT: remark{{.*}}test_v2f32.sin
546 ; CHECK: test_v2f32.sin:
547 define %v2f32 @test_v2f32.sin(%v2f32 %a) {
550 %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a)
554 ; FALLBACK-NOT: remark{{.*}}test_v2f32.cos
555 ; CHECK: test_v2f32.cos:
556 define %v2f32 @test_v2f32.cos(%v2f32 %a) {
559 %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a)
563 ; FALLBACK-NOT: remark{{.*}}test_v2f32.pow
564 ; CHECK: test_v2f32.pow:
565 ; GISEL-LABEL: test_v2f32.pow:
566 define %v2f32 @test_v2f32.pow(%v2f32 %a, %v2f32 %b) {
569 %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b)
573 ; FALLBACK-NOT: remark{{.*}}test_v2f32.exp
574 ; CHECK: test_v2f32.exp:
575 ; GISEL: test_v2f32.exp:
576 define %v2f32 @test_v2f32.exp(%v2f32 %a) {
579 %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a)
582 ; CHECK: test_v2f32.exp2:
583 define %v2f32 @test_v2f32.exp2(%v2f32 %a) {
585 %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a)
589 ; FALLBACK-NOT: remark{{.*}}test_v2f32.log
590 ; CHECK: test_v2f32.log:
591 define %v2f32 @test_v2f32.log(%v2f32 %a) {
594 %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a)
598 ; FALLBACK-NOT: remark{{.*}}test_v2f32.log10
599 ; CHECK: test_v2f32.log10:
600 ; GISEL: test_v2f32.log10:
601 define %v2f32 @test_v2f32.log10(%v2f32 %a) {
604 %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a)
608 ; FALLBACK-NOT: remark{{.*}}test_v2f32.log2
609 ; CHECK: test_v2f32.log2:
610 ; GISEL: test_v2f32.log2:
611 define %v2f32 @test_v2f32.log2(%v2f32 %a) {
614 %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a)
618 ; FALLBACK-NOT: remark{{.*}}test_v2f32.fma
619 ; CHECK-LABEL: test_v2f32.fma:
620 ; GISEL-LABEL: test_v2f32.fma:
621 define %v2f32 @test_v2f32.fma(%v2f32 %a, %v2f32 %b, %v2f32 %c) {
624 %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c)
628 ; FALLBACK-NOT: remark{{.*}}test_v2f32.fabs
629 ; CHECK-LABEL: test_v2f32.fabs:
630 ; GISEL-LABEL: test_v2f32.fabs:
631 define %v2f32 @test_v2f32.fabs(%v2f32 %a) {
634 %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a)
638 ; FALLBACK-NOT: remark{{.*}}test_v2f32.floor
639 ; CHECK-LABEL: test_v2f32.floor:
640 ; GISEL-LABEL: test_v2f32.floor:
641 define %v2f32 @test_v2f32.floor(%v2f32 %a) {
644 %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a)
647 ; CHECK-LABEL: test_v2f32.ceil:
648 ; FALLBACK-NOT: remark{{.*}}test_v2f32.ceil
649 ; GISEL-LABEL: test_v2f32.ceil:
650 define %v2f32 @test_v2f32.ceil(%v2f32 %a) {
653 %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a)
656 ; CHECK-LABEL: test_v2f32.trunc:
657 ; FALLBACK-NOT: remark{{.*}}test_v2f32.trunc
658 ; GISEL-LABEL: test_v2f32.trunc:
659 define %v2f32 @test_v2f32.trunc(%v2f32 %a) {
662 %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a)
665 ; CHECK-LABEL: test_v2f32.rint:
666 ; FALLBACK-NOT: remark{{.*}}test_v2f32.rint
667 ; GISEL-LABEL: test_v2f32.rint:
668 define %v2f32 @test_v2f32.rint(%v2f32 %a) {
671 %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a)
675 ; FALLBACK-NOT: remark{{.*}}test_v2f32.nearbyint
676 ; CHECK-LABEL: test_v2f32.nearbyint:
677 ; GISEL-LABEL: test_v2f32.nearbyint:
678 define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) {
681 %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a)
685 declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0
686 declare %v2f32 @llvm.powi.v2f32(%v2f32, i32) #0
687 declare %v2f32 @llvm.sin.v2f32(%v2f32) #0
688 declare %v2f32 @llvm.cos.v2f32(%v2f32) #0
689 declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0
690 declare %v2f32 @llvm.exp.v2f32(%v2f32) #0
691 declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0
692 declare %v2f32 @llvm.log.v2f32(%v2f32) #0
693 declare %v2f32 @llvm.log10.v2f32(%v2f32) #0
694 declare %v2f32 @llvm.log2.v2f32(%v2f32) #0
695 declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0
696 declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0
697 declare %v2f32 @llvm.floor.v2f32(%v2f32) #0
698 declare %v2f32 @llvm.ceil.v2f32(%v2f32) #0
699 declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0
700 declare %v2f32 @llvm.rint.v2f32(%v2f32) #0
701 declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0
705 %v4f32 = type <4 x float>
707 ; FALLBACK-NOT: remark{{.*}}test_v4f32.sqrt
708 ; CHECK: test_v4f32.sqrt:
709 ; GISEL: test_v4f32.sqrt:
710 define %v4f32 @test_v4f32.sqrt(%v4f32 %a) {
713 %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a)
716 ; CHECK: test_v4f32.powi:
717 define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) {
719 %1 = call %v4f32 @llvm.powi.v4f32(%v4f32 %a, i32 %b)
723 ; FALLBACK-NOT: remark{{.*}}test_v4f32.sin
724 ; CHECK: test_v4f32.sin:
725 define %v4f32 @test_v4f32.sin(%v4f32 %a) {
728 %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a)
732 ; FALLBACK-NOT: remark{{.*}}test_v4f32.cos
733 ; CHECK: test_v4f32.cos:
734 define %v4f32 @test_v4f32.cos(%v4f32 %a) {
737 %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a)
741 ; FALLBACK-NOT: remark{{.*}}test_v4f32.pow
742 ; CHECK: test_v4f32.pow:
743 ; GISEL-LABEL: test_v4f32.pow:
744 define %v4f32 @test_v4f32.pow(%v4f32 %a, %v4f32 %b) {
747 %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b)
751 ; FALLBACK-NOT: remark{{.*}}test_v4f32.exp
752 ; CHECK: test_v4f32.exp:
753 ; GISEL: test_v4f32.exp:
754 define %v4f32 @test_v4f32.exp(%v4f32 %a) {
757 %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a)
760 ; CHECK: test_v4f32.exp2:
761 define %v4f32 @test_v4f32.exp2(%v4f32 %a) {
763 %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a)
767 ; FALLBACK-NOT: remark{{.*}}test_v4f32.log
768 ; CHECK: test_v4f32.log:
769 define %v4f32 @test_v4f32.log(%v4f32 %a) {
772 %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a)
776 ; FALLBACK-NOT: remark{{.*}}test_v4f32.log10
777 ; CHECK: test_v4f32.log10:
778 define %v4f32 @test_v4f32.log10(%v4f32 %a) {
781 %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a)
785 ; FALLBACK-NOT: remark{{.*}}test_v4f32.log2
786 ; CHECK: test_v4f32.log2:
787 ; GISEL: test_v4f32.log2:
788 define %v4f32 @test_v4f32.log2(%v4f32 %a) {
791 %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a)
795 ; FALLBACK-NOT: remark{{.*}}test_v4f32.fma
796 ; CHECK: test_v4f32.fma:
797 ; GISEL: test_v4f32.fma:
798 define %v4f32 @test_v4f32.fma(%v4f32 %a, %v4f32 %b, %v4f32 %c) {
801 %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c)
805 ; FALLBACK-NOT: remark{{.*}}test_v4f32.fabs
806 ; CHECK: test_v4f32.fabs:
807 ; GISEL: test_v4f32.fabs:
808 define %v4f32 @test_v4f32.fabs(%v4f32 %a) {
811 %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a)
815 ; FALLBACK-NOT: remark{{.*}}test_v4f32.floor
816 ; CHECK: test_v4f32.floor:
817 ; GISEL: test_v4f32.floor:
818 define %v4f32 @test_v4f32.floor(%v4f32 %a) {
821 %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a)
824 ; CHECK: test_v4f32.ceil:
825 ; FALLBACK-NOT: remark{{.*}}test_v4f32.ceil
826 ; GISEL-LABEL: test_v4f32.ceil:
827 define %v4f32 @test_v4f32.ceil(%v4f32 %a) {
830 %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a)
833 ; CHECK: test_v4f32.trunc:
834 ; FALLBACK-NOT: remark{{.*}}test_v4f32.trunc
835 ; GISEL: test_v4f32.trunc:
836 define %v4f32 @test_v4f32.trunc(%v4f32 %a) {
839 %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a)
842 ; CHECK: test_v4f32.rint:
843 ; FALLBACK-NOT: remark{{.*}}test_v4f32.rint
844 ; GISEL: test_v4f32.rint:
845 define %v4f32 @test_v4f32.rint(%v4f32 %a) {
848 %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a)
852 ; FALLBACK-NOT: remark{{.*}}test_v4f32.nearbyint
853 ; CHECK: test_v4f32.nearbyint:
854 ; GISEL: test_v4f32.nearbyint:
855 define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) {
858 %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a)
862 declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0
863 declare %v4f32 @llvm.powi.v4f32(%v4f32, i32) #0
864 declare %v4f32 @llvm.sin.v4f32(%v4f32) #0
865 declare %v4f32 @llvm.cos.v4f32(%v4f32) #0
866 declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0
867 declare %v4f32 @llvm.exp.v4f32(%v4f32) #0
868 declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0
869 declare %v4f32 @llvm.log.v4f32(%v4f32) #0
870 declare %v4f32 @llvm.log10.v4f32(%v4f32) #0
871 declare %v4f32 @llvm.log2.v4f32(%v4f32) #0
872 declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0
873 declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0
874 declare %v4f32 @llvm.floor.v4f32(%v4f32) #0
875 declare %v4f32 @llvm.ceil.v4f32(%v4f32) #0
876 declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0
877 declare %v4f32 @llvm.rint.v4f32(%v4f32) #0
878 declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0
882 %v2f64 = type <2 x double>
883 ; FALLBACK-NOT: remark{{.*}}test_v2f64.sqrt
884 ; CHECK: test_v2f64.sqrt:
885 ; GISEL: test_v2f64.sqrt:
886 define %v2f64 @test_v2f64.sqrt(%v2f64 %a) {
889 %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a)
892 ; CHECK: test_v2f64.powi:
893 define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) {
895 %1 = call %v2f64 @llvm.powi.v2f64(%v2f64 %a, i32 %b)
899 ; FALLBACK-NOT: remark{{.*}}test_v2f64.sin
900 ; CHECK: test_v2f64.sin:
901 define %v2f64 @test_v2f64.sin(%v2f64 %a) {
904 %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a)
908 ; FALLBACK-NOT: remark{{.*}}test_v2f64.cos
909 ; CHECK: test_v2f64.cos:
910 define %v2f64 @test_v2f64.cos(%v2f64 %a) {
913 %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a)
917 ; FALLBACK-NOT: remark{{.*}}test_v2f64.pow
918 ; CHECK: test_v2f64.pow:
919 ; GISEL-LABEL: test_v2f64.pow:
920 define %v2f64 @test_v2f64.pow(%v2f64 %a, %v2f64 %b) {
923 %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b)
927 ; FALLBACK-NOT: remark{{.*}}test_v2f64.exp
928 ; CHECK: test_v2f64.exp:
929 ; GISEL: test_v2f64.exp:
930 define %v2f64 @test_v2f64.exp(%v2f64 %a) {
933 %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a)
936 ; CHECK: test_v2f64.exp2:
937 define %v2f64 @test_v2f64.exp2(%v2f64 %a) {
939 %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a)
943 ; FALLBACK-NOT: remark{{.*}}test_v2f64.log
944 ; CHECK: test_v2f64.log:
945 define %v2f64 @test_v2f64.log(%v2f64 %a) {
948 %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a)
952 ; FALLBACK-NOT: remark{{.*}}test_v2f64.log10
953 ; CHECK: test_v2f64.log10:
954 ; GISEL: test_v2f64.log10:
955 define %v2f64 @test_v2f64.log10(%v2f64 %a) {
958 %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a)
962 ; FALLBACK-NOT: remark{{.*}}test_v2f64.log2
963 ; CHECK: test_v2f64.log2:
964 ; GISEL: test_v2f64.log2:
965 define %v2f64 @test_v2f64.log2(%v2f64 %a) {
968 %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a)
972 ; FALLBACK-NOT: remark{{.*}}test_v2f64.fma
973 ; CHECK: test_v2f64.fma:
974 ; GISEL: test_v2f64.fma:
975 define %v2f64 @test_v2f64.fma(%v2f64 %a, %v2f64 %b, %v2f64 %c) {
978 %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c)
982 ; FALLBACK-NOT: remark{{.*}}test_v2f64.fabs
983 ; CHECK: test_v2f64.fabs:
984 ; GISEL: test_v2f64.fabs:
985 define %v2f64 @test_v2f64.fabs(%v2f64 %a) {
988 %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a)
992 ; FALLBACK-NOT: remark{{.*}}test_v2f64.floor
993 ; CHECK: test_v2f64.floor:
994 ; GISEL: test_v2f64.floor:
995 define %v2f64 @test_v2f64.floor(%v2f64 %a) {
998 %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a)
1001 ; CHECK: test_v2f64.ceil:
1002 ; FALLBACK-NOT: remark{{.*}}test_v2f64.ceil
1003 ; GISEL-LABEL: test_v2f64.ceil:
1004 define %v2f64 @test_v2f64.ceil(%v2f64 %a) {
1007 %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a)
1010 ; CHECK: test_v2f64.trunc:
1011 ; FALLBACK-NOT: remark{{.*}}test_v2f64.trunc
1012 ; GISEL: test_v2f64.trunc:
1013 define %v2f64 @test_v2f64.trunc(%v2f64 %a) {
1016 %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a)
1019 ; CHECK: test_v2f64.rint:
1020 ; FALLBACK-NOT: remark{{.*}}test_v2f64.rint
1021 ; GISEL: test_v2f64.rint:
1022 define %v2f64 @test_v2f64.rint(%v2f64 %a) {
1025 %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a)
1029 ; FALLBACK-NOT: remark{{.*}}test_v2f64.nearbyint
1030 ; CHECK: test_v2f64.nearbyint:
1031 ; GISEL: test_v2f64.nearbyint:
1032 define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) {
1035 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a)
1039 declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0
1040 declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0
1041 declare %v2f64 @llvm.sin.v2f64(%v2f64) #0
1042 declare %v2f64 @llvm.cos.v2f64(%v2f64) #0
1043 declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0
1044 declare %v2f64 @llvm.exp.v2f64(%v2f64) #0
1045 declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0
1046 declare %v2f64 @llvm.log.v2f64(%v2f64) #0
1047 declare %v2f64 @llvm.log10.v2f64(%v2f64) #0
1048 declare %v2f64 @llvm.log2.v2f64(%v2f64) #0
1049 declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0
1050 declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0
1051 declare %v2f64 @llvm.floor.v2f64(%v2f64) #0
1052 declare %v2f64 @llvm.ceil.v2f64(%v2f64) #0
1053 declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0
1054 declare %v2f64 @llvm.rint.v2f64(%v2f64) #0
1055 declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0
1057 attributes #0 = { nounwind readonly }