Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / AArch64 / veclib-calls-libsystem-darwin.ll
blob2017797288c29746eafc1250ae28fcd2fcf51894
1 ; RUN: opt < %s -vector-library=Darwin_libsystem_m -passes=inject-tli-mappings,loop-vectorize -S | FileCheck %s
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
4 target triple = "arm64-apple-darwin"
6 declare float @expf(float) nounwind readnone
7 define void @expf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
8 ; CHECK-LABEL: @expf_v4f32(
9 ; CHECK: call <4 x float> @_simd_exp_f4(
10 ; CHECK: ret void
12 entry:
13   br label %for.body
15 for.body:
16   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
17   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
18   %lv = load float, ptr %gep.y, align 4
19   %call = tail call float @expf(float %lv)
20   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
21   store float %call, ptr %gep.x, align 4
22   %iv.next = add i64 %iv, 1
23   %exitcond = icmp eq i64 %iv.next, %n
24   br i1 %exitcond, label %for.end, label %for.body
26 for.end:
27   ret void
30 declare double @exp(double) nounwind readnone
31 define void @exp_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
32 ; CHECK-LABEL: @exp_v2f64(
33 ; CHECK: call <2 x double> @_simd_exp_d2(
34 ; CHECK: ret void
36 entry:
37   br label %for.body
39 for.body:
40   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
41   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
42   %lv = load double, ptr %gep.y, align 4
43   %call = tail call double @exp(double %lv)
44   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
45   store double %call, ptr %gep.x, align 4
46   %iv.next = add i64 %iv, 1
47   %exitcond = icmp eq i64 %iv.next, %n
48   br i1 %exitcond, label %for.end, label %for.body
50 for.end:
51   ret void
54 declare float @acosf(float) nounwind readnone
55 define void @acos_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
56 ; CHECK-LABEL: @acos_v4f32(
57 ; CHECK: call <4 x float> @_simd_acos_f4(
58 ; CHECK: ret void
60 entry:
61   br label %for.body
63 for.body:
64   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
65   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
66   %lv = load float, ptr %gep.y, align 4
67   %call = tail call float @acosf(float %lv)
68   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
69   store float %call, ptr %gep.x, align 4
70   %iv.next = add i64 %iv, 1
71   %exitcond = icmp eq i64 %iv.next, %n
72   br i1 %exitcond, label %for.end, label %for.body
74 for.end:
75   ret void
78 declare double @acos(double) nounwind readnone
79 define void @acos_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
80 ; CHECK-LABEL: @acos_v2f64(
81 ; CHECK: call <2 x double> @_simd_acos_d2(
82 ; CHECK: ret void
84 entry:
85   br label %for.body
87 for.body:
88   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
89   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
90   %lv = load double, ptr %gep.y, align 4
91   %call = tail call double @acos(double %lv)
92   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
93   store double %call, ptr %gep.x, align 4
94   %iv.next = add i64 %iv, 1
95   %exitcond = icmp eq i64 %iv.next, %n
96   br i1 %exitcond, label %for.end, label %for.body
98 for.end:
99   ret void
102 declare float @asinf(float) nounwind readnone
103 define void @asinf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
104 ; CHECK-LABEL: @asinf_v4f32(
105 ; CHECK: call <4 x float> @_simd_asin_f4(
106 ; CHECK: ret void
108 entry:
109   br label %for.body
111 for.body:
112   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
113   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
114   %lv = load float, ptr %gep.y, align 4
115   %call = tail call float @asinf(float %lv)
116   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
117   store float %call, ptr %gep.x, align 4
118   %iv.next = add i64 %iv, 1
119   %exitcond = icmp eq i64 %iv.next, %n
120   br i1 %exitcond, label %for.end, label %for.body
122 for.end:
123   ret void
126 declare double @asin(double) nounwind readnone
127 define void @asin_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
128 ; CHECK-LABEL: @asin_v2f64(
129 ; CHECK: call <2 x double> @_simd_asin_d2(
130 ; CHECK: ret void
132 entry:
133   br label %for.body
135 for.body:
136   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
137   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
138   %lv = load double, ptr %gep.y, align 4
139   %call = tail call double @asin(double %lv)
140   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
141   store double %call, ptr %gep.x, align 4
142   %iv.next = add i64 %iv, 1
143   %exitcond = icmp eq i64 %iv.next, %n
144   br i1 %exitcond, label %for.end, label %for.body
146 for.end:
147   ret void
150  declare float @atanf(float) nounwind readnone
151 define void @atanf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
152 ; CHECK-LABEL: @atanf_v4f32(
153 ; CHECK: call <4 x float> @_simd_atan_f4(
154 ; CHECK: ret void
156 entry:
157   br label %for.body
159 for.body:
160   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
161   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
162   %lv = load float, ptr %gep.y, align 4
163   %call = tail call float @atanf(float %lv)
164   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
165   store float %call, ptr %gep.x, align 4
166   %iv.next = add i64 %iv, 1
167   %exitcond = icmp eq i64 %iv.next, %n
168   br i1 %exitcond, label %for.end, label %for.body
170 for.end:
171   ret void
174 declare double @atan(double) nounwind readnone
175 define void @atan_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
176 ; CHECK-LABEL: @atan_v2f64(
177 ; CHECK: call <2 x double> @_simd_atan_d2(
178 ; CHECK: ret void
180 entry:
181   br label %for.body
183 for.body:
184   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
185   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
186   %lv = load double, ptr %gep.y, align 4
187   %call = tail call double @atan(double %lv)
188   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
189   store double %call, ptr %gep.x, align 4
190   %iv.next = add i64 %iv, 1
191   %exitcond = icmp eq i64 %iv.next, %n
192   br i1 %exitcond, label %for.end, label %for.body
194 for.end:
195   ret void
198 declare float @atan2f(float, float) nounwind readnone
199 define void @atan2f_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
200 ; CHECK-LABEL: @atan2f_v4f32(
201 ; CHECK: call <4 x float> @_simd_atan2_f4(
202 ; CHECK: ret void
204 entry:
205   br label %for.body
207 for.body:
208   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
209   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
210   %lv = load float, ptr %gep.y, align 4
211   %call = tail call float @atan2f(float %lv, float %lv)
212   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
213   store float %call, ptr %gep.x, align 4
214   %iv.next = add i64 %iv, 1
215   %exitcond = icmp eq i64 %iv.next, %n
216   br i1 %exitcond, label %for.end, label %for.body
218 for.end:
219   ret void
222 declare double @atan2(double, double) nounwind readnone
223 define void @atan2_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
224 ; CHECK-LABEL: @atan2_v2f64(
225 ; CHECK: call <2 x double> @_simd_atan2_d2(
226 ; CHECK: ret void
228 entry:
229   br label %for.body
231 for.body:
232   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
233   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
234   %lv = load double, ptr %gep.y, align 4
235   %call = tail call double @atan2(double %lv, double %lv)
236   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
237   store double %call, ptr %gep.x, align 4
238   %iv.next = add i64 %iv, 1
239   %exitcond = icmp eq i64 %iv.next, %n
240   br i1 %exitcond, label %for.end, label %for.body
242 for.end:
243   ret void
246 declare float @cosf(float) nounwind readnone
247 define void @cosf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
248 ; CHECK-LABEL: @cosf_v4f32(
249 ; CHECK: call <4 x float> @_simd_cos_f4(
250 ; CHECK: ret void
252 entry:
253   br label %for.body
255 for.body:
256   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
257   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
258   %lv = load float, ptr %gep.y, align 4
259   %call = tail call float @cosf(float %lv)
260   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
261   store float %call, ptr %gep.x, align 4
262   %iv.next = add i64 %iv, 1
263   %exitcond = icmp eq i64 %iv.next, %n
264   br i1 %exitcond, label %for.end, label %for.body
266 for.end:
267   ret void
270 declare double @cos(double) nounwind readnone
271 define void @cos_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
272 ; CHECK-LABEL: @cos_v2f64(
273 ; CHECK: call <2 x double> @_simd_cos_d2(
274 ; CHECK: ret void
276 entry:
277   br label %for.body
279 for.body:
280   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
281   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
282   %lv = load double, ptr %gep.y, align 4
283   %call = tail call double @cos(double %lv)
284   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
285   store double %call, ptr %gep.x, align 4
286   %iv.next = add i64 %iv, 1
287   %exitcond = icmp eq i64 %iv.next, %n
288   br i1 %exitcond, label %for.end, label %for.body
290 for.end:
291   ret void
294 declare float @cbrtf(float) nounwind readnone
295 define void @cbrtf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
296 ; CHECK-LABEL: @cbrtf_v4f32(
297 ; CHECK: call <4 x float> @_simd_cbrt_f4(
298 ; CHECK: ret void
300 entry:
301   br label %for.body
303 for.body:
304   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
305   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
306   %lv = load float, ptr %gep.y, align 4
307   %call = tail call float @cbrtf(float %lv)
308   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
309   store float %call, ptr %gep.x, align 4
310   %iv.next = add i64 %iv, 1
311   %exitcond = icmp eq i64 %iv.next, %n
312   br i1 %exitcond, label %for.end, label %for.body
314 for.end:
315   ret void
318 declare double @cbrt(double) nounwind readnone
319 define void @cbrt_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
320 ; CHECK-LABEL: @cbrt_v2f64(
321 ; CHECK: call <2 x double> @_simd_cbrt_d2(
322 ; CHECK: ret void
324 entry:
325   br label %for.body
327 for.body:
328   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
329   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
330   %lv = load double, ptr %gep.y, align 4
331   %call = tail call double @cbrt(double %lv)
332   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
333   store double %call, ptr %gep.x, align 4
334   %iv.next = add i64 %iv, 1
335   %exitcond = icmp eq i64 %iv.next, %n
336   br i1 %exitcond, label %for.end, label %for.body
338 for.end:
339   ret void
342 declare float @erff(float) nounwind readnone
343 define void @erff_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
344 ; CHECK-LABEL: @erff_v4f32(
345 ; CHECK: call <4 x float> @_simd_erf_f4(
346 ; CHECK: ret void
348 entry:
349   br label %for.body
351 for.body:
352   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
353   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
354   %lv = load float, ptr %gep.y, align 4
355   %call = tail call float @erff(float %lv)
356   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
357   store float %call, ptr %gep.x, align 4
358   %iv.next = add i64 %iv, 1
359   %exitcond = icmp eq i64 %iv.next, %n
360   br i1 %exitcond, label %for.end, label %for.body
362 for.end:
363   ret void
366 declare double @erf(double) nounwind readnone
367 define void @erf_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
368 ; CHECK-LABEL: @erf_v2f64(
369 ; CHECK: call <2 x double> @_simd_erf_d2(
370 ; CHECK: ret void
372 entry:
373   br label %for.body
375 for.body:
376   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
377   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
378   %lv = load double, ptr %gep.y, align 4
379   %call = tail call double @erf(double %lv)
380   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
381   store double %call, ptr %gep.x, align 4
382   %iv.next = add i64 %iv, 1
383   %exitcond = icmp eq i64 %iv.next, %n
384   br i1 %exitcond, label %for.end, label %for.body
386 for.end:
387   ret void
390 declare float @powf(float, float) nounwind readnone
391 define void @powf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
392 ; CHECK-LABEL: @powf_v4f32(
393 ; CHECK: call <4 x float> @_simd_pow_f4(
394 ; CHECK: ret void
396 entry:
397   br label %for.body
399 for.body:
400   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
401   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
402   %lv = load float, ptr %gep.y, align 4
403   %call = tail call float @powf(float %lv, float %lv)
404   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
405   store float %call, ptr %gep.x, align 4
406   %iv.next = add i64 %iv, 1
407   %exitcond = icmp eq i64 %iv.next, %n
408   br i1 %exitcond, label %for.end, label %for.body
410 for.end:
411   ret void
414 declare double @pow(double, double) nounwind readnone
415 define void @pow_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
416 ; CHECK-LABEL: @pow_v2f64(
417 ; CHECK: call <2 x double> @_simd_pow_d2(
418 ; CHECK: ret void
420 entry:
421   br label %for.body
423 for.body:
424   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
425   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
426   %lv = load double, ptr %gep.y, align 4
427   %call = tail call double @pow(double %lv, double %lv)
428   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
429   store double %call, ptr %gep.x, align 4
430   %iv.next = add i64 %iv, 1
431   %exitcond = icmp eq i64 %iv.next, %n
432   br i1 %exitcond, label %for.end, label %for.body
434 for.end:
435   ret void
438 declare float @sinhf(float) nounwind readnone
439 define void @sinhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
440 ; CHECK-LABEL: @sinhf_v4f32(
441 ; CHECK: call <4 x float> @_simd_sinh_f4(
442 ; CHECK: ret void
444 entry:
445   br label %for.body
447 for.body:
448   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
449   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
450   %lv = load float, ptr %gep.y, align 4
451   %call = tail call float @sinhf(float %lv)
452   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
453   store float %call, ptr %gep.x, align 4
454   %iv.next = add i64 %iv, 1
455   %exitcond = icmp eq i64 %iv.next, %n
456   br i1 %exitcond, label %for.end, label %for.body
458 for.end:
459   ret void
462 declare double @sinh(double) nounwind readnone
463 define void @sinh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
464 ; CHECK-LABEL: @sinh_v2f64(
465 ; CHECK: call <2 x double> @_simd_sinh_d2(
466 ; CHECK: ret void
468 entry:
469   br label %for.body
471 for.body:
472   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
473   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
474   %lv = load double, ptr %gep.y, align 4
475   %call = tail call double @sinh(double %lv)
476   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
477   store double %call, ptr %gep.x, align 4
478   %iv.next = add i64 %iv, 1
479   %exitcond = icmp eq i64 %iv.next, %n
480   br i1 %exitcond, label %for.end, label %for.body
482 for.end:
483   ret void
486 declare float @coshf(float) nounwind readnone
487 define void @coshf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
488 ; CHECK-LABEL: @coshf_v4f32(
489 ; CHECK: call <4 x float> @_simd_cosh_f4(
490 ; CHECK: ret void
492 entry:
493   br label %for.body
495 for.body:
496   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
497   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
498   %lv = load float, ptr %gep.y, align 4
499   %call = tail call float @coshf(float %lv)
500   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
501   store float %call, ptr %gep.x, align 4
502   %iv.next = add i64 %iv, 1
503   %exitcond = icmp eq i64 %iv.next, %n
504   br i1 %exitcond, label %for.end, label %for.body
506 for.end:
507   ret void
510 declare double @cosh(double) nounwind readnone
511 define void @cosh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
512 ; CHECK-LABEL: @cosh_v2f64(
513 ; CHECK: call <2 x double> @_simd_cosh_d2(
514 ; CHECK: ret void
516 entry:
517   br label %for.body
519 for.body:
520   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
521   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
522   %lv = load double, ptr %gep.y, align 4
523   %call = tail call double @cosh(double %lv)
524   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
525   store double %call, ptr %gep.x, align 4
526   %iv.next = add i64 %iv, 1
527   %exitcond = icmp eq i64 %iv.next, %n
528   br i1 %exitcond, label %for.end, label %for.body
530 for.end:
531   ret void
534 declare float @tanhf(float) nounwind readnone
535 define void @tanhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
536 ; CHECK-LABEL: @tanhf_v4f32(
537 ; CHECK: call <4 x float> @_simd_tanh_f4(
538 ; CHECK: ret void
540 entry:
541   br label %for.body
543 for.body:
544   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
545   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
546   %lv = load float, ptr %gep.y, align 4
547   %call = tail call float @tanhf(float %lv)
548   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
549   store float %call, ptr %gep.x, align 4
550   %iv.next = add i64 %iv, 1
551   %exitcond = icmp eq i64 %iv.next, %n
552   br i1 %exitcond, label %for.end, label %for.body
554 for.end:
555   ret void
558 declare double @tanh(double) nounwind readnone
559 define void @tanh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
560 ; CHECK-LABEL: @tanh_v2f64(
561 ; CHECK: call <2 x double> @_simd_tanh_d2(
562 ; CHECK: ret void
564 entry:
565   br label %for.body
567 for.body:
568   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
569   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
570   %lv = load double, ptr %gep.y, align 4
571   %call = tail call double @tanh(double %lv)
572   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
573   store double %call, ptr %gep.x, align 4
574   %iv.next = add i64 %iv, 1
575   %exitcond = icmp eq i64 %iv.next, %n
576   br i1 %exitcond, label %for.end, label %for.body
578 for.end:
579   ret void
582 declare float @asinhf(float) nounwind readnone
583 define void @asinhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
584 ; CHECK-LABEL: @asinhf_v4f32(
585 ; CHECK: call <4 x float> @_simd_asinh_f4(
586 ; CHECK: ret void
588 entry:
589   br label %for.body
591 for.body:
592   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
593   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
594   %lv = load float, ptr %gep.y, align 4
595   %call = tail call float @asinhf(float %lv)
596   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
597   store float %call, ptr %gep.x, align 4
598   %iv.next = add i64 %iv, 1
599   %exitcond = icmp eq i64 %iv.next, %n
600   br i1 %exitcond, label %for.end, label %for.body
602 for.end:
603   ret void
606 declare double @asinh(double) nounwind readnone
607 define void @asinh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
608 ; CHECK-LABEL: @asinh_v2f64(
609 ; CHECK: call <2 x double> @_simd_asinh_d2(
610 ; CHECK: ret void
612 entry:
613   br label %for.body
615 for.body:
616   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
617   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
618   %lv = load double, ptr %gep.y, align 4
619   %call = tail call double @asinh(double %lv)
620   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
621   store double %call, ptr %gep.x, align 4
622   %iv.next = add i64 %iv, 1
623   %exitcond = icmp eq i64 %iv.next, %n
624   br i1 %exitcond, label %for.end, label %for.body
626 for.end:
627   ret void
630 declare float @acoshf(float) nounwind readnone
631 define void @acoshf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
632 ; CHECK-LABEL: @acoshf_v4f32(
633 ; CHECK: call <4 x float> @_simd_acosh_f4(
634 ; CHECK: ret void
636 entry:
637   br label %for.body
639 for.body:
640   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
641   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
642   %lv = load float, ptr %gep.y, align 4
643   %call = tail call float @acoshf(float %lv)
644   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
645   store float %call, ptr %gep.x, align 4
646   %iv.next = add i64 %iv, 1
647   %exitcond = icmp eq i64 %iv.next, %n
648   br i1 %exitcond, label %for.end, label %for.body
650 for.end:
651   ret void
654 declare double @acosh(double) nounwind readnone
655 define void @acosh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
656 ; CHECK-LABEL: @acosh_v2f64(
657 ; CHECK: call <2 x double> @_simd_acosh_d2(
658 ; CHECK: ret void
660 entry:
661   br label %for.body
663 for.body:
664   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
665   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
666   %lv = load double, ptr %gep.y, align 4
667   %call = tail call double @acosh(double %lv)
668   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
669   store double %call, ptr %gep.x, align 4
670   %iv.next = add i64 %iv, 1
671   %exitcond = icmp eq i64 %iv.next, %n
672   br i1 %exitcond, label %for.end, label %for.body
674 for.end:
675   ret void
678 declare float @atanhf(float) nounwind readnone
679 define void @atanhf_v4f32(i64 %n, ptr noalias %y, ptr noalias %x) {
680 ; CHECK-LABEL: @atanhf_v4f32(
681 ; CHECK: call <4 x float> @_simd_atanh_f4(
682 ; CHECK: ret void
684 entry:
685   br label %for.body
687 for.body:
688   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
689   %gep.y = getelementptr inbounds float, ptr %y, i64 %iv
690   %lv = load float, ptr %gep.y, align 4
691   %call = tail call float @atanhf(float %lv)
692   %gep.x = getelementptr inbounds float, ptr %x, i64 %iv
693   store float %call, ptr %gep.x, align 4
694   %iv.next = add i64 %iv, 1
695   %exitcond = icmp eq i64 %iv.next, %n
696   br i1 %exitcond, label %for.end, label %for.body
698 for.end:
699   ret void
702 declare double @atanh(double) nounwind readnone
703 define void @atanh_v2f64(i64 %n, ptr noalias %y, ptr noalias %x) {
704 ; CHECK-LABEL: @atanh_v2f64(
705 ; CHECK: call <2 x double> @_simd_atanh_d2(
706 ; CHECK: ret void
708 entry:
709   br label %for.body
711 for.body:
712   %iv = phi i64 [ %iv.next, %for.body ], [ 0, %entry ]
713   %gep.y = getelementptr inbounds double, ptr %y, i64 %iv
714   %lv = load double, ptr %gep.y, align 4
715   %call = tail call double @atanh(double %lv)
716   %gep.x = getelementptr inbounds double, ptr %x, i64 %iv
717   store double %call, ptr %gep.x, align 4
718   %iv.next = add i64 %iv, 1
719   %exitcond = icmp eq i64 %iv.next, %n
720   br i1 %exitcond, label %for.end, label %for.body
722 for.end:
723   ret void