1 ; RUN: llc -march=arm64 -arm64-neon-syntax=apple < %s | FileCheck %s
5 %v2f32 = type <2 x float>
6 ; CHECK: test_v2f32.sqrt:
7 define %v2f32 @test_v2f32.sqrt(%v2f32 %a) {
9 %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a)
12 ; CHECK: test_v2f32.powi:
13 define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) {
15 %1 = call %v2f32 @llvm.powi.v2f32(%v2f32 %a, i32 %b)
18 ; CHECK: test_v2f32.sin:
19 define %v2f32 @test_v2f32.sin(%v2f32 %a) {
21 %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a)
24 ; CHECK: test_v2f32.cos:
25 define %v2f32 @test_v2f32.cos(%v2f32 %a) {
27 %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a)
30 ; CHECK: test_v2f32.pow:
31 define %v2f32 @test_v2f32.pow(%v2f32 %a, %v2f32 %b) {
33 %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b)
36 ; CHECK: test_v2f32.exp:
37 define %v2f32 @test_v2f32.exp(%v2f32 %a) {
39 %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a)
42 ; CHECK: test_v2f32.exp2:
43 define %v2f32 @test_v2f32.exp2(%v2f32 %a) {
45 %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a)
48 ; CHECK: test_v2f32.log:
49 define %v2f32 @test_v2f32.log(%v2f32 %a) {
51 %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a)
54 ; CHECK: test_v2f32.log10:
55 define %v2f32 @test_v2f32.log10(%v2f32 %a) {
57 %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a)
60 ; CHECK: test_v2f32.log2:
61 define %v2f32 @test_v2f32.log2(%v2f32 %a) {
63 %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a)
66 ; CHECK: test_v2f32.fma:
67 define %v2f32 @test_v2f32.fma(%v2f32 %a, %v2f32 %b, %v2f32 %c) {
69 %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c)
72 ; CHECK: test_v2f32.fabs:
73 define %v2f32 @test_v2f32.fabs(%v2f32 %a) {
75 %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a)
78 ; CHECK: test_v2f32.floor:
79 define %v2f32 @test_v2f32.floor(%v2f32 %a) {
81 %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a)
84 ; CHECK: test_v2f32.ceil:
85 define %v2f32 @test_v2f32.ceil(%v2f32 %a) {
87 %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a)
90 ; CHECK: test_v2f32.trunc:
91 define %v2f32 @test_v2f32.trunc(%v2f32 %a) {
93 %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a)
96 ; CHECK: test_v2f32.rint:
97 define %v2f32 @test_v2f32.rint(%v2f32 %a) {
99 %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a)
102 ; CHECK: test_v2f32.nearbyint:
103 define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) {
105 %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a)
109 declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0
110 declare %v2f32 @llvm.powi.v2f32(%v2f32, i32) #0
111 declare %v2f32 @llvm.sin.v2f32(%v2f32) #0
112 declare %v2f32 @llvm.cos.v2f32(%v2f32) #0
113 declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0
114 declare %v2f32 @llvm.exp.v2f32(%v2f32) #0
115 declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0
116 declare %v2f32 @llvm.log.v2f32(%v2f32) #0
117 declare %v2f32 @llvm.log10.v2f32(%v2f32) #0
118 declare %v2f32 @llvm.log2.v2f32(%v2f32) #0
119 declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0
120 declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0
121 declare %v2f32 @llvm.floor.v2f32(%v2f32) #0
122 declare %v2f32 @llvm.ceil.v2f32(%v2f32) #0
123 declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0
124 declare %v2f32 @llvm.rint.v2f32(%v2f32) #0
125 declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0
129 %v4f32 = type <4 x float>
130 ; CHECK: test_v4f32.sqrt:
131 define %v4f32 @test_v4f32.sqrt(%v4f32 %a) {
133 %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a)
136 ; CHECK: test_v4f32.powi:
137 define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) {
139 %1 = call %v4f32 @llvm.powi.v4f32(%v4f32 %a, i32 %b)
142 ; CHECK: test_v4f32.sin:
143 define %v4f32 @test_v4f32.sin(%v4f32 %a) {
145 %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a)
148 ; CHECK: test_v4f32.cos:
149 define %v4f32 @test_v4f32.cos(%v4f32 %a) {
151 %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a)
154 ; CHECK: test_v4f32.pow:
155 define %v4f32 @test_v4f32.pow(%v4f32 %a, %v4f32 %b) {
157 %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b)
160 ; CHECK: test_v4f32.exp:
161 define %v4f32 @test_v4f32.exp(%v4f32 %a) {
163 %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a)
166 ; CHECK: test_v4f32.exp2:
167 define %v4f32 @test_v4f32.exp2(%v4f32 %a) {
169 %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a)
172 ; CHECK: test_v4f32.log:
173 define %v4f32 @test_v4f32.log(%v4f32 %a) {
175 %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a)
178 ; CHECK: test_v4f32.log10:
179 define %v4f32 @test_v4f32.log10(%v4f32 %a) {
181 %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a)
184 ; CHECK: test_v4f32.log2:
185 define %v4f32 @test_v4f32.log2(%v4f32 %a) {
187 %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a)
190 ; CHECK: test_v4f32.fma:
191 define %v4f32 @test_v4f32.fma(%v4f32 %a, %v4f32 %b, %v4f32 %c) {
193 %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c)
196 ; CHECK: test_v4f32.fabs:
197 define %v4f32 @test_v4f32.fabs(%v4f32 %a) {
199 %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a)
202 ; CHECK: test_v4f32.floor:
203 define %v4f32 @test_v4f32.floor(%v4f32 %a) {
205 %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a)
208 ; CHECK: test_v4f32.ceil:
209 define %v4f32 @test_v4f32.ceil(%v4f32 %a) {
211 %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a)
214 ; CHECK: test_v4f32.trunc:
215 define %v4f32 @test_v4f32.trunc(%v4f32 %a) {
217 %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a)
220 ; CHECK: test_v4f32.rint:
221 define %v4f32 @test_v4f32.rint(%v4f32 %a) {
223 %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a)
226 ; CHECK: test_v4f32.nearbyint:
227 define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) {
229 %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a)
233 declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0
234 declare %v4f32 @llvm.powi.v4f32(%v4f32, i32) #0
235 declare %v4f32 @llvm.sin.v4f32(%v4f32) #0
236 declare %v4f32 @llvm.cos.v4f32(%v4f32) #0
237 declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0
238 declare %v4f32 @llvm.exp.v4f32(%v4f32) #0
239 declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0
240 declare %v4f32 @llvm.log.v4f32(%v4f32) #0
241 declare %v4f32 @llvm.log10.v4f32(%v4f32) #0
242 declare %v4f32 @llvm.log2.v4f32(%v4f32) #0
243 declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0
244 declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0
245 declare %v4f32 @llvm.floor.v4f32(%v4f32) #0
246 declare %v4f32 @llvm.ceil.v4f32(%v4f32) #0
247 declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0
248 declare %v4f32 @llvm.rint.v4f32(%v4f32) #0
249 declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0
253 %v2f64 = type <2 x double>
254 ; CHECK: test_v2f64.sqrt:
255 define %v2f64 @test_v2f64.sqrt(%v2f64 %a) {
257 %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a)
260 ; CHECK: test_v2f64.powi:
261 define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) {
263 %1 = call %v2f64 @llvm.powi.v2f64(%v2f64 %a, i32 %b)
266 ; CHECK: test_v2f64.sin:
267 define %v2f64 @test_v2f64.sin(%v2f64 %a) {
269 %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a)
272 ; CHECK: test_v2f64.cos:
273 define %v2f64 @test_v2f64.cos(%v2f64 %a) {
275 %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a)
278 ; CHECK: test_v2f64.pow:
279 define %v2f64 @test_v2f64.pow(%v2f64 %a, %v2f64 %b) {
281 %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b)
284 ; CHECK: test_v2f64.exp:
285 define %v2f64 @test_v2f64.exp(%v2f64 %a) {
287 %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a)
290 ; CHECK: test_v2f64.exp2:
291 define %v2f64 @test_v2f64.exp2(%v2f64 %a) {
293 %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a)
296 ; CHECK: test_v2f64.log:
297 define %v2f64 @test_v2f64.log(%v2f64 %a) {
299 %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a)
302 ; CHECK: test_v2f64.log10:
303 define %v2f64 @test_v2f64.log10(%v2f64 %a) {
305 %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a)
308 ; CHECK: test_v2f64.log2:
309 define %v2f64 @test_v2f64.log2(%v2f64 %a) {
311 %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a)
314 ; CHECK: test_v2f64.fma:
315 define %v2f64 @test_v2f64.fma(%v2f64 %a, %v2f64 %b, %v2f64 %c) {
317 %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c)
320 ; CHECK: test_v2f64.fabs:
321 define %v2f64 @test_v2f64.fabs(%v2f64 %a) {
323 %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a)
326 ; CHECK: test_v2f64.floor:
327 define %v2f64 @test_v2f64.floor(%v2f64 %a) {
329 %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a)
332 ; CHECK: test_v2f64.ceil:
333 define %v2f64 @test_v2f64.ceil(%v2f64 %a) {
335 %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a)
338 ; CHECK: test_v2f64.trunc:
339 define %v2f64 @test_v2f64.trunc(%v2f64 %a) {
341 %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a)
344 ; CHECK: test_v2f64.rint:
345 define %v2f64 @test_v2f64.rint(%v2f64 %a) {
347 %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a)
350 ; CHECK: test_v2f64.nearbyint:
351 define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) {
353 %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a)
357 declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0
358 declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0
359 declare %v2f64 @llvm.sin.v2f64(%v2f64) #0
360 declare %v2f64 @llvm.cos.v2f64(%v2f64) #0
361 declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0
362 declare %v2f64 @llvm.exp.v2f64(%v2f64) #0
363 declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0
364 declare %v2f64 @llvm.log.v2f64(%v2f64) #0
365 declare %v2f64 @llvm.log10.v2f64(%v2f64) #0
366 declare %v2f64 @llvm.log2.v2f64(%v2f64) #0
367 declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0
368 declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0
369 declare %v2f64 @llvm.floor.v2f64(%v2f64) #0
370 declare %v2f64 @llvm.ceil.v2f64(%v2f64) #0
371 declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0
372 declare %v2f64 @llvm.rint.v2f64(%v2f64) #0
373 declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0
375 attributes #0 = { nounwind readonly }