[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / replace-with-veclib-sleef.ll
blobebe5e78667680d9ae8689f0a985abb9abefef427
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
2 ; RUN: opt -vector-library=sleefgnuabi -replace-with-veclib -S < %s | FileCheck %s
4 target triple = "aarch64-unknown-linux-gnu"
6 ;.
7 ; CHECK: @llvm.compiler.used = appending global [34 x ptr] [ptr @_ZGVnN2v_cos, ptr @_ZGVnN4v_cosf, ptr @_ZGVnN2v_exp, ptr @_ZGVnN4v_expf, ptr @_ZGVnN2v_exp10, ptr @_ZGVnN4v_exp10f, ptr @_ZGVnN2v_exp2, ptr @_ZGVnN4v_exp2f, ptr @_ZGVnN2v_log, ptr @_ZGVnN4v_logf, ptr @_ZGVnN2v_log10, ptr @_ZGVnN4v_log10f, ptr @_ZGVnN2v_log2, ptr @_ZGVnN4v_log2f, ptr @_ZGVnN2vv_pow, ptr @_ZGVnN4vv_powf, ptr @_ZGVnN2v_sin, ptr @_ZGVnN4v_sinf, ptr @_ZGVnN2v_tan, ptr @_ZGVnN4v_tanf, ptr @_ZGVnN2v_acos, ptr @_ZGVnN4v_acosf, ptr @_ZGVnN2v_asin, ptr @_ZGVnN4v_asinf, ptr @_ZGVnN2v_atan, ptr @_ZGVnN4v_atanf, ptr @_ZGVnN2vv_atan2, ptr @_ZGVnN4vv_atan2f, ptr @_ZGVnN2v_cosh, ptr @_ZGVnN4v_coshf, ptr @_ZGVnN2v_sinh, ptr @_ZGVnN4v_sinhf, ptr @_ZGVnN2v_tanh, ptr @_ZGVnN4v_tanhf], section "llvm.metadata"
8 ;.
9 define <2 x double> @llvm_ceil_f64(<2 x double> %in) {
10 ; CHECK-LABEL: @llvm_ceil_f64(
11 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.ceil.v2f64(<2 x double> [[IN:%.*]])
12 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
14   %1 = call fast <2 x double> @llvm.ceil.v2f64(<2 x double> %in)
15   ret <2 x double> %1
18 define <4 x float> @llvm_ceil_f32(<4 x float> %in) {
19 ; CHECK-LABEL: @llvm_ceil_f32(
20 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.ceil.v4f32(<4 x float> [[IN:%.*]])
21 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
23   %1 = call fast <4 x float> @llvm.ceil.v4f32(<4 x float> %in)
24   ret <4 x float> %1
27 define <2 x double> @llvm_copysign_f64(<2 x double> %mag, <2 x double> %sgn) {
28 ; CHECK-LABEL: @llvm_copysign_f64(
29 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.copysign.v2f64(<2 x double> [[MAG:%.*]], <2 x double> [[SGN:%.*]])
30 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
32   %1 = call fast <2 x double> @llvm.copysign.v2f64(<2 x double> %mag, <2 x double> %sgn)
33   ret <2 x double> %1
36 define <4 x float> @llvm_copysign_f32(<4 x float> %mag, <4 x float> %sgn) {
37 ; CHECK-LABEL: @llvm_copysign_f32(
38 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.copysign.v4f32(<4 x float> [[MAG:%.*]], <4 x float> [[SGN:%.*]])
39 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
41   %1 = call fast <4 x float> @llvm.copysign.v4f32(<4 x float> %mag, <4 x float> %sgn)
42   ret <4 x float> %1
45 define <2 x double> @llvm_cos_f64(<2 x double> %in) {
46 ; CHECK-LABEL: @llvm_cos_f64(
47 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_cos(<2 x double> [[IN:%.*]])
48 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
50   %1 = call fast <2 x double> @llvm.cos.v2f64(<2 x double> %in)
51   ret <2 x double> %1
54 define <4 x float> @llvm_cos_f32(<4 x float> %in) {
55 ; CHECK-LABEL: @llvm_cos_f32(
56 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_cosf(<4 x float> [[IN:%.*]])
57 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
59   %1 = call fast <4 x float> @llvm.cos.v4f32(<4 x float> %in)
60   ret <4 x float> %1
63 define <2 x double> @llvm_exp_f64(<2 x double> %in) {
64 ; CHECK-LABEL: @llvm_exp_f64(
65 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_exp(<2 x double> [[IN:%.*]])
66 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
68   %1 = call fast <2 x double> @llvm.exp.v2f64(<2 x double> %in)
69   ret <2 x double> %1
72 define <4 x float> @llvm_exp_f32(<4 x float> %in) {
73 ; CHECK-LABEL: @llvm_exp_f32(
74 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_expf(<4 x float> [[IN:%.*]])
75 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
77   %1 = call fast <4 x float> @llvm.exp.v4f32(<4 x float> %in)
78   ret <4 x float> %1
81 define <2 x double> @llvm_exp10_f64(<2 x double> %in) {
82 ; CHECK-LABEL: @llvm_exp10_f64(
83 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_exp10(<2 x double> [[IN:%.*]])
84 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
86   %1 = call fast <2 x double> @llvm.exp10.v2f64(<2 x double> %in)
87   ret <2 x double> %1
90 define <4 x float> @llvm_exp10_f32(<4 x float> %in) {
91 ; CHECK-LABEL: @llvm_exp10_f32(
92 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_exp10f(<4 x float> [[IN:%.*]])
93 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
95   %1 = call fast <4 x float> @llvm.exp10.v4f32(<4 x float> %in)
96   ret <4 x float> %1
99 define <2 x double> @llvm_exp2_f64(<2 x double> %in) {
100 ; CHECK-LABEL: @llvm_exp2_f64(
101 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_exp2(<2 x double> [[IN:%.*]])
102 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
104   %1 = call fast <2 x double> @llvm.exp2.v2f64(<2 x double> %in)
105   ret <2 x double> %1
108 define <4 x float> @llvm_exp2_f32(<4 x float> %in) {
109 ; CHECK-LABEL: @llvm_exp2_f32(
110 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_exp2f(<4 x float> [[IN:%.*]])
111 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
113   %1 = call fast <4 x float> @llvm.exp2.v4f32(<4 x float> %in)
114   ret <4 x float> %1
117 define <2 x double> @llvm_fabs_f64(<2 x double> %in) {
118 ; CHECK-LABEL: @llvm_fabs_f64(
119 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.fabs.v2f64(<2 x double> [[IN:%.*]])
120 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
122   %1 = call fast <2 x double> @llvm.fabs.v2f64(<2 x double> %in)
123   ret <2 x double> %1
126 define <4 x float> @llvm_fabs_f32(<4 x float> %in) {
127 ; CHECK-LABEL: @llvm_fabs_f32(
128 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.fabs.v4f32(<4 x float> [[IN:%.*]])
129 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
131   %1 = call fast <4 x float> @llvm.fabs.v4f32(<4 x float> %in)
132   ret <4 x float> %1
135 define <2 x double> @llvm_floor_f64(<2 x double> %in) {
136 ; CHECK-LABEL: @llvm_floor_f64(
137 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.floor.v2f64(<2 x double> [[IN:%.*]])
138 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
140   %1 = call fast <2 x double> @llvm.floor.v2f64(<2 x double> %in)
141   ret <2 x double> %1
144 define <4 x float> @llvm_floor_f32(<4 x float> %in) {
145 ; CHECK-LABEL: @llvm_floor_f32(
146 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.floor.v4f32(<4 x float> [[IN:%.*]])
147 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
149   %1 = call fast <4 x float> @llvm.floor.v4f32(<4 x float> %in)
150   ret <4 x float> %1
153 define <2 x double> @llvm_fma_f64(<2 x double> %a, <2 x double> %b, <2 x double> %c ) {
154 ; CHECK-LABEL: @llvm_fma_f64(
155 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.fma.v2f64(<2 x double> [[A:%.*]], <2 x double> [[B:%.*]], <2 x double> [[C:%.*]])
156 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
158   %1 = call fast <2 x double> @llvm.fma.v2f64(<2 x double> %a, <2 x double> %b, <2 x double> %c)
159   ret <2 x double> %1
162 define <4 x float> @llvm_fma_f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) {
163 ; CHECK-LABEL: @llvm_fma_f32(
164 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.fma.v4f32(<4 x float> [[A:%.*]], <4 x float> [[B:%.*]], <4 x float> [[C:%.*]])
165 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
167   %1 = call fast <4 x float> @llvm.fma.v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c)
168   ret <4 x float> %1
171 define <2 x double> @llvm_log_f64(<2 x double> %in) {
172 ; CHECK-LABEL: @llvm_log_f64(
173 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_log(<2 x double> [[IN:%.*]])
174 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
176   %1 = call fast <2 x double> @llvm.log.v2f64(<2 x double> %in)
177   ret <2 x double> %1
180 define <4 x float> @llvm_log_f32(<4 x float> %in) {
181 ; CHECK-LABEL: @llvm_log_f32(
182 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_logf(<4 x float> [[IN:%.*]])
183 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
185   %1 = call fast <4 x float> @llvm.log.v4f32(<4 x float> %in)
186   ret <4 x float> %1
189 define <2 x double> @llvm_log10_f64(<2 x double> %in) {
190 ; CHECK-LABEL: @llvm_log10_f64(
191 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_log10(<2 x double> [[IN:%.*]])
192 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
194   %1 = call fast <2 x double> @llvm.log10.v2f64(<2 x double> %in)
195   ret <2 x double> %1
198 define <4 x float> @llvm_log10_f32(<4 x float> %in) {
199 ; CHECK-LABEL: @llvm_log10_f32(
200 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_log10f(<4 x float> [[IN:%.*]])
201 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
203   %1 = call fast <4 x float> @llvm.log10.v4f32(<4 x float> %in)
204   ret <4 x float> %1
207 define <2 x double> @llvm_log2_f64(<2 x double> %in) {
208 ; CHECK-LABEL: @llvm_log2_f64(
209 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_log2(<2 x double> [[IN:%.*]])
210 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
212   %1 = call fast <2 x double> @llvm.log2.v2f64(<2 x double> %in)
213   ret <2 x double> %1
216 define <4 x float> @llvm_log2_f32(<4 x float> %in) {
217 ; CHECK-LABEL: @llvm_log2_f32(
218 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_log2f(<4 x float> [[IN:%.*]])
219 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
221   %1 = call fast <4 x float> @llvm.log2.v4f32(<4 x float> %in)
222   ret <4 x float> %1
225 define <2 x double> @llvm_maxnum_f64(<2 x double> %in0, <2 x double> %in1) {
226 ; CHECK-LABEL: @llvm_maxnum_f64(
227 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.maxnum.v2f64(<2 x double> [[IN0:%.*]], <2 x double> [[IN1:%.*]])
228 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
230   %1 = call fast <2 x double> @llvm.maxnum.v2f64(<2 x double> %in0, <2 x double> %in1)
231   ret <2 x double> %1
234 define <4 x float> @llvm_maxnum_f32(<4 x float> %in0, <4 x float> %in1) {
235 ; CHECK-LABEL: @llvm_maxnum_f32(
236 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.maxnum.v4f32(<4 x float> [[IN0:%.*]], <4 x float> [[IN1:%.*]])
237 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
239   %1 = call fast <4 x float> @llvm.maxnum.v4f32(<4 x float> %in0, <4 x float> %in1)
240   ret <4 x float> %1
243 define <2 x double> @llvm_minnum_f64(<2 x double> %in0, <2 x double> %in1) {
244 ; CHECK-LABEL: @llvm_minnum_f64(
245 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.minnum.v2f64(<2 x double> [[IN0:%.*]], <2 x double> [[IN1:%.*]])
246 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
248   %1 = call fast <2 x double> @llvm.minnum.v2f64(<2 x double> %in0, <2 x double> %in1)
249   ret <2 x double> %1
252 define <4 x float> @llvm_minnum_f32(<4 x float> %in0, <4 x float> %in1) {
253 ; CHECK-LABEL: @llvm_minnum_f32(
254 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.minnum.v4f32(<4 x float> [[IN0:%.*]], <4 x float> [[IN1:%.*]])
255 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
257   %1 = call fast <4 x float> @llvm.minnum.v4f32(<4 x float> %in0, <4 x float> %in1)
258   ret <4 x float> %1
261 define <2 x double> @llvm_nearbyint_f64(<2 x double> %in) {
262 ; CHECK-LABEL: @llvm_nearbyint_f64(
263 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.nearbyint.v2f64(<2 x double> [[IN:%.*]])
264 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
266   %1 = call fast <2 x double> @llvm.nearbyint.v2f64(<2 x double> %in)
267   ret <2 x double> %1
270 define <4 x float> @llvm_nearbyint_f32(<4 x float> %in) {
271 ; CHECK-LABEL: @llvm_nearbyint_f32(
272 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.nearbyint.v4f32(<4 x float> [[IN:%.*]])
273 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
275   %1 = call fast <4 x float> @llvm.nearbyint.v4f32(<4 x float> %in)
276   ret <4 x float> %1
279 define <2 x double> @llvm_pow_f64(<2 x double> %in, <2 x double> %pow) {
280 ; CHECK-LABEL: @llvm_pow_f64(
281 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2vv_pow(<2 x double> [[IN:%.*]], <2 x double> [[POW:%.*]])
282 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
284   %1 = call fast <2 x double> @llvm.pow.v2f64(<2 x double> %in, <2 x double> %pow)
285   ret <2 x double> %1
288 define <4 x float> @llvm_pow_f32(<4 x float> %in, <4 x float> %pow) {
289 ; CHECK-LABEL: @llvm_pow_f32(
290 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4vv_powf(<4 x float> [[IN:%.*]], <4 x float> [[POW:%.*]])
291 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
293   %1 = call fast <4 x float> @llvm.pow.v4f32(<4 x float> %in, <4 x float> %pow)
294   ret <4 x float> %1
297 define <2 x double> @llvm_rint_f64(<2 x double> %in) {
298 ; CHECK-LABEL: @llvm_rint_f64(
299 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.rint.v2f64(<2 x double> [[IN:%.*]])
300 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
302   %1 = call fast <2 x double> @llvm.rint.v2f64(<2 x double> %in)
303   ret <2 x double> %1
306 define <4 x float> @llvm_rint_f32(<4 x float> %in) {
307 ; CHECK-LABEL: @llvm_rint_f32(
308 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.rint.v4f32(<4 x float> [[IN:%.*]])
309 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
311   %1 = call fast <4 x float> @llvm.rint.v4f32(<4 x float> %in)
312   ret <4 x float> %1
315 define <2 x double> @llvm_round_f64(<2 x double> %in) {
316 ; CHECK-LABEL: @llvm_round_f64(
317 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.round.v2f64(<2 x double> [[IN:%.*]])
318 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
320   %1 = call fast <2 x double> @llvm.round.v2f64(<2 x double> %in)
321   ret <2 x double> %1
324 define <4 x float> @llvm_round_f32(<4 x float> %in) {
325 ; CHECK-LABEL: @llvm_round_f32(
326 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.round.v4f32(<4 x float> [[IN:%.*]])
327 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
329   %1 = call fast <4 x float> @llvm.round.v4f32(<4 x float> %in)
330   ret <4 x float> %1
333 define <2 x double> @llvm_sin_f64(<2 x double> %in) {
334 ; CHECK-LABEL: @llvm_sin_f64(
335 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_sin(<2 x double> [[IN:%.*]])
336 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
338   %1 = call fast <2 x double> @llvm.sin.v2f64(<2 x double> %in)
339   ret <2 x double> %1
342 define <4 x float> @llvm_sin_f32(<4 x float> %in) {
343 ; CHECK-LABEL: @llvm_sin_f32(
344 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_sinf(<4 x float> [[IN:%.*]])
345 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
347   %1 = call fast <4 x float> @llvm.sin.v4f32(<4 x float> %in)
348   ret <4 x float> %1
351 define <2 x double> @llvm_sqrt_f64(<2 x double> %in) {
352 ; CHECK-LABEL: @llvm_sqrt_f64(
353 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> [[IN:%.*]])
354 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
356   %1 = call fast <2 x double> @llvm.sqrt.v2f64(<2 x double> %in)
357   ret <2 x double> %1
360 define <4 x float> @llvm_sqrt_f32(<4 x float> %in) {
361 ; CHECK-LABEL: @llvm_sqrt_f32(
362 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> [[IN:%.*]])
363 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
365   %1 = call fast <4 x float> @llvm.sqrt.v4f32(<4 x float> %in)
366   ret <4 x float> %1
369 define <2 x double> @llvm_tan_f64(<2 x double> %in) {
370 ; CHECK-LABEL: @llvm_tan_f64(
371 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_tan(<2 x double> [[IN:%.*]])
372 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
374   %1 = call fast <2 x double> @llvm.tan.v2f64(<2 x double> %in)
375   ret <2 x double> %1
378 define <4 x float> @llvm_tan_f32(<4 x float> %in) {
379 ; CHECK-LABEL: @llvm_tan_f32(
380 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_tanf(<4 x float> [[IN:%.*]])
381 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
383   %1 = call fast <4 x float> @llvm.tan.v4f32(<4 x float> %in)
384   ret <4 x float> %1
387 define <2 x double> @llvm_acos_f64(<2 x double> %in) {
388 ; CHECK-LABEL: @llvm_acos_f64(
389 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_acos(<2 x double> [[IN:%.*]])
390 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
392   %1 = call fast <2 x double> @llvm.acos.v2f64(<2 x double> %in)
393   ret <2 x double> %1
396 define <4 x float> @llvm_acos_f32(<4 x float> %in) {
397 ; CHECK-LABEL: @llvm_acos_f32(
398 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_acosf(<4 x float> [[IN:%.*]])
399 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
401   %1 = call fast <4 x float> @llvm.acos.v4f32(<4 x float> %in)
402   ret <4 x float> %1
405 define <2 x double> @llvm_asin_f64(<2 x double> %in) {
406 ; CHECK-LABEL: @llvm_asin_f64(
407 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_asin(<2 x double> [[IN:%.*]])
408 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
410   %1 = call fast <2 x double> @llvm.asin.v2f64(<2 x double> %in)
411   ret <2 x double> %1
414 define <4 x float> @llvm_asin_f32(<4 x float> %in) {
415 ; CHECK-LABEL: @llvm_asin_f32(
416 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_asinf(<4 x float> [[IN:%.*]])
417 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
419   %1 = call fast <4 x float> @llvm.asin.v4f32(<4 x float> %in)
420   ret <4 x float> %1
423 define <2 x double> @llvm_atan_f64(<2 x double> %in) {
424 ; CHECK-LABEL: @llvm_atan_f64(
425 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_atan(<2 x double> [[IN:%.*]])
426 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
428   %1 = call fast <2 x double> @llvm.atan.v2f64(<2 x double> %in)
429   ret <2 x double> %1
432 define <4 x float> @llvm_atan_f32(<4 x float> %in) {
433 ; CHECK-LABEL: @llvm_atan_f32(
434 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_atanf(<4 x float> [[IN:%.*]])
435 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
437   %1 = call fast <4 x float> @llvm.atan.v4f32(<4 x float> %in)
438   ret <4 x float> %1
441 define <2 x double> @llvm_atan2_f64(<2 x double> %x, <2 x double> %y) {
442 ; CHECK-LABEL: @llvm_atan2_f64(
443 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2vv_atan2(<2 x double> [[INX:%.*]], <2 x double> [[INY:%.*]])
444 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
446   %1 = call fast <2 x double> @llvm.atan2.v2f64(<2 x double> %x, <2 x double> %y)
447   ret <2 x double> %1
450 define <4 x float> @llvm_atan2_f32(<4 x float> %x, <4 x float> %y) {
451 ; CHECK-LABEL: @llvm_atan2_f32(
452 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4vv_atan2f(<4 x float> [[INX:%.*]], <4 x float> [[INY:%.*]])
453 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
455   %1 = call fast <4 x float> @llvm.atan2.v4f32(<4 x float> %x, <4 x float> %y)
456   ret <4 x float> %1
459 define <2 x double> @llvm_cosh_f64(<2 x double> %in) {
460 ; CHECK-LABEL: @llvm_cosh_f64(
461 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_cosh(<2 x double> [[IN:%.*]])
462 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
464   %1 = call fast <2 x double> @llvm.cosh.v2f64(<2 x double> %in)
465   ret <2 x double> %1
468 define <4 x float> @llvm_cosh_f32(<4 x float> %in) {
469 ; CHECK-LABEL: @llvm_cosh_f32(
470 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_coshf(<4 x float> [[IN:%.*]])
471 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
473   %1 = call fast <4 x float> @llvm.cosh.v4f32(<4 x float> %in)
474   ret <4 x float> %1
477 define <2 x double> @llvm_sinh_f64(<2 x double> %in) {
478 ; CHECK-LABEL: @llvm_sinh_f64(
479 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_sinh(<2 x double> [[IN:%.*]])
480 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
482   %1 = call fast <2 x double> @llvm.sinh.v2f64(<2 x double> %in)
483   ret <2 x double> %1
486 define <4 x float> @llvm_sinh_f32(<4 x float> %in) {
487 ; CHECK-LABEL: @llvm_sinh_f32(
488 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_sinhf(<4 x float> [[IN:%.*]])
489 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
491   %1 = call fast <4 x float> @llvm.sinh.v4f32(<4 x float> %in)
492   ret <4 x float> %1
495 define <2 x double> @llvm_tanh_f64(<2 x double> %in) {
496 ; CHECK-LABEL: @llvm_tanh_f64(
497 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @_ZGVnN2v_tanh(<2 x double> [[IN:%.*]])
498 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
500   %1 = call fast <2 x double> @llvm.tanh.v2f64(<2 x double> %in)
501   ret <2 x double> %1
504 define <4 x float> @llvm_tanh_f32(<4 x float> %in) {
505 ; CHECK-LABEL: @llvm_tanh_f32(
506 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @_ZGVnN4v_tanhf(<4 x float> [[IN:%.*]])
507 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
509   %1 = call fast <4 x float> @llvm.tanh.v4f32(<4 x float> %in)
510   ret <4 x float> %1
513 define <2 x double> @llvm_trunc_f64(<2 x double> %in) {
514 ; CHECK-LABEL: @llvm_trunc_f64(
515 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <2 x double> @llvm.trunc.v2f64(<2 x double> [[IN:%.*]])
516 ; CHECK-NEXT:    ret <2 x double> [[TMP1]]
518   %1 = call fast <2 x double> @llvm.trunc.v2f64(<2 x double> %in)
519   ret <2 x double> %1
522 define <4 x float> @llvm_trunc_f32(<4 x float> %in) {
523 ; CHECK-LABEL: @llvm_trunc_f32(
524 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <4 x float> @llvm.trunc.v4f32(<4 x float> [[IN:%.*]])
525 ; CHECK-NEXT:    ret <4 x float> [[TMP1]]
527   %1 = call fast <4 x float> @llvm.trunc.v4f32(<4 x float> %in)
528   ret <4 x float> %1
531 declare <2 x double> @llvm.ceil.v2f64(<2 x double>)
532 declare <4 x float> @llvm.ceil.v4f32(<4 x float>)
533 declare <2 x double> @llvm.copysign.v2f64(<2 x double>, <2 x double>)
534 declare <4 x float> @llvm.copysign.v4f32(<4 x float>, <4 x float>)
535 declare <2 x double> @llvm.cos.v2f64(<2 x double>)
536 declare <4 x float> @llvm.cos.v4f32(<4 x float>)
537 declare <2 x double> @llvm.exp.v2f64(<2 x double>)
538 declare <4 x float> @llvm.exp.v4f32(<4 x float>)
539 declare <2 x double> @llvm.exp2.v2f64(<2 x double>)
540 declare <4 x float> @llvm.exp2.v4f32(<4 x float>)
541 declare <2 x double> @llvm.exp10.v2f64(<2 x double>)
542 declare <4 x float> @llvm.exp10.v4f32(<4 x float>)
543 declare <2 x double> @llvm.fabs.v2f64(<2 x double>)
544 declare <4 x float> @llvm.fabs.v4f32(<4 x float>)
545 declare <2 x double> @llvm.floor.v2f64(<2 x double>)
546 declare <4 x float> @llvm.floor.v4f32(<4 x float>)
547 declare <2 x double> @llvm.fma.v2f64(<2 x double>, <2 x double>, <2 x double>)
548 declare <4 x float> @llvm.fma.v4f32(<4 x float>, <4 x float>, <4 x float>)
549 declare <2 x double> @llvm.log.v2f64(<2 x double>)
550 declare <4 x float> @llvm.log.v4f32(<4 x float>)
551 declare <2 x double> @llvm.log10.v2f64(<2 x double>)
552 declare <4 x float> @llvm.log10.v4f32(<4 x float>)
553 declare <2 x double> @llvm.log2.v2f64(<2 x double>)
554 declare <4 x float> @llvm.log2.v4f32(<4 x float>)
555 declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>)
556 declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)
557 declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>)
558 declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)
559 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>)
560 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>)
561 declare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>)
562 declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>)
563 declare <2 x double> @llvm.rint.v2f64(<2 x double>)
564 declare <4 x float> @llvm.rint.v4f32(<4 x float>)
565 declare <2 x double> @llvm.round.v2f64(<2 x double>)
566 declare <4 x float> @llvm.round.v4f32(<4 x float>)
567 declare <2 x double> @llvm.sin.v2f64(<2 x double>)
568 declare <4 x float> @llvm.sin.v4f32(<4 x float>)
569 declare <2 x double> @llvm.sqrt.v2f64(<2 x double>)
570 declare <4 x float> @llvm.sqrt.v4f32(<4 x float>)
571 declare <2 x double> @llvm.tan.v2f64(<2 x double>)
572 declare <4 x float> @llvm.tan.v4f32(<4 x float>)
573 declare <2 x double> @llvm.trunc.v2f64(<2 x double>)
574 declare <4 x float> @llvm.trunc.v4f32(<4 x float>)
576 ; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }