• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s
2
3;;; Float vectors
4
5%v2f32 = type <2 x float>
6; CHECK: test_v2f32.sqrt:
7define %v2f32 @test_v2f32.sqrt(%v2f32 %a) {
8  ; CHECK: fsqrt.2s
9  %1 = call %v2f32 @llvm.sqrt.v2f32(%v2f32 %a)
10  ret %v2f32 %1
11}
12; CHECK: test_v2f32.powi:
13define %v2f32 @test_v2f32.powi(%v2f32 %a, i32 %b) {
14  ; CHECK: pow
15  %1 = call %v2f32 @llvm.powi.v2f32(%v2f32 %a, i32 %b)
16  ret %v2f32 %1
17}
18; CHECK: test_v2f32.sin:
19define %v2f32 @test_v2f32.sin(%v2f32 %a) {
20  ; CHECK: sin
21  %1 = call %v2f32 @llvm.sin.v2f32(%v2f32 %a)
22  ret %v2f32 %1
23}
24; CHECK: test_v2f32.cos:
25define %v2f32 @test_v2f32.cos(%v2f32 %a) {
26  ; CHECK: cos
27  %1 = call %v2f32 @llvm.cos.v2f32(%v2f32 %a)
28  ret %v2f32 %1
29}
30; CHECK: test_v2f32.pow:
31define %v2f32 @test_v2f32.pow(%v2f32 %a, %v2f32 %b) {
32  ; CHECK: pow
33  %1 = call %v2f32 @llvm.pow.v2f32(%v2f32 %a, %v2f32 %b)
34  ret %v2f32 %1
35}
36; CHECK: test_v2f32.exp:
37define %v2f32 @test_v2f32.exp(%v2f32 %a) {
38  ; CHECK: exp
39  %1 = call %v2f32 @llvm.exp.v2f32(%v2f32 %a)
40  ret %v2f32 %1
41}
42; CHECK: test_v2f32.exp2:
43define %v2f32 @test_v2f32.exp2(%v2f32 %a) {
44  ; CHECK: exp
45  %1 = call %v2f32 @llvm.exp2.v2f32(%v2f32 %a)
46  ret %v2f32 %1
47}
48; CHECK: test_v2f32.log:
49define %v2f32 @test_v2f32.log(%v2f32 %a) {
50  ; CHECK: log
51  %1 = call %v2f32 @llvm.log.v2f32(%v2f32 %a)
52  ret %v2f32 %1
53}
54; CHECK: test_v2f32.log10:
55define %v2f32 @test_v2f32.log10(%v2f32 %a) {
56  ; CHECK: log
57  %1 = call %v2f32 @llvm.log10.v2f32(%v2f32 %a)
58  ret %v2f32 %1
59}
60; CHECK: test_v2f32.log2:
61define %v2f32 @test_v2f32.log2(%v2f32 %a) {
62  ; CHECK: log
63  %1 = call %v2f32 @llvm.log2.v2f32(%v2f32 %a)
64  ret %v2f32 %1
65}
66; CHECK: test_v2f32.fma:
67define %v2f32 @test_v2f32.fma(%v2f32 %a, %v2f32 %b, %v2f32 %c) {
68  ; CHECK: fma
69  %1 = call %v2f32 @llvm.fma.v2f32(%v2f32 %a, %v2f32 %b, %v2f32 %c)
70  ret %v2f32 %1
71}
72; CHECK: test_v2f32.fabs:
73define %v2f32 @test_v2f32.fabs(%v2f32 %a) {
74  ; CHECK: fabs
75  %1 = call %v2f32 @llvm.fabs.v2f32(%v2f32 %a)
76  ret %v2f32 %1
77}
78; CHECK: test_v2f32.floor:
79define %v2f32 @test_v2f32.floor(%v2f32 %a) {
80  ; CHECK: frintm.2s
81  %1 = call %v2f32 @llvm.floor.v2f32(%v2f32 %a)
82  ret %v2f32 %1
83}
84; CHECK: test_v2f32.ceil:
85define %v2f32 @test_v2f32.ceil(%v2f32 %a) {
86  ; CHECK: frintp.2s
87  %1 = call %v2f32 @llvm.ceil.v2f32(%v2f32 %a)
88  ret %v2f32 %1
89}
90; CHECK: test_v2f32.trunc:
91define %v2f32 @test_v2f32.trunc(%v2f32 %a) {
92  ; CHECK: frintz.2s
93  %1 = call %v2f32 @llvm.trunc.v2f32(%v2f32 %a)
94  ret %v2f32 %1
95}
96; CHECK: test_v2f32.rint:
97define %v2f32 @test_v2f32.rint(%v2f32 %a) {
98  ; CHECK: frintx.2s
99  %1 = call %v2f32 @llvm.rint.v2f32(%v2f32 %a)
100  ret %v2f32 %1
101}
102; CHECK: test_v2f32.nearbyint:
103define %v2f32 @test_v2f32.nearbyint(%v2f32 %a) {
104  ; CHECK: frinti.2s
105  %1 = call %v2f32 @llvm.nearbyint.v2f32(%v2f32 %a)
106  ret %v2f32 %1
107}
108
109declare %v2f32 @llvm.sqrt.v2f32(%v2f32) #0
110declare %v2f32 @llvm.powi.v2f32(%v2f32, i32) #0
111declare %v2f32 @llvm.sin.v2f32(%v2f32) #0
112declare %v2f32 @llvm.cos.v2f32(%v2f32) #0
113declare %v2f32 @llvm.pow.v2f32(%v2f32, %v2f32) #0
114declare %v2f32 @llvm.exp.v2f32(%v2f32) #0
115declare %v2f32 @llvm.exp2.v2f32(%v2f32) #0
116declare %v2f32 @llvm.log.v2f32(%v2f32) #0
117declare %v2f32 @llvm.log10.v2f32(%v2f32) #0
118declare %v2f32 @llvm.log2.v2f32(%v2f32) #0
119declare %v2f32 @llvm.fma.v2f32(%v2f32, %v2f32, %v2f32) #0
120declare %v2f32 @llvm.fabs.v2f32(%v2f32) #0
121declare %v2f32 @llvm.floor.v2f32(%v2f32) #0
122declare %v2f32 @llvm.ceil.v2f32(%v2f32) #0
123declare %v2f32 @llvm.trunc.v2f32(%v2f32) #0
124declare %v2f32 @llvm.rint.v2f32(%v2f32) #0
125declare %v2f32 @llvm.nearbyint.v2f32(%v2f32) #0
126
127;;;
128
129%v4f32 = type <4 x float>
130; CHECK: test_v4f32.sqrt:
131define %v4f32 @test_v4f32.sqrt(%v4f32 %a) {
132  ; CHECK: fsqrt.4s
133  %1 = call %v4f32 @llvm.sqrt.v4f32(%v4f32 %a)
134  ret %v4f32 %1
135}
136; CHECK: test_v4f32.powi:
137define %v4f32 @test_v4f32.powi(%v4f32 %a, i32 %b) {
138  ; CHECK: pow
139  %1 = call %v4f32 @llvm.powi.v4f32(%v4f32 %a, i32 %b)
140  ret %v4f32 %1
141}
142; CHECK: test_v4f32.sin:
143define %v4f32 @test_v4f32.sin(%v4f32 %a) {
144  ; CHECK: sin
145  %1 = call %v4f32 @llvm.sin.v4f32(%v4f32 %a)
146  ret %v4f32 %1
147}
148; CHECK: test_v4f32.cos:
149define %v4f32 @test_v4f32.cos(%v4f32 %a) {
150  ; CHECK: cos
151  %1 = call %v4f32 @llvm.cos.v4f32(%v4f32 %a)
152  ret %v4f32 %1
153}
154; CHECK: test_v4f32.pow:
155define %v4f32 @test_v4f32.pow(%v4f32 %a, %v4f32 %b) {
156  ; CHECK: pow
157  %1 = call %v4f32 @llvm.pow.v4f32(%v4f32 %a, %v4f32 %b)
158  ret %v4f32 %1
159}
160; CHECK: test_v4f32.exp:
161define %v4f32 @test_v4f32.exp(%v4f32 %a) {
162  ; CHECK: exp
163  %1 = call %v4f32 @llvm.exp.v4f32(%v4f32 %a)
164  ret %v4f32 %1
165}
166; CHECK: test_v4f32.exp2:
167define %v4f32 @test_v4f32.exp2(%v4f32 %a) {
168  ; CHECK: exp
169  %1 = call %v4f32 @llvm.exp2.v4f32(%v4f32 %a)
170  ret %v4f32 %1
171}
172; CHECK: test_v4f32.log:
173define %v4f32 @test_v4f32.log(%v4f32 %a) {
174  ; CHECK: log
175  %1 = call %v4f32 @llvm.log.v4f32(%v4f32 %a)
176  ret %v4f32 %1
177}
178; CHECK: test_v4f32.log10:
179define %v4f32 @test_v4f32.log10(%v4f32 %a) {
180  ; CHECK: log
181  %1 = call %v4f32 @llvm.log10.v4f32(%v4f32 %a)
182  ret %v4f32 %1
183}
184; CHECK: test_v4f32.log2:
185define %v4f32 @test_v4f32.log2(%v4f32 %a) {
186  ; CHECK: log
187  %1 = call %v4f32 @llvm.log2.v4f32(%v4f32 %a)
188  ret %v4f32 %1
189}
190; CHECK: test_v4f32.fma:
191define %v4f32 @test_v4f32.fma(%v4f32 %a, %v4f32 %b, %v4f32 %c) {
192  ; CHECK: fma
193  %1 = call %v4f32 @llvm.fma.v4f32(%v4f32 %a, %v4f32 %b, %v4f32 %c)
194  ret %v4f32 %1
195}
196; CHECK: test_v4f32.fabs:
197define %v4f32 @test_v4f32.fabs(%v4f32 %a) {
198  ; CHECK: fabs
199  %1 = call %v4f32 @llvm.fabs.v4f32(%v4f32 %a)
200  ret %v4f32 %1
201}
202; CHECK: test_v4f32.floor:
203define %v4f32 @test_v4f32.floor(%v4f32 %a) {
204  ; CHECK: frintm.4s
205  %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a)
206  ret %v4f32 %1
207}
208; CHECK: test_v4f32.ceil:
209define %v4f32 @test_v4f32.ceil(%v4f32 %a) {
210  ; CHECK: frintp.4s
211  %1 = call %v4f32 @llvm.ceil.v4f32(%v4f32 %a)
212  ret %v4f32 %1
213}
214; CHECK: test_v4f32.trunc:
215define %v4f32 @test_v4f32.trunc(%v4f32 %a) {
216  ; CHECK: frintz.4s
217  %1 = call %v4f32 @llvm.trunc.v4f32(%v4f32 %a)
218  ret %v4f32 %1
219}
220; CHECK: test_v4f32.rint:
221define %v4f32 @test_v4f32.rint(%v4f32 %a) {
222  ; CHECK: frintx.4s
223  %1 = call %v4f32 @llvm.rint.v4f32(%v4f32 %a)
224  ret %v4f32 %1
225}
226; CHECK: test_v4f32.nearbyint:
227define %v4f32 @test_v4f32.nearbyint(%v4f32 %a) {
228  ; CHECK: frinti.4s
229  %1 = call %v4f32 @llvm.nearbyint.v4f32(%v4f32 %a)
230  ret %v4f32 %1
231}
232
233declare %v4f32 @llvm.sqrt.v4f32(%v4f32) #0
234declare %v4f32 @llvm.powi.v4f32(%v4f32, i32) #0
235declare %v4f32 @llvm.sin.v4f32(%v4f32) #0
236declare %v4f32 @llvm.cos.v4f32(%v4f32) #0
237declare %v4f32 @llvm.pow.v4f32(%v4f32, %v4f32) #0
238declare %v4f32 @llvm.exp.v4f32(%v4f32) #0
239declare %v4f32 @llvm.exp2.v4f32(%v4f32) #0
240declare %v4f32 @llvm.log.v4f32(%v4f32) #0
241declare %v4f32 @llvm.log10.v4f32(%v4f32) #0
242declare %v4f32 @llvm.log2.v4f32(%v4f32) #0
243declare %v4f32 @llvm.fma.v4f32(%v4f32, %v4f32, %v4f32) #0
244declare %v4f32 @llvm.fabs.v4f32(%v4f32) #0
245declare %v4f32 @llvm.floor.v4f32(%v4f32) #0
246declare %v4f32 @llvm.ceil.v4f32(%v4f32) #0
247declare %v4f32 @llvm.trunc.v4f32(%v4f32) #0
248declare %v4f32 @llvm.rint.v4f32(%v4f32) #0
249declare %v4f32 @llvm.nearbyint.v4f32(%v4f32) #0
250
251;;; Double vector
252
253%v2f64 = type <2 x double>
254; CHECK: test_v2f64.sqrt:
255define %v2f64 @test_v2f64.sqrt(%v2f64 %a) {
256  ; CHECK: fsqrt.2d
257  %1 = call %v2f64 @llvm.sqrt.v2f64(%v2f64 %a)
258  ret %v2f64 %1
259}
260; CHECK: test_v2f64.powi:
261define %v2f64 @test_v2f64.powi(%v2f64 %a, i32 %b) {
262  ; CHECK: pow
263  %1 = call %v2f64 @llvm.powi.v2f64(%v2f64 %a, i32 %b)
264  ret %v2f64 %1
265}
266; CHECK: test_v2f64.sin:
267define %v2f64 @test_v2f64.sin(%v2f64 %a) {
268  ; CHECK: sin
269  %1 = call %v2f64 @llvm.sin.v2f64(%v2f64 %a)
270  ret %v2f64 %1
271}
272; CHECK: test_v2f64.cos:
273define %v2f64 @test_v2f64.cos(%v2f64 %a) {
274  ; CHECK: cos
275  %1 = call %v2f64 @llvm.cos.v2f64(%v2f64 %a)
276  ret %v2f64 %1
277}
278; CHECK: test_v2f64.pow:
279define %v2f64 @test_v2f64.pow(%v2f64 %a, %v2f64 %b) {
280  ; CHECK: pow
281  %1 = call %v2f64 @llvm.pow.v2f64(%v2f64 %a, %v2f64 %b)
282  ret %v2f64 %1
283}
284; CHECK: test_v2f64.exp:
285define %v2f64 @test_v2f64.exp(%v2f64 %a) {
286  ; CHECK: exp
287  %1 = call %v2f64 @llvm.exp.v2f64(%v2f64 %a)
288  ret %v2f64 %1
289}
290; CHECK: test_v2f64.exp2:
291define %v2f64 @test_v2f64.exp2(%v2f64 %a) {
292  ; CHECK: exp
293  %1 = call %v2f64 @llvm.exp2.v2f64(%v2f64 %a)
294  ret %v2f64 %1
295}
296; CHECK: test_v2f64.log:
297define %v2f64 @test_v2f64.log(%v2f64 %a) {
298  ; CHECK: log
299  %1 = call %v2f64 @llvm.log.v2f64(%v2f64 %a)
300  ret %v2f64 %1
301}
302; CHECK: test_v2f64.log10:
303define %v2f64 @test_v2f64.log10(%v2f64 %a) {
304  ; CHECK: log
305  %1 = call %v2f64 @llvm.log10.v2f64(%v2f64 %a)
306  ret %v2f64 %1
307}
308; CHECK: test_v2f64.log2:
309define %v2f64 @test_v2f64.log2(%v2f64 %a) {
310  ; CHECK: log
311  %1 = call %v2f64 @llvm.log2.v2f64(%v2f64 %a)
312  ret %v2f64 %1
313}
314; CHECK: test_v2f64.fma:
315define %v2f64 @test_v2f64.fma(%v2f64 %a, %v2f64 %b, %v2f64 %c) {
316  ; CHECK: fma
317  %1 = call %v2f64 @llvm.fma.v2f64(%v2f64 %a, %v2f64 %b, %v2f64 %c)
318  ret %v2f64 %1
319}
320; CHECK: test_v2f64.fabs:
321define %v2f64 @test_v2f64.fabs(%v2f64 %a) {
322  ; CHECK: fabs
323  %1 = call %v2f64 @llvm.fabs.v2f64(%v2f64 %a)
324  ret %v2f64 %1
325}
326; CHECK: test_v2f64.floor:
327define %v2f64 @test_v2f64.floor(%v2f64 %a) {
328  ; CHECK: frintm.2d
329  %1 = call %v2f64 @llvm.floor.v2f64(%v2f64 %a)
330  ret %v2f64 %1
331}
332; CHECK: test_v2f64.ceil:
333define %v2f64 @test_v2f64.ceil(%v2f64 %a) {
334  ; CHECK: frintp.2d
335  %1 = call %v2f64 @llvm.ceil.v2f64(%v2f64 %a)
336  ret %v2f64 %1
337}
338; CHECK: test_v2f64.trunc:
339define %v2f64 @test_v2f64.trunc(%v2f64 %a) {
340  ; CHECK: frintz.2d
341  %1 = call %v2f64 @llvm.trunc.v2f64(%v2f64 %a)
342  ret %v2f64 %1
343}
344; CHECK: test_v2f64.rint:
345define %v2f64 @test_v2f64.rint(%v2f64 %a) {
346  ; CHECK: frintx.2d
347  %1 = call %v2f64 @llvm.rint.v2f64(%v2f64 %a)
348  ret %v2f64 %1
349}
350; CHECK: test_v2f64.nearbyint:
351define %v2f64 @test_v2f64.nearbyint(%v2f64 %a) {
352  ; CHECK: frinti.2d
353  %1 = call %v2f64 @llvm.nearbyint.v2f64(%v2f64 %a)
354  ret %v2f64 %1
355}
356
357declare %v2f64 @llvm.sqrt.v2f64(%v2f64) #0
358declare %v2f64 @llvm.powi.v2f64(%v2f64, i32) #0
359declare %v2f64 @llvm.sin.v2f64(%v2f64) #0
360declare %v2f64 @llvm.cos.v2f64(%v2f64) #0
361declare %v2f64 @llvm.pow.v2f64(%v2f64, %v2f64) #0
362declare %v2f64 @llvm.exp.v2f64(%v2f64) #0
363declare %v2f64 @llvm.exp2.v2f64(%v2f64) #0
364declare %v2f64 @llvm.log.v2f64(%v2f64) #0
365declare %v2f64 @llvm.log10.v2f64(%v2f64) #0
366declare %v2f64 @llvm.log2.v2f64(%v2f64) #0
367declare %v2f64 @llvm.fma.v2f64(%v2f64, %v2f64, %v2f64) #0
368declare %v2f64 @llvm.fabs.v2f64(%v2f64) #0
369declare %v2f64 @llvm.floor.v2f64(%v2f64) #0
370declare %v2f64 @llvm.ceil.v2f64(%v2f64) #0
371declare %v2f64 @llvm.trunc.v2f64(%v2f64) #0
372declare %v2f64 @llvm.rint.v2f64(%v2f64) #0
373declare %v2f64 @llvm.nearbyint.v2f64(%v2f64) #0
374
375attributes #0 = { nounwind readonly }
376