Revert 374373: [Codegen] Alter the default promotion for saturating adds and subs
[llvm-core.git] / test / CodeGen / AArch64 / arm64-vfloatintrinsics.ll
blob339c8772ce8ff2606b802e75aafcb2d5e25f9983
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
13 ;;; Half vectors
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)
30   ret %v4f16 %1
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)
37   ret %v4f16 %1
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)
48   ret %v4f16 %1
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)
59   ret %v4f16 %1
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)
70   ret %v4f16 %1
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)
81   ret %v4f16 %1
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)
88   ret %v4f16 %1
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)
99   ret %v4f16 %1
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)
110   ret %v4f16 %1
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)
121   ret %v4f16 %1
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)
135   ret %v4f16 %1
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)
152   ret %v4f16 %1
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)
169   ret %v4f16 %1
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)
184   ret %v4f16 %1
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)
200   ret %v4f16 %1
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)
216   ret %v4f16 %1
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)
232   ret %v4f16 %1
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)
246   ret %v4f16 %1
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)
285   ret %v8f16 %1
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)
294   ret %v8f16 %1
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)
305   ret %v8f16 %1
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)
316   ret %v8f16 %1
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)
327   ret %v8f16 %1
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)
338   ret %v8f16 %1
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)
345   ret %v8f16 %1
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)
356   ret %v8f16 %1
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)
367   ret %v8f16 %1
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)
378   ret %v8f16 %1
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)
392   ret %v8f16 %1
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)
409   ret %v8f16 %1
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)
426   ret %v8f16 %1
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)
441   ret %v8f16 %1
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)
457   ret %v8f16 %1
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)
473   ret %v8f16 %1
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)
489   ret %v8f16 %1
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)
503   ret %v8f16 %1
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
525 ;;; Float vectors
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) {
533   ; CHECK: fsqrt.2s
534   ; GISEL: fsqrt.2s
535   %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a)
536   ret %v2f32 %1
538 ; CHECK: test_v2f32.powi:
539 define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) {
540   ; CHECK: pow
541   %1 = call %v2f32 @llvm.powi.v2f32(%v2f32 %a, i32 %b)
542   ret %v2f32 %1
545 ; FALLBACK-NOT: remark{{.*}}test_v2f32.sin
546 ; CHECK: test_v2f32.sin:
547 define %v2f32 @test_v2f32.sin(%v2f32 %a) {
548   ; CHECK: sin
549   ; GISEL: sin
550   %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a)
551   ret %v2f32 %1
554 ; FALLBACK-NOT: remark{{.*}}test_v2f32.cos
555 ; CHECK: test_v2f32.cos:
556 define %v2f32 @test_v2f32.cos(%v2f32 %a) {
557   ; CHECK: cos
558   ; GISEL: cos
559   %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a)
560   ret %v2f32 %1
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) {
567   ; CHECK: pow
568   ; GISEL: pow
569   %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b)
570   ret %v2f32 %1
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) {
577   ; CHECK: exp
578   ; GISEL: exp
579   %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a)
580   ret %v2f32 %1
582 ; CHECK: test_v2f32.exp2:
583 define %v2f32 @test_v2f32.exp2(%v2f32 %a) {
584   ; CHECK: exp
585   %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a)
586   ret %v2f32 %1
589 ; FALLBACK-NOT: remark{{.*}}test_v2f32.log
590 ; CHECK: test_v2f32.log:
591 define %v2f32 @test_v2f32.log(%v2f32 %a) {
592   ; CHECK: log
593   ; GISEL: log
594   %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a)
595   ret %v2f32 %1
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) {
602   ; CHECK: log
603   ; GISEL: log
604   %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a)
605   ret %v2f32 %1
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) {
612   ; CHECK: log
613   ; GISEL: log
614   %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a)
615   ret %v2f32 %1
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) {
622   ; CHECK: fmla.2s
623   ; GISEL: fmla.2s
624   %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c)
625   ret %v2f32 %1
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) {
632   ; CHECK: fabs.2s
633   ; GISEL: fabs.2s
634   %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a)
635   ret %v2f32 %1
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) {
642   ; CHECK: frintm.2s
643   ; GISEL: frintm.2s
644   %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a)
645   ret %v2f32 %1
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) {
651   ; CHECK: frintp.2s
652   ; GISEL: frintp.2s
653   %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a)
654   ret %v2f32 %1
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) {
660   ; CHECK: frintz.2s
661   ; GISEL: frintz.2s
662   %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a)
663   ret %v2f32 %1
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) {
669   ; CHECK: frintx.2s
670   ; GISEL: frintx.2s
671   %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a)
672   ret %v2f32 %1
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) {
679   ; CHECK: frinti.2s
680   ; GISEL: frinti.2s
681   %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a)
682   ret %v2f32 %1
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) {
711   ; CHECK: fsqrt.4s
712   ; GISEL: fsqrt.4s
713   %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a)
714   ret %v4f32 %1
716 ; CHECK: test_v4f32.powi:
717 define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) {
718   ; CHECK: pow
719   %1 = call %v4f32 @llvm.powi.v4f32(%v4f32 %a, i32 %b)
720   ret %v4f32 %1
723 ; FALLBACK-NOT: remark{{.*}}test_v4f32.sin
724 ; CHECK: test_v4f32.sin:
725 define %v4f32 @test_v4f32.sin(%v4f32 %a) {
726   ; CHECK: sin
727   ; GISEL: sin
728   %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a)
729   ret %v4f32 %1
732 ; FALLBACK-NOT: remark{{.*}}test_v4f32.cos
733 ; CHECK: test_v4f32.cos:
734 define %v4f32 @test_v4f32.cos(%v4f32 %a) {
735   ; CHECK: cos
736   ; GISEL: cos
737   %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a)
738   ret %v4f32 %1
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) {
745   ; CHECK: pow
746   ; GISEL: pow
747   %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b)
748   ret %v4f32 %1
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) {
755   ; CHECK: exp
756   ; GISEL: exp
757   %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a)
758   ret %v4f32 %1
760 ; CHECK: test_v4f32.exp2:
761 define %v4f32 @test_v4f32.exp2(%v4f32 %a) {
762   ; CHECK: exp
763   %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a)
764   ret %v4f32 %1
767 ; FALLBACK-NOT: remark{{.*}}test_v4f32.log
768 ; CHECK: test_v4f32.log:
769 define %v4f32 @test_v4f32.log(%v4f32 %a) {
770   ; CHECK: log
771   ; GISEL: log
772   %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a)
773   ret %v4f32 %1
776 ; FALLBACK-NOT: remark{{.*}}test_v4f32.log10
777 ; CHECK: test_v4f32.log10:
778 define %v4f32 @test_v4f32.log10(%v4f32 %a) {
779   ; CHECK: log
780   ; GISEL: log
781   %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a)
782   ret %v4f32 %1
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) {
789   ; CHECK: log
790   ; GISEL: log
791   %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a)
792   ret %v4f32 %1
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) {
799   ; CHECK: fma
800   ; GISEL: fma
801   %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c)
802   ret %v4f32 %1
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) {
809   ; CHECK: fabs
810   ; GISEL: fabs
811   %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a)
812   ret %v4f32 %1
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) {
819   ; CHECK: frintm.4s
820   ; GISEL frintm.4s
821   %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a)
822   ret %v4f32 %1
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) {
828   ; CHECK: frintp.4s
829   ; GISEL: frintp.4s
830   %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a)
831   ret %v4f32 %1
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) {
837   ; CHECK: frintz.4s
838   ; GISEL: frintz.4s
839   %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a)
840   ret %v4f32 %1
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) {
846   ; CHECK: frintx.4s
847   ; GISEL: frintx.4s
848   %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a)
849   ret %v4f32 %1
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) {
856   ; CHECK: frinti.4s
857   ; GISEL: frinti.4s
858   %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a)
859   ret %v4f32 %1
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
880 ;;; Double vector
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) {
887   ; CHECK: fsqrt.2d
888   ; GISEL: fsqrt.2d
889   %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a)
890   ret %v2f64 %1
892 ; CHECK: test_v2f64.powi:
893 define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) {
894   ; CHECK: pow
895   %1 = call %v2f64 @llvm.powi.v2f64(%v2f64 %a, i32 %b)
896   ret %v2f64 %1
899 ; FALLBACK-NOT: remark{{.*}}test_v2f64.sin
900 ; CHECK: test_v2f64.sin:
901 define %v2f64 @test_v2f64.sin(%v2f64 %a) {
902   ; CHECK: sin
903   ; GISEL: sin
904   %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a)
905   ret %v2f64 %1
908 ; FALLBACK-NOT: remark{{.*}}test_v2f64.cos
909 ; CHECK: test_v2f64.cos:
910 define %v2f64 @test_v2f64.cos(%v2f64 %a) {
911   ; CHECK: cos
912   ; GISEL: cos
913   %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a)
914   ret %v2f64 %1
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) {
921   ; CHECK: pow
922   ; GISEL: pow
923   %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b)
924   ret %v2f64 %1
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) {
931   ; CHECK: exp
932   ; GISEL: exp
933   %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a)
934   ret %v2f64 %1
936 ; CHECK: test_v2f64.exp2:
937 define %v2f64 @test_v2f64.exp2(%v2f64 %a) {
938   ; CHECK: exp
939   %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a)
940   ret %v2f64 %1
943 ; FALLBACK-NOT: remark{{.*}}test_v2f64.log
944 ; CHECK: test_v2f64.log:
945 define %v2f64 @test_v2f64.log(%v2f64 %a) {
946   ; CHECK: log
947   ; GISEL: log
948   %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a)
949   ret %v2f64 %1
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) {
956   ; CHECK: log
957   ; GISEL: log
958   %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a)
959   ret %v2f64 %1
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) {
966   ; CHECK: log
967   ; GISEL: log
968   %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a)
969   ret %v2f64 %1
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) {
976   ; CHECK: fma
977   ; GISEL: fma
978   %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c)
979   ret %v2f64 %1
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) {
986   ; CHECK: fabs
987   ; GISEL: fabs
988   %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a)
989   ret %v2f64 %1
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) {
996   ; CHECK: frintm.2d
997   ; GISEL: frintm.2d
998   %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a)
999   ret %v2f64 %1
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) {
1005   ; CHECK: frintp.2d
1006   ; GISEL: frintp.2d
1007   %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a)
1008   ret %v2f64 %1
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) {
1014   ; CHECK: frintz.2d
1015   ; GISEL: frintz.2d
1016   %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a)
1017   ret %v2f64 %1
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) {
1023   ; CHECK: frintx.2d
1024   ; GISEL: frintx.2d
1025   %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a)
1026   ret %v2f64 %1
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) {
1033   ; CHECK: frinti.2d
1034   ; GISEL: frinti.2d
1035   %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a)
1036   ret %v2f64 %1
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 }