[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / PowerPC / massv-calls.ll
blob30fe5f96cc5bf955afb9dea31cd149c314ab371f
1 ; RUN: opt -vector-library=MASSV -mtriple=powerpc64le-unknown-linux-gnu -inject-tli-mappings -loop-vectorize -force-vector-interleave=1 -S < %s | FileCheck %s
2 ; RUN: opt -vector-library=MASSV -vec-extabi -mattr=+altivec -mtriple=powerpc64-ibm-aix-xcoff -inject-tli-mappings -loop-vectorize -force-vector-interleave=1 -S < %s | FileCheck %s
4 declare double @cbrt(double) #0
5 declare float @cbrtf(float) #0
7 declare double @pow(double, double) #0
8 declare double @llvm.pow.f64(double, double) #0
9 declare float @powf(float, float) #0
10 declare float @llvm.pow.f32(float, float) #0
12 declare double @sqrt(double) #0
13 declare float @sqrtf(float) #0
15 declare double @exp(double) #0
16 declare double @llvm.exp.f64(double) #0
17 declare float @expf(float) #0
18 declare float @llvm.exp.f32(float) #0
20 declare double @exp2(double) #0
21 declare double @llvm.exp2.f64(double) #0
22 declare float @exp2f(float) #0
23 declare float @llvm.exp2.f32(float) #0
25 declare double @expm1(double) #0
26 declare float @expm1f(float) #0
28 declare double @log(double) #0
29 declare double @llvm.log.f64(double) #0
30 declare float @logf(float) #0
31 declare float @llvm.log.f32(float) #0
33 declare double @log1p(double) #0
34 declare float @log1pf(float) #0
36 declare double @log10(double) #0
37 declare double @llvm.log10.f64(double) #0
38 declare float @log10f(float) #0
39 declare float @llvm.log10.f32(float) #0
41 declare double @log2(double) #0
42 declare double @llvm.log2.f64(double) #0
43 declare float @log2f(float) #0
44 declare float @llvm.log2.f32(float) #0
46 declare double @sin(double) #0
47 declare double @llvm.sin.f64(double) #0
48 declare float @sinf(float) #0
49 declare float @llvm.sin.f32(float) #0
51 declare double @cos(double) #0
52 declare double @llvm.cos.f64(double) #0
53 declare float @cosf(float) #0
54 declare float @llvm.cos.f32(float) #0
56 declare double @tan(double) #0
57 declare float @tanf(float) #0
59 declare double @asin(double) #0
60 declare float @asinf(float) #0
62 declare double @acos(double) #0
63 declare float @acosf(float) #0
65 declare double @atan(double) #0
66 declare float @atanf(float) #0
68 declare double @atan2(double) #0
69 declare float @atan2f(float) #0
71 declare double @sinh(double) #0
72 declare float @sinhf(float) #0
74 declare double @cosh(double) #0
75 declare float @coshf(float) #0
77 declare double @tanh(double) #0
78 declare float @tanhf(float) #0
80 declare double @asinh(double) #0
81 declare float @asinhf(float) #0
83 declare double @acosh(double) #0
84 declare float @acoshf(float) #0
86 declare double @atanh(double) #0
87 declare float @atanhf(float) #0
89 define void @cbrt_f64(double* nocapture %varray) {
90 ; CHECK-LABEL: @cbrt_f64(
91 ; CHECK: __cbrtd2{{.*}}<2 x double>
92 ; CHECK: ret void
94 entry:
95   br label %for.body
97 for.body:
98   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
99   %tmp = trunc i64 %iv to i32
100   %conv = sitofp i32 %tmp to double
101   %call = tail call double @cbrt(double %conv)
102   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
103   store double %call, double* %arrayidx, align 4
104   %iv.next = add nuw nsw i64 %iv, 1
105   %exitcond = icmp eq i64 %iv.next, 1000
106   br i1 %exitcond, label %for.end, label %for.body
108 for.end:
109   ret void
112 define void @cbrt_f32(float* nocapture %varray) {
113 ; CHECK-LABEL: @cbrt_f32(
114 ; CHECK: __cbrtf4{{.*}}<4 x float>
115 ; CHECK: ret void
117 entry:
118   br label %for.body
120 for.body:
121   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
122   %tmp = trunc i64 %iv to i32
123   %conv = sitofp i32 %tmp to float
124   %call = tail call float @cbrtf(float %conv)
125   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
126   store float %call, float* %arrayidx, align 4
127   %iv.next = add nuw nsw i64 %iv, 1
128   %exitcond = icmp eq i64 %iv.next, 1000
129   br i1 %exitcond, label %for.end, label %for.body
131 for.end:
132   ret void
135 define void @pow_f64(double* nocapture %varray, double* nocapture readonly %exp) {
136 ; CHECK-LABEL: @pow_f64(
137 ; CHECK:  __powd2{{.*}}<2 x double>
138 ; CHECK:  ret void
140 entry:
141   br label %for.body
143 for.body:
144   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
145   %tmp = trunc i64 %iv to i32
146   %conv = sitofp i32 %tmp to double
147   %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv
148   %tmp1 = load double, double* %arrayidx, align 4
149   %tmp2 = tail call double @pow(double %conv, double %tmp1)
150   %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv
151   store double %tmp2, double* %arrayidx2, align 4
152   %iv.next = add nuw nsw i64 %iv, 1
153   %exitcond = icmp eq i64 %iv.next, 1000
154   br i1 %exitcond, label %for.end, label %for.body
156 for.end:
157   ret void
160 define void @pow_f64_intrinsic(double* nocapture %varray, double* nocapture readonly %exp) {
161 ; CHECK-LABEL: @pow_f64_intrinsic(
162 ; CHECK: __powd2{{.*}}<2 x double>
163 ; CHECK: ret void
165 entry:
166   br label %for.body
168 for.body:
169   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
170   %tmp = trunc i64 %iv to i32
171   %conv = sitofp i32 %tmp to double
172   %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv
173   %tmp1 = load double, double* %arrayidx, align 4
174   %tmp2 = tail call double @llvm.pow.f64(double %conv, double %tmp1)
175   %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv
176   store double %tmp2, double* %arrayidx2, align 4
177   %iv.next = add nuw nsw i64 %iv, 1
178   %exitcond = icmp eq i64 %iv.next, 1000
179   br i1 %exitcond, label %for.end, label %for.body
181 for.end:
182   ret void
185 define void @pow_f32(float* nocapture %varray, float* nocapture readonly %exp) {
186 ; CHECK-LABEL: @pow_f32(
187 ; CHECK: __powf4{{.*}}<4 x float>
188 ; CHECK: ret void
190 entry:
191   br label %for.body
193 for.body:
194   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
195   %tmp = trunc i64 %iv to i32
196   %conv = sitofp i32 %tmp to float
197   %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv
198   %tmp1 = load float, float* %arrayidx, align 4
199   %tmp2 = tail call float @powf(float %conv, float %tmp1)
200   %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv
201   store float %tmp2, float* %arrayidx2, align 4
202   %iv.next = add nuw nsw i64 %iv, 1
203   %exitcond = icmp eq i64 %iv.next, 1000
204   br i1 %exitcond, label %for.end, label %for.body
206 for.end:
207   ret void
210 define void @pow_f32_intrinsic(float* nocapture %varray, float* nocapture readonly %exp) {
211 ; CHECK-LABEL: @pow_f32_intrinsic(
212 ; CHECK: __powf4{{.*}}<4 x float>
213 ; CHECK: ret void
215 entry:
216   br label %for.body
218 for.body:
219   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
220   %tmp = trunc i64 %iv to i32
221   %conv = sitofp i32 %tmp to float
222   %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv
223   %tmp1 = load float, float* %arrayidx, align 4
224   %tmp2 = tail call float @llvm.pow.f32(float %conv, float %tmp1)
225   %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv
226   store float %tmp2, float* %arrayidx2, align 4
227   %iv.next = add nuw nsw i64 %iv, 1
228   %exitcond = icmp eq i64 %iv.next, 1000
229   br i1 %exitcond, label %for.end, label %for.body
231 for.end:
232   ret void
235 define void @sqrt_f64(double* nocapture %varray) {
236 ; CHECK-LABEL: @sqrt_f64(
237 ; CHECK-NOT: __sqrtd2{{.*}}<2 x double>
238 ; CHECK: ret void
240 entry:
241   br label %for.body
243 for.body:
244   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
245   %tmp = trunc i64 %iv to i32
246   %conv = sitofp i32 %tmp to double
247   %call = tail call double @sqrt(double %conv)
248   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
249   store double %call, double* %arrayidx, align 4
250   %iv.next = add nuw nsw i64 %iv, 1
251   %exitcond = icmp eq i64 %iv.next, 1000
252   br i1 %exitcond, label %for.end, label %for.body
254 for.end:
255   ret void
258 define void @sqrt_f32(float* nocapture %varray) {
259 ; CHECK-LABEL: @sqrt_f32(
260 ; CHECK-NOT: __sqrtf4{{.*}}<4 x float>
261 ; CHECK: ret void
263 entry:
264   br label %for.body
266 for.body:
267   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
268   %tmp = trunc i64 %iv to i32
269   %conv = sitofp i32 %tmp to float
270   %call = tail call float @sqrtf(float %conv)
271   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
272   store float %call, float* %arrayidx, align 4
273   %iv.next = add nuw nsw i64 %iv, 1
274   %exitcond = icmp eq i64 %iv.next, 1000
275   br i1 %exitcond, label %for.end, label %for.body
277 for.end:
278   ret void
281 define void @exp_f64(double* nocapture %varray) {
282 ; CHECK-LABEL: @exp_f64(
283 ; CHECK: __expd2{{.*}}<2 x double>
284 ; CHECK: ret void
286 entry:
287   br label %for.body
289 for.body:
290   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
291   %tmp = trunc i64 %iv to i32
292   %conv = sitofp i32 %tmp to double
293   %call = tail call double @exp(double %conv)
294   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
295   store double %call, double* %arrayidx, align 4
296   %iv.next = add nuw nsw i64 %iv, 1
297   %exitcond = icmp eq i64 %iv.next, 1000
298   br i1 %exitcond, label %for.end, label %for.body
300 for.end:
301   ret void
304 define void @exp_f64_intrinsic(double* nocapture %varray) {
305 ; CHECK-LABEL: @exp_f64_intrinsic(
306 ; CHECK: __expd2{{.*}}<2 x double>
307 ; CHECK: ret void
309 entry:
310   br label %for.body
312 for.body:
313   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
314   %tmp = trunc i64 %iv to i32
315   %conv = sitofp i32 %tmp to double
316   %call = tail call double @llvm.exp.f64(double %conv)
317   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
318   store double %call, double* %arrayidx, align 4
319   %iv.next = add nuw nsw i64 %iv, 1
320   %exitcond = icmp eq i64 %iv.next, 1000
321   br i1 %exitcond, label %for.end, label %for.body
323 for.end:
324   ret void
327 define void @exp_f32(float* nocapture %varray) {
328 ; CHECK-LABEL: @exp_f32(
329 ; CHECK: __expf4{{.*}}<4 x float>
330 ; CHECK: ret void
332 entry:
333   br label %for.body
335 for.body:
336   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
337   %tmp = trunc i64 %iv to i32
338   %conv = sitofp i32 %tmp to float
339   %call = tail call float @expf(float %conv)
340   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
341   store float %call, float* %arrayidx, align 4
342   %iv.next = add nuw nsw i64 %iv, 1
343   %exitcond = icmp eq i64 %iv.next, 1000
344   br i1 %exitcond, label %for.end, label %for.body
346 for.end:
347   ret void
350 define void @exp_f32_intrinsic(float* nocapture %varray) {
351 ; CHECK-LABEL: @exp_f32_intrinsic(
352 ; CHECK: __expf4{{.*}}<4 x float>
353 ; CHECK: ret void
355 entry:
356   br label %for.body
358 for.body:
359   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
360   %tmp = trunc i64 %iv to i32
361   %conv = sitofp i32 %tmp to float
362   %call = tail call float @llvm.exp.f32(float %conv)
363   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
364   store float %call, float* %arrayidx, align 4
365   %iv.next = add nuw nsw i64 %iv, 1
366   %exitcond = icmp eq i64 %iv.next, 1000
367   br i1 %exitcond, label %for.end, label %for.body
369 for.end:
370   ret void
373 define void @exp2_f64(double* nocapture %varray) {
374 ; CHECK-LABEL: @exp2_f64(
375 ; CHECK: __exp2d2{{.*}}<2 x double>
376 ; CHECK:  ret void
378 entry:
379   br label %for.body
381 for.body:
382   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
383   %tmp = trunc i64 %iv to i32
384   %conv = sitofp i32 %tmp to double
385   %call = tail call double @exp2(double %conv)
386   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
387   store double %call, double* %arrayidx, align 4
388   %iv.next = add nuw nsw i64 %iv, 1
389   %exitcond = icmp eq i64 %iv.next, 1000
390   br i1 %exitcond, label %for.end, label %for.body
392 for.end:
393   ret void
396 define void @exp2_f64_intrinsic(double* nocapture %varray) {
397 ; CHECK-LABEL: @exp2_f64_intrinsic(
398 ; CHECK: __exp2d2{{.*}}<2 x double>
399 ; CHECK: ret void
401 entry:
402   br label %for.body
404 for.body:
405   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
406   %tmp = trunc i64 %iv to i32
407   %conv = sitofp i32 %tmp to double
408   %call = tail call double @llvm.exp2.f64(double %conv)
409   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
410   store double %call, double* %arrayidx, align 4
411   %iv.next = add nuw nsw i64 %iv, 1
412   %exitcond = icmp eq i64 %iv.next, 1000
413   br i1 %exitcond, label %for.end, label %for.body
415 for.end:
416   ret void
419 define void @exp2_f32(float* nocapture %varray) {
420 ; CHECK-LABEL: @exp2_f32(
421 ; CHECK: __exp2f4{{.*}}<4 x float>
422 ; CHECK: ret void
424 entry:
425   br label %for.body
427 for.body:
428   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
429   %tmp = trunc i64 %iv to i32
430   %conv = sitofp i32 %tmp to float
431   %call = tail call float @exp2f(float %conv)
432   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
433   store float %call, float* %arrayidx, align 4
434   %iv.next = add nuw nsw i64 %iv, 1
435   %exitcond = icmp eq i64 %iv.next, 1000
436   br i1 %exitcond, label %for.end, label %for.body
438 for.end:
439   ret void
442 define void @exp2_f32_intrinsic(float* nocapture %varray) {
443 ; CHECK-LABEL: @exp2_f32_intrinsic(
444 ; CHECK: __exp2f4{{.*}}<4 x float>
445 ; CHECK: ret void
447 entry:
448   br label %for.body
450 for.body:
451   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
452   %tmp = trunc i64 %iv to i32
453   %conv = sitofp i32 %tmp to float
454   %call = tail call float @llvm.exp2.f32(float %conv)
455   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
456   store float %call, float* %arrayidx, align 4
457   %iv.next = add nuw nsw i64 %iv, 1
458   %exitcond = icmp eq i64 %iv.next, 1000
459   br i1 %exitcond, label %for.end, label %for.body
461 for.end:
462   ret void
465 define void @expm1_f64(double* nocapture %varray) {
466 ; CHECK-LABEL: @expm1_f64(
467 ; CHECK: __expm1d2{{.*}}<2 x double>
468 ; CHECK:  ret void
470 entry:
471   br label %for.body
473 for.body:
474   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
475   %tmp = trunc i64 %iv to i32
476   %conv = sitofp i32 %tmp to double
477   %call = tail call double @expm1(double %conv)
478   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
479   store double %call, double* %arrayidx, align 4
480   %iv.next = add nuw nsw i64 %iv, 1
481   %exitcond = icmp eq i64 %iv.next, 1000
482   br i1 %exitcond, label %for.end, label %for.body
484 for.end:
485   ret void
488 define void @expm1_f32(float* nocapture %varray) {
489 ; CHECK-LABEL: @expm1_f32(
490 ; CHECK: __expm1f4{{.*}}<4 x float>
491 ; CHECK: ret void
493 entry:
494   br label %for.body
496 for.body:
497   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
498   %tmp = trunc i64 %iv to i32
499   %conv = sitofp i32 %tmp to float
500   %call = tail call float @expm1f(float %conv)
501   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
502   store float %call, float* %arrayidx, align 4
503   %iv.next = add nuw nsw i64 %iv, 1
504   %exitcond = icmp eq i64 %iv.next, 1000
505   br i1 %exitcond, label %for.end, label %for.body
507 for.end:
508   ret void
511 define void @log_f64(double* nocapture %varray) {
512 ; CHECK-LABEL: @log_f64(
513 ; CHECK: __logd2{{.*}}<2 x double>
514 ; CHECK: ret void
516 entry:
517   br label %for.body
519 for.body:
520   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
521   %tmp = trunc i64 %iv to i32
522   %conv = sitofp i32 %tmp to double
523   %call = tail call double @log(double %conv)
524   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
525   store double %call, double* %arrayidx, align 4
526   %iv.next = add nuw nsw i64 %iv, 1
527   %exitcond = icmp eq i64 %iv.next, 1000
528   br i1 %exitcond, label %for.end, label %for.body
530 for.end:
531   ret void
534 define void @log_f64_intrinsic(double* nocapture %varray) {
535 ; CHECK-LABEL: @log_f64_intrinsic(
536 ; CHECK: __logd2{{.*}}<2 x double>
537 ; CHECK: ret void
539 entry:
540   br label %for.body
542 for.body:
543   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
544   %tmp = trunc i64 %iv to i32
545   %conv = sitofp i32 %tmp to double
546   %call = tail call double @llvm.log.f64(double %conv)
547   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
548   store double %call, double* %arrayidx, align 4
549   %iv.next = add nuw nsw i64 %iv, 1
550   %exitcond = icmp eq i64 %iv.next, 1000
551   br i1 %exitcond, label %for.end, label %for.body
553 for.end:
554   ret void
557 define void @log_f32(float* nocapture %varray) {
558 ; CHECK-LABEL: @log_f32(
559 ; CHECK: __logf4{{.*}}<4 x float>
560 ; CHECK: ret void
562 entry:
563   br label %for.body
565 for.body:
566   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
567   %tmp = trunc i64 %iv to i32
568   %conv = sitofp i32 %tmp to float
569   %call = tail call float @logf(float %conv)
570   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
571   store float %call, float* %arrayidx, align 4
572   %iv.next = add nuw nsw i64 %iv, 1
573   %exitcond = icmp eq i64 %iv.next, 1000
574   br i1 %exitcond, label %for.end, label %for.body
576 for.end:
577   ret void
580 define void @log_f32_intrinsic(float* nocapture %varray) {
581 ; CHECK-LABEL: @log_f32_intrinsic(
582 ; CHECK: __logf4{{.*}}<4 x float>
583 ; CHECK: ret void
585 entry:
586   br label %for.body
588 for.body:
589   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
590   %tmp = trunc i64 %iv to i32
591   %conv = sitofp i32 %tmp to float
592   %call = tail call float @llvm.log.f32(float %conv)
593   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
594   store float %call, float* %arrayidx, align 4
595   %iv.next = add nuw nsw i64 %iv, 1
596   %exitcond = icmp eq i64 %iv.next, 1000
597   br i1 %exitcond, label %for.end, label %for.body
599 for.end:
600   ret void
603 define void @log1p_f64(double* nocapture %varray) {
604 ; CHECK-LABEL: @log1p_f64(
605 ; CHECK: __log1pd2{{.*}}<2 x double>
606 ; CHECK: ret void
608 entry:
609   br label %for.body
611 for.body:
612   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
613   %tmp = trunc i64 %iv to i32
614   %conv = sitofp i32 %tmp to double
615   %call = tail call double @log1p(double %conv)
616   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
617   store double %call, double* %arrayidx, align 4
618   %iv.next = add nuw nsw i64 %iv, 1
619   %exitcond = icmp eq i64 %iv.next, 1000
620   br i1 %exitcond, label %for.end, label %for.body
622 for.end:
623   ret void
626 define void @log1p_f32(float* nocapture %varray) {
627 ; CHECK-LABEL: @log1p_f32(
628 ; CHECK: __log1pf4{{.*}}<4 x float>
629 ; CHECK: ret void
631 entry:
632   br label %for.body
634 for.body:
635   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
636   %tmp = trunc i64 %iv to i32
637   %conv = sitofp i32 %tmp to float
638   %call = tail call float @log1pf(float %conv)
639   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
640   store float %call, float* %arrayidx, align 4
641   %iv.next = add nuw nsw i64 %iv, 1
642   %exitcond = icmp eq i64 %iv.next, 1000
643   br i1 %exitcond, label %for.end, label %for.body
645 for.end:
646   ret void
649 define void @log10_f64(double* nocapture %varray) {
650 ; CHECK-LABEL: @log10_f64(
651 ; CHECK: __log10d2(<2 x double>
652 ; CHECK: ret void
654 entry:
655   br label %for.body
657 for.body:
658   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
659   %tmp = trunc i64 %iv to i32
660   %conv = sitofp i32 %tmp to double
661   %call = tail call double @log10(double %conv)
662   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
663   store double %call, double* %arrayidx, align 4
664   %iv.next = add nuw nsw i64 %iv, 1
665   %exitcond = icmp eq i64 %iv.next, 1000
666   br i1 %exitcond, label %for.end, label %for.body
668 for.end:
669   ret void
672 define void @log10_f64_intrinsic(double* nocapture %varray) {
673 ; CHECK-LABEL: @log10_f64_intrinsic(
674 ; CHECK: __log10d2{{.*}}<2 x double>
675 ; CHECK: ret void
677 entry:
678   br label %for.body
680 for.body:
681   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
682   %tmp = trunc i64 %iv to i32
683   %conv = sitofp i32 %tmp to double
684   %call = tail call double @llvm.log10.f64(double %conv)
685   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
686   store double %call, double* %arrayidx, align 4
687   %iv.next = add nuw nsw i64 %iv, 1
688   %exitcond = icmp eq i64 %iv.next, 1000
689   br i1 %exitcond, label %for.end, label %for.body
691 for.end:
692   ret void
695 define void @log10_f32(float* nocapture %varray) {
696 ; CHECK-LABEL: @log10_f32(
697 ; CHECK: __log10f4{{.*}}<4 x float>
698 ; CHECK: ret void
700 entry:
701   br label %for.body
703 for.body:
704   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
705   %tmp = trunc i64 %iv to i32
706   %conv = sitofp i32 %tmp to float
707   %call = tail call float @log10f(float %conv)
708   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
709   store float %call, float* %arrayidx, align 4
710   %iv.next = add nuw nsw i64 %iv, 1
711   %exitcond = icmp eq i64 %iv.next, 1000
712   br i1 %exitcond, label %for.end, label %for.body
714 for.end:
715   ret void
718 define void @log10_f32_intrinsic(float* nocapture %varray) {
719 ; CHECK-LABEL: @log10_f32_intrinsic(
720 ; CHECK: __log10f4{{.*}}<4 x float>
721 ; CHECK: ret void
723 entry:
724   br label %for.body
726 for.body:
727   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
728   %tmp = trunc i64 %iv to i32
729   %conv = sitofp i32 %tmp to float
730   %call = tail call float @llvm.log10.f32(float %conv)
731   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
732   store float %call, float* %arrayidx, align 4
733   %iv.next = add nuw nsw i64 %iv, 1
734   %exitcond = icmp eq i64 %iv.next, 1000
735   br i1 %exitcond, label %for.end, label %for.body
737 for.end:
738   ret void
741 define void @log2_f64(double* nocapture %varray) {
742 ; CHECK-LABEL: @log2_f64(
743 ; CHECK: __log2d2(<2 x double>
744 ; CHECK: ret void
746 entry:
747   br label %for.body
749 for.body:
750   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
751   %tmp = trunc i64 %iv to i32
752   %conv = sitofp i32 %tmp to double
753   %call = tail call double @log2(double %conv)
754   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
755   store double %call, double* %arrayidx, align 4
756   %iv.next = add nuw nsw i64 %iv, 1
757   %exitcond = icmp eq i64 %iv.next, 1000
758   br i1 %exitcond, label %for.end, label %for.body
760 for.end:
761   ret void
764 define void @log2_f64_intrinsic(double* nocapture %varray) {
765 ; CHECK-LABEL: @log2_f64_intrinsic(
766 ; CHECK: __log2d2{{.*}}<2 x double>
767 ; CHECK: ret void
769 entry:
770   br label %for.body
772 for.body:
773   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
774   %tmp = trunc i64 %iv to i32
775   %conv = sitofp i32 %tmp to double
776   %call = tail call double @llvm.log2.f64(double %conv)
777   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
778   store double %call, double* %arrayidx, align 4
779   %iv.next = add nuw nsw i64 %iv, 1
780   %exitcond = icmp eq i64 %iv.next, 1000
781   br i1 %exitcond, label %for.end, label %for.body
783 for.end:
784   ret void
787 define void @log2_f32(float* nocapture %varray) {
788 ; CHECK-LABEL: @log2_f32(
789 ; CHECK: __log2f4{{.*}}<4 x float>
790 ; CHECK: ret void
792 entry:
793   br label %for.body
795 for.body:
796   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
797   %tmp = trunc i64 %iv to i32
798   %conv = sitofp i32 %tmp to float
799   %call = tail call float @log2f(float %conv)
800   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
801   store float %call, float* %arrayidx, align 4
802   %iv.next = add nuw nsw i64 %iv, 1
803   %exitcond = icmp eq i64 %iv.next, 1000
804   br i1 %exitcond, label %for.end, label %for.body
806 for.end:
807   ret void
810 define void @log2_f32_intrinsic(float* nocapture %varray) {
811 ; CHECK-LABEL: @log2_f32_intrinsic(
812 ; CHECK: __log2f4{{.*}}<4 x float>
813 ; CHECK: ret void
815 entry:
816   br label %for.body
818 for.body:
819   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
820   %tmp = trunc i64 %iv to i32
821   %conv = sitofp i32 %tmp to float
822   %call = tail call float @llvm.log2.f32(float %conv)
823   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
824   store float %call, float* %arrayidx, align 4
825   %iv.next = add nuw nsw i64 %iv, 1
826   %exitcond = icmp eq i64 %iv.next, 1000
827   br i1 %exitcond, label %for.end, label %for.body
829 for.end:
830   ret void
833 define void @sin_f64(double* nocapture %varray) {
834 ; CHECK-LABEL: @sin_f64(
835 ; CHECK: __sind2{{.*}}<2 x double>
836 ; CHECK: ret void
838 entry:
839   br label %for.body
841 for.body:
842   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
843   %tmp = trunc i64 %iv to i32
844   %conv = sitofp i32 %tmp to double
845   %call = tail call double @sin(double %conv)
846   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
847   store double %call, double* %arrayidx, align 4
848   %iv.next = add nuw nsw i64 %iv, 1
849   %exitcond = icmp eq i64 %iv.next, 1000
850   br i1 %exitcond, label %for.end, label %for.body
852 for.end:
853   ret void
856 define void @sin_f64_intrinsic(double* nocapture %varray) {
857 ; CHECK-LABEL: @sin_f64_intrinsic(
858 ; CHECK: __sind2{{.*}}<2 x double>
859 ; CHECK: ret void
861 entry:
862   br label %for.body
864 for.body:
865   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
866   %tmp = trunc i64 %iv to i32
867   %conv = sitofp i32 %tmp to double
868   %call = tail call double @llvm.sin.f64(double %conv)
869   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
870   store double %call, double* %arrayidx, align 4
871   %iv.next = add nuw nsw i64 %iv, 1
872   %exitcond = icmp eq i64 %iv.next, 1000
873   br i1 %exitcond, label %for.end, label %for.body
875 for.end:
876   ret void
879 define void @sin_f32(float* nocapture %varray) {
880 ; CHECK-LABEL: @sin_f32(
881 ; CHECK: __sinf4{{.*}}<4 x float>
882 ; CHECK: ret void
884 entry:
885   br label %for.body
887 for.body:
888   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
889   %tmp = trunc i64 %iv to i32
890   %conv = sitofp i32 %tmp to float
891   %call = tail call float @sinf(float %conv)
892   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
893   store float %call, float* %arrayidx, align 4
894   %iv.next = add nuw nsw i64 %iv, 1
895   %exitcond = icmp eq i64 %iv.next, 1000
896   br i1 %exitcond, label %for.end, label %for.body
898 for.end:
899   ret void
902 define void @sin_f32_intrinsic(float* nocapture %varray) {
903 ; CHECK-LABEL: @sin_f32_intrinsic(
904 ; CHECK: __sinf4{{.*}}<4 x float>
905 ; CHECK: ret void
907 entry:
908   br label %for.body
910 for.body:
911   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
912   %tmp = trunc i64 %iv to i32
913   %conv = sitofp i32 %tmp to float
914   %call = tail call float @llvm.sin.f32(float %conv)
915   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
916   store float %call, float* %arrayidx, align 4
917   %iv.next = add nuw nsw i64 %iv, 1
918   %exitcond = icmp eq i64 %iv.next, 1000
919   br i1 %exitcond, label %for.end, label %for.body
921 for.end:
922   ret void
925 define void @cos_f64(double* nocapture %varray) {
926 ; CHECK-LABEL: @cos_f64(
927 ; CHECK: __cosd2{{.*}}<2 x double>
928 ; CHECK: ret void
930 entry:
931   br label %for.body
933 for.body:
934   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
935   %tmp = trunc i64 %iv to i32
936   %conv = sitofp i32 %tmp to double
937   %call = tail call double @cos(double %conv)
938   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
939   store double %call, double* %arrayidx, align 4
940   %iv.next = add nuw nsw i64 %iv, 1
941   %exitcond = icmp eq i64 %iv.next, 1000
942   br i1 %exitcond, label %for.end, label %for.body
944 for.end:
945   ret void
948 define void @cos_f64_intrinsic(double* nocapture %varray) {
949 ; CHECK-LABEL: @cos_f64_intrinsic(
950 ; CHECK:    [[TMP5:%.*]] = call <2 x double> @__cosd2(<2 x double> [[TMP4:%.*]])
951 ; CHECK:    ret void
953 entry:
954   br label %for.body
956 for.body:
957   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
958   %tmp = trunc i64 %iv to i32
959   %conv = sitofp i32 %tmp to double
960   %call = tail call double @llvm.cos.f64(double %conv)
961   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
962   store double %call, double* %arrayidx, align 4
963   %iv.next = add nuw nsw i64 %iv, 1
964   %exitcond = icmp eq i64 %iv.next, 1000
965   br i1 %exitcond, label %for.end, label %for.body
967 for.end:
968   ret void
971 define void @cos_f32(float* nocapture %varray) {
972 ; CHECK-LABEL: @cos_f32(
973 ; CHECK: __cosf4{{.*}}<4 x float>
974 ; CHECK: ret void
976 entry:
977   br label %for.body
979 for.body:
980   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
981   %tmp = trunc i64 %iv to i32
982   %conv = sitofp i32 %tmp to float
983   %call = tail call float @cosf(float %conv)
984   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
985   store float %call, float* %arrayidx, align 4
986   %iv.next = add nuw nsw i64 %iv, 1
987   %exitcond = icmp eq i64 %iv.next, 1000
988   br i1 %exitcond, label %for.end, label %for.body
990 for.end:
991   ret void
994 define void @cos_f32_intrinsic(float* nocapture %varray) {
995 ; CHECK-LABEL: @cos_f32_intrinsic(
996 ; CHECK: __cosf4{{.*}}<4 x float>
997 ; CHECK: ret void
999 entry:
1000   br label %for.body
1002 for.body:
1003   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1004   %tmp = trunc i64 %iv to i32
1005   %conv = sitofp i32 %tmp to float
1006   %call = tail call float @llvm.cos.f32(float %conv)
1007   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1008   store float %call, float* %arrayidx, align 4
1009   %iv.next = add nuw nsw i64 %iv, 1
1010   %exitcond = icmp eq i64 %iv.next, 1000
1011   br i1 %exitcond, label %for.end, label %for.body
1013 for.end:
1014   ret void
1017 define void @tan_f64(double* nocapture %varray) {
1018 ; CHECK-LABEL: @tan_f64(
1019 ; CHECK: __tand2{{.*}}<2 x double>
1020 ; CHECK: ret void
1022 entry:
1023   br label %for.body
1025 for.body:
1026   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1027   %tmp = trunc i64 %iv to i32
1028   %conv = sitofp i32 %tmp to double
1029   %call = tail call double @tan(double %conv)
1030   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1031   store double %call, double* %arrayidx, align 4
1032   %iv.next = add nuw nsw i64 %iv, 1
1033   %exitcond = icmp eq i64 %iv.next, 1000
1034   br i1 %exitcond, label %for.end, label %for.body
1036 for.end:
1037   ret void
1040 define void @tan_f32(float* nocapture %varray) {
1041 ; CHECK-LABEL: @tan_f32(
1042 ; CHECK: __tanf4{{.*}}<4 x float>
1043 ; CHECK: ret void
1045 entry:
1046   br label %for.body
1048 for.body:
1049   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1050   %tmp = trunc i64 %iv to i32
1051   %conv = sitofp i32 %tmp to float
1052   %call = tail call float @tanf(float %conv)
1053   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1054   store float %call, float* %arrayidx, align 4
1055   %iv.next = add nuw nsw i64 %iv, 1
1056   %exitcond = icmp eq i64 %iv.next, 1000
1057   br i1 %exitcond, label %for.end, label %for.body
1059 for.end:
1060   ret void
1063 define void @asin_f64(double* nocapture %varray) {
1064 ; CHECK-LABEL: @asin_f64(
1065 ; CHECK: __asind2{{.*}}<2 x double>
1066 ; CHECK: ret void
1068 entry:
1069   br label %for.body
1071 for.body:
1072   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1073   %tmp = trunc i64 %iv to i32
1074   %conv = sitofp i32 %tmp to double
1075   %call = tail call double @asin(double %conv)
1076   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1077   store double %call, double* %arrayidx, align 4
1078   %iv.next = add nuw nsw i64 %iv, 1
1079   %exitcond = icmp eq i64 %iv.next, 1000
1080   br i1 %exitcond, label %for.end, label %for.body
1082 for.end:
1083   ret void
1086 define void @asin_f32(float* nocapture %varray) {
1087 ; CHECK-LABEL: @asin_f32(
1088 ; CHECK: __asinf4{{.*}}<4 x float>
1089 ; CHECK: ret void
1091 entry:
1092   br label %for.body
1094 for.body:
1095   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1096   %tmp = trunc i64 %iv to i32
1097   %conv = sitofp i32 %tmp to float
1098   %call = tail call float @asinf(float %conv)
1099   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1100   store float %call, float* %arrayidx, align 4
1101   %iv.next = add nuw nsw i64 %iv, 1
1102   %exitcond = icmp eq i64 %iv.next, 1000
1103   br i1 %exitcond, label %for.end, label %for.body
1105 for.end:
1106   ret void
1109 define void @acos_f64(double* nocapture %varray) {
1110 ; CHECK-LABEL: @acos_f64(
1111 ; CHECK: __acosd2{{.*}}<2 x double>
1112 ; CHECK: ret void
1114 entry:
1115   br label %for.body
1117 for.body:
1118   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1119   %tmp = trunc i64 %iv to i32
1120   %conv = sitofp i32 %tmp to double
1121   %call = tail call double @acos(double %conv)
1122   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1123   store double %call, double* %arrayidx, align 4
1124   %iv.next = add nuw nsw i64 %iv, 1
1125   %exitcond = icmp eq i64 %iv.next, 1000
1126   br i1 %exitcond, label %for.end, label %for.body
1128 for.end:
1129   ret void
1132 define void @acos_f32(float* nocapture %varray) {
1133 ; CHECK-LABEL: @acos_f32(
1134 ; CHECK: __acosf4{{.*}}<4 x float>
1135 ; CHECK: ret void
1137 entry:
1138   br label %for.body
1140 for.body:
1141   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1142   %tmp = trunc i64 %iv to i32
1143   %conv = sitofp i32 %tmp to float
1144   %call = tail call float @acosf(float %conv)
1145   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1146   store float %call, float* %arrayidx, align 4
1147   %iv.next = add nuw nsw i64 %iv, 1
1148   %exitcond = icmp eq i64 %iv.next, 1000
1149   br i1 %exitcond, label %for.end, label %for.body
1151 for.end:
1152   ret void
1155 define void @atan_f64(double* nocapture %varray) {
1156 ; CHECK-LABEL: @atan_f64(
1157 ; CHECK: __atand2{{.*}}<2 x double>
1158 ; CHECK: ret void
1160 entry:
1161   br label %for.body
1163 for.body:
1164   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1165   %tmp = trunc i64 %iv to i32
1166   %conv = sitofp i32 %tmp to double
1167   %call = tail call double @atan(double %conv)
1168   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1169   store double %call, double* %arrayidx, align 4
1170   %iv.next = add nuw nsw i64 %iv, 1
1171   %exitcond = icmp eq i64 %iv.next, 1000
1172   br i1 %exitcond, label %for.end, label %for.body
1174 for.end:
1175   ret void
1178 define void @atan_f32(float* nocapture %varray) {
1179 ; CHECK-LABEL: @atan_f32(
1180 ; CHECK: __atanf4{{.*}}<4 x float>
1181 ; CHECK: ret void
1183 entry:
1184   br label %for.body
1186 for.body:
1187   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1188   %tmp = trunc i64 %iv to i32
1189   %conv = sitofp i32 %tmp to float
1190   %call = tail call float @atanf(float %conv)
1191   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1192   store float %call, float* %arrayidx, align 4
1193   %iv.next = add nuw nsw i64 %iv, 1
1194   %exitcond = icmp eq i64 %iv.next, 1000
1195   br i1 %exitcond, label %for.end, label %for.body
1197 for.end:
1198   ret void
1201 define void @atan2_f64(double* nocapture %varray) {
1202 ; CHECK-LABEL: @atan2_f64(
1203 ; CHECK: __atan2d2{{.*}}<2 x double>
1204 ; CHECK: ret void
1206 entry:
1207   br label %for.body
1209 for.body:
1210   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1211   %tmp = trunc i64 %iv to i32
1212   %conv = sitofp i32 %tmp to double
1213   %call = tail call double @atan2(double %conv)
1214   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1215   store double %call, double* %arrayidx, align 4
1216   %iv.next = add nuw nsw i64 %iv, 1
1217   %exitcond = icmp eq i64 %iv.next, 1000
1218   br i1 %exitcond, label %for.end, label %for.body
1220 for.end:
1221   ret void
1224 define void @atan2_f32(float* nocapture %varray) {
1225 ; CHECK-LABEL: @atan2_f32(
1226 ; CHECK: __atan2f4{{.*}}<4 x float>
1227 ; CHECK: ret void
1229 entry:
1230   br label %for.body
1232 for.body:
1233   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1234   %tmp = trunc i64 %iv to i32
1235   %conv = sitofp i32 %tmp to float
1236   %call = tail call float @atan2f(float %conv)
1237   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1238   store float %call, float* %arrayidx, align 4
1239   %iv.next = add nuw nsw i64 %iv, 1
1240   %exitcond = icmp eq i64 %iv.next, 1000
1241   br i1 %exitcond, label %for.end, label %for.body
1243 for.end:
1244   ret void
1247 define void @sinh_f64(double* nocapture %varray) {
1248 ; CHECK-LABEL: @sinh_f64(
1249 ; CHECK: __sinhd2{{.*}}<2 x double>
1250 ; CHECK: ret void
1252 entry:
1253   br label %for.body
1255 for.body:
1256   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1257   %tmp = trunc i64 %iv to i32
1258   %conv = sitofp i32 %tmp to double
1259   %call = tail call double @sinh(double %conv)
1260   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1261   store double %call, double* %arrayidx, align 4
1262   %iv.next = add nuw nsw i64 %iv, 1
1263   %exitcond = icmp eq i64 %iv.next, 1000
1264   br i1 %exitcond, label %for.end, label %for.body
1266 for.end:
1267   ret void
1270 define void @sinh_f32(float* nocapture %varray) {
1271 ; CHECK-LABEL: @sinh_f32(
1272 ; CHECK: __sinhf4{{.*}}<4 x float>
1273 ; CHECK: ret void
1275 entry:
1276   br label %for.body
1278 for.body:
1279   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1280   %tmp = trunc i64 %iv to i32
1281   %conv = sitofp i32 %tmp to float
1282   %call = tail call float @sinhf(float %conv)
1283   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1284   store float %call, float* %arrayidx, align 4
1285   %iv.next = add nuw nsw i64 %iv, 1
1286   %exitcond = icmp eq i64 %iv.next, 1000
1287   br i1 %exitcond, label %for.end, label %for.body
1289 for.end:
1290   ret void
1293 define void @cosh_f64(double* nocapture %varray) {
1294 ; CHECK-LABEL: @cosh_f64(
1295 ; CHECK: __coshd2{{.*}}<2 x double>
1296 ; CHECK: ret void
1298 entry:
1299   br label %for.body
1301 for.body:
1302   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1303   %tmp = trunc i64 %iv to i32
1304   %conv = sitofp i32 %tmp to double
1305   %call = tail call double @cosh(double %conv)
1306   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1307   store double %call, double* %arrayidx, align 4
1308   %iv.next = add nuw nsw i64 %iv, 1
1309   %exitcond = icmp eq i64 %iv.next, 1000
1310   br i1 %exitcond, label %for.end, label %for.body
1312 for.end:
1313   ret void
1316 define void @cosh_f32(float* nocapture %varray) {
1317 ; CHECK-LABEL: @cosh_f32(
1318 ; CHECK: __coshf4{{.*}}<4 x float>
1319 ; CHECK: ret void
1321 entry:
1322   br label %for.body
1324 for.body:
1325   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1326   %tmp = trunc i64 %iv to i32
1327   %conv = sitofp i32 %tmp to float
1328   %call = tail call float @coshf(float %conv)
1329   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1330   store float %call, float* %arrayidx, align 4
1331   %iv.next = add nuw nsw i64 %iv, 1
1332   %exitcond = icmp eq i64 %iv.next, 1000
1333   br i1 %exitcond, label %for.end, label %for.body
1335 for.end:
1336   ret void
1339 define void @tanh_f64(double* nocapture %varray) {
1340 ; CHECK-LABEL: @tanh_f64(
1341 ; CHECK: __tanhd2{{.*}}<2 x double>
1342 ; CHECK: ret void
1344 entry:
1345   br label %for.body
1347 for.body:
1348   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1349   %tmp = trunc i64 %iv to i32
1350   %conv = sitofp i32 %tmp to double
1351   %call = tail call double @tanh(double %conv)
1352   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1353   store double %call, double* %arrayidx, align 4
1354   %iv.next = add nuw nsw i64 %iv, 1
1355   %exitcond = icmp eq i64 %iv.next, 1000
1356   br i1 %exitcond, label %for.end, label %for.body
1358 for.end:
1359   ret void
1362 define void @tanh_f32(float* nocapture %varray) {
1363 ; CHECK-LABEL: @tanh_f32(
1364 ; CHECK: __tanhf4{{.*}}<4 x float>
1365 ; CHECK: ret void
1367 entry:
1368   br label %for.body
1370 for.body:
1371   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1372   %tmp = trunc i64 %iv to i32
1373   %conv = sitofp i32 %tmp to float
1374   %call = tail call float @tanhf(float %conv)
1375   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1376   store float %call, float* %arrayidx, align 4
1377   %iv.next = add nuw nsw i64 %iv, 1
1378   %exitcond = icmp eq i64 %iv.next, 1000
1379   br i1 %exitcond, label %for.end, label %for.body
1381 for.end:
1382   ret void
1385 define void @asinh_f64(double* nocapture %varray) {
1386 ; CHECK-LABEL: @asinh_f64(
1387 ; CHECK: __asinhd2{{.*}}<2 x double>
1388 ; CHECK: ret void
1390 entry:
1391   br label %for.body
1393 for.body:
1394   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1395   %tmp = trunc i64 %iv to i32
1396   %conv = sitofp i32 %tmp to double
1397   %call = tail call double @asinh(double %conv)
1398   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1399   store double %call, double* %arrayidx, align 4
1400   %iv.next = add nuw nsw i64 %iv, 1
1401   %exitcond = icmp eq i64 %iv.next, 1000
1402   br i1 %exitcond, label %for.end, label %for.body
1404 for.end:
1405   ret void
1408 define void @asinh_f32(float* nocapture %varray) {
1409 ; CHECK-LABEL: @asinh_f32(
1410 ; CHECK: __asinhf4{{.*}}<4 x float>
1411 ; CHECK: ret void
1413 entry:
1414   br label %for.body
1416 for.body:
1417   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1418   %tmp = trunc i64 %iv to i32
1419   %conv = sitofp i32 %tmp to float
1420   %call = tail call float @asinhf(float %conv)
1421   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1422   store float %call, float* %arrayidx, align 4
1423   %iv.next = add nuw nsw i64 %iv, 1
1424   %exitcond = icmp eq i64 %iv.next, 1000
1425   br i1 %exitcond, label %for.end, label %for.body
1427 for.end:
1428   ret void
1431 define void @acosh_f64(double* nocapture %varray) {
1432 ; CHECK-LABEL: @acosh_f64(
1433 ; CHECK: __acoshd2{{.*}}<2 x double>
1434 ; CHECK: ret void
1436 entry:
1437   br label %for.body
1439 for.body:
1440   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1441   %tmp = trunc i64 %iv to i32
1442   %conv = sitofp i32 %tmp to double
1443   %call = tail call double @acosh(double %conv)
1444   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1445   store double %call, double* %arrayidx, align 4
1446   %iv.next = add nuw nsw i64 %iv, 1
1447   %exitcond = icmp eq i64 %iv.next, 1000
1448   br i1 %exitcond, label %for.end, label %for.body
1450 for.end:
1451   ret void
1454 define void @acosh_f32(float* nocapture %varray) {
1455 ; CHECK-LABEL: @acosh_f32(
1456 ; CHECK: __acoshf4{{.*}}<4 x float>
1457 ; CHECK: ret void
1459 entry:
1460   br label %for.body
1462 for.body:
1463   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1464   %tmp = trunc i64 %iv to i32
1465   %conv = sitofp i32 %tmp to float
1466   %call = tail call float @acoshf(float %conv)
1467   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1468   store float %call, float* %arrayidx, align 4
1469   %iv.next = add nuw nsw i64 %iv, 1
1470   %exitcond = icmp eq i64 %iv.next, 1000
1471   br i1 %exitcond, label %for.end, label %for.body
1473 for.end:
1474   ret void
1477 define void @atanh_f64(double* nocapture %varray) {
1478 ; CHECK-LABEL: @atanh_f64(
1479 ; CHECK: __atanhd2{{.*}}<2 x double>
1480 ; CHECK: ret void
1482 entry:
1483   br label %for.body
1485 for.body:
1486   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1487   %tmp = trunc i64 %iv to i32
1488   %conv = sitofp i32 %tmp to double
1489   %call = tail call double @atanh(double %conv)
1490   %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1491   store double %call, double* %arrayidx, align 4
1492   %iv.next = add nuw nsw i64 %iv, 1
1493   %exitcond = icmp eq i64 %iv.next, 1000
1494   br i1 %exitcond, label %for.end, label %for.body
1496 for.end:
1497   ret void
1500 define void @atanh_f32(float* nocapture %varray) {
1501 ; CHECK-LABEL: @atanh_f32(
1502 ; CHECK: __atanhf4{{.*}}<4 x float>
1503 ; CHECK: ret void
1505 entry:
1506   br label %for.body
1508 for.body:
1509   %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1510   %tmp = trunc i64 %iv to i32
1511   %conv = sitofp i32 %tmp to float
1512   %call = tail call float @atanhf(float %conv)
1513   %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1514   store float %call, float* %arrayidx, align 4
1515   %iv.next = add nuw nsw i64 %iv, 1
1516   %exitcond = icmp eq i64 %iv.next, 1000
1517   br i1 %exitcond, label %for.end, label %for.body
1519 for.end:
1520   ret void
1523 attributes #0 = { nounwind }