1; RUN: opt -vector-library=MASSV -inject-tli-mappings -loop-vectorize -force-vector-interleave=1 -S < %s | FileCheck %s
2
3target datalayout = "e-m:e-i64:64-n32:64"
4target triple = "powerpc64le-unknown-linux-gnu"
5
6declare double @cbrt(double) #0
7declare float @cbrtf(float) #0
8
9declare double @pow(double, double) #0
10declare double @llvm.pow.f64(double, double) #0
11declare float @powf(float, float) #0
12declare float @llvm.pow.f32(float, float) #0
13
14declare double @sqrt(double) #0
15declare float @sqrtf(float) #0
16
17declare double @exp(double) #0
18declare double @llvm.exp.f64(double) #0
19declare float @expf(float) #0
20declare float @llvm.exp.f32(float) #0
21
22declare double @exp2(double) #0
23declare double @llvm.exp2.f64(double) #0
24declare float @exp2f(float) #0
25declare float @llvm.exp2.f32(float) #0
26
27declare double @expm1(double) #0
28declare float @expm1f(float) #0
29
30declare double @log(double) #0
31declare double @llvm.log.f64(double) #0
32declare float @logf(float) #0
33declare float @llvm.log.f32(float) #0
34
35declare double @log1p(double) #0
36declare float @log1pf(float) #0
37
38declare double @log10(double) #0
39declare double @llvm.log10.f64(double) #0
40declare float @log10f(float) #0
41declare float @llvm.log10.f32(float) #0
42
43declare double @log2(double) #0
44declare double @llvm.log2.f64(double) #0
45declare float @log2f(float) #0
46declare float @llvm.log2.f32(float) #0
47
48declare double @sin(double) #0
49declare double @llvm.sin.f64(double) #0
50declare float @sinf(float) #0
51declare float @llvm.sin.f32(float) #0
52
53declare double @cos(double) #0
54declare double @llvm.cos.f64(double) #0
55declare float @cosf(float) #0
56declare float @llvm.cos.f32(float) #0
57
58declare double @tan(double) #0
59declare float @tanf(float) #0
60
61declare double @asin(double) #0
62declare float @asinf(float) #0
63
64declare double @acos(double) #0
65declare float @acosf(float) #0
66
67declare double @atan(double) #0
68declare float @atanf(float) #0
69
70declare double @atan2(double) #0
71declare float @atan2f(float) #0
72
73declare double @sinh(double) #0
74declare float @sinhf(float) #0
75
76declare double @cosh(double) #0
77declare float @coshf(float) #0
78
79declare double @tanh(double) #0
80declare float @tanhf(float) #0
81
82declare double @asinh(double) #0
83declare float @asinhf(float) #0
84
85declare double @acosh(double) #0
86declare float @acoshf(float) #0
87
88declare double @atanh(double) #0
89declare float @atanhf(float) #0
90
91define void @cbrt_f64(double* nocapture %varray) {
92; CHECK-LABEL: @cbrt_f64(
93; CHECK: __cbrtd2_massv{{.*}}<2 x double>
94; CHECK: ret void
95;
96entry:
97  br label %for.body
98
99for.body:
100  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
101  %tmp = trunc i64 %iv to i32
102  %conv = sitofp i32 %tmp to double
103  %call = tail call double @cbrt(double %conv)
104  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
105  store double %call, double* %arrayidx, align 4
106  %iv.next = add nuw nsw i64 %iv, 1
107  %exitcond = icmp eq i64 %iv.next, 1000
108  br i1 %exitcond, label %for.end, label %for.body
109
110for.end:
111  ret void
112}
113
114define void @cbrt_f32(float* nocapture %varray) {
115; CHECK-LABEL: @cbrt_f32(
116; CHECK: __cbrtf4_massv{{.*}}<4 x float>
117; CHECK: ret void
118;
119entry:
120  br label %for.body
121
122for.body:
123  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
124  %tmp = trunc i64 %iv to i32
125  %conv = sitofp i32 %tmp to float
126  %call = tail call float @cbrtf(float %conv)
127  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
128  store float %call, float* %arrayidx, align 4
129  %iv.next = add nuw nsw i64 %iv, 1
130  %exitcond = icmp eq i64 %iv.next, 1000
131  br i1 %exitcond, label %for.end, label %for.body
132
133for.end:
134  ret void
135}
136
137define void @pow_f64(double* nocapture %varray, double* nocapture readonly %exp) {
138; CHECK-LABEL: @pow_f64(
139; CHECK:  __powd2_massv{{.*}}<2 x double>
140; CHECK:  ret void
141;
142entry:
143  br label %for.body
144
145for.body:
146  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
147  %tmp = trunc i64 %iv to i32
148  %conv = sitofp i32 %tmp to double
149  %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv
150  %tmp1 = load double, double* %arrayidx, align 4
151  %tmp2 = tail call double @pow(double %conv, double %tmp1)
152  %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv
153  store double %tmp2, double* %arrayidx2, align 4
154  %iv.next = add nuw nsw i64 %iv, 1
155  %exitcond = icmp eq i64 %iv.next, 1000
156  br i1 %exitcond, label %for.end, label %for.body
157
158for.end:
159  ret void
160}
161
162define void @pow_f64_intrinsic(double* nocapture %varray, double* nocapture readonly %exp) {
163; CHECK-LABEL: @pow_f64_intrinsic(
164; CHECK: __powd2_massv{{.*}}<2 x double>
165; CHECK: ret void
166;
167entry:
168  br label %for.body
169
170for.body:
171  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
172  %tmp = trunc i64 %iv to i32
173  %conv = sitofp i32 %tmp to double
174  %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv
175  %tmp1 = load double, double* %arrayidx, align 4
176  %tmp2 = tail call double @llvm.pow.f64(double %conv, double %tmp1)
177  %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv
178  store double %tmp2, double* %arrayidx2, align 4
179  %iv.next = add nuw nsw i64 %iv, 1
180  %exitcond = icmp eq i64 %iv.next, 1000
181  br i1 %exitcond, label %for.end, label %for.body
182
183for.end:
184  ret void
185}
186
187define void @pow_f32(float* nocapture %varray, float* nocapture readonly %exp) {
188; CHECK-LABEL: @pow_f32(
189; CHECK: __powf4_massv{{.*}}<4 x float>
190; CHECK: ret void
191;
192entry:
193  br label %for.body
194
195for.body:
196  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
197  %tmp = trunc i64 %iv to i32
198  %conv = sitofp i32 %tmp to float
199  %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv
200  %tmp1 = load float, float* %arrayidx, align 4
201  %tmp2 = tail call float @powf(float %conv, float %tmp1)
202  %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv
203  store float %tmp2, float* %arrayidx2, align 4
204  %iv.next = add nuw nsw i64 %iv, 1
205  %exitcond = icmp eq i64 %iv.next, 1000
206  br i1 %exitcond, label %for.end, label %for.body
207
208for.end:
209  ret void
210}
211
212define void @pow_f32_intrinsic(float* nocapture %varray, float* nocapture readonly %exp) {
213; CHECK-LABEL: @pow_f32_intrinsic(
214; CHECK: __powf4_massv{{.*}}<4 x float>
215; CHECK: ret void
216;
217entry:
218  br label %for.body
219
220for.body:
221  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
222  %tmp = trunc i64 %iv to i32
223  %conv = sitofp i32 %tmp to float
224  %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv
225  %tmp1 = load float, float* %arrayidx, align 4
226  %tmp2 = tail call float @llvm.pow.f32(float %conv, float %tmp1)
227  %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv
228  store float %tmp2, float* %arrayidx2, align 4
229  %iv.next = add nuw nsw i64 %iv, 1
230  %exitcond = icmp eq i64 %iv.next, 1000
231  br i1 %exitcond, label %for.end, label %for.body
232
233for.end:
234  ret void
235}
236
237define void @sqrt_f64(double* nocapture %varray) {
238; CHECK-LABEL: @sqrt_f64(
239; CHECK-NOT: __sqrtd2_massv{{.*}}<2 x double>
240; CHECK: ret void
241;
242entry:
243  br label %for.body
244
245for.body:
246  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
247  %tmp = trunc i64 %iv to i32
248  %conv = sitofp i32 %tmp to double
249  %call = tail call double @sqrt(double %conv)
250  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
251  store double %call, double* %arrayidx, align 4
252  %iv.next = add nuw nsw i64 %iv, 1
253  %exitcond = icmp eq i64 %iv.next, 1000
254  br i1 %exitcond, label %for.end, label %for.body
255
256for.end:
257  ret void
258}
259
260define void @sqrt_f32(float* nocapture %varray) {
261; CHECK-LABEL: @sqrt_f32(
262; CHECK-NOT: __sqrtf4_massv{{.*}}<4 x float>
263; CHECK: ret void
264;
265entry:
266  br label %for.body
267
268for.body:
269  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
270  %tmp = trunc i64 %iv to i32
271  %conv = sitofp i32 %tmp to float
272  %call = tail call float @sqrtf(float %conv)
273  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
274  store float %call, float* %arrayidx, align 4
275  %iv.next = add nuw nsw i64 %iv, 1
276  %exitcond = icmp eq i64 %iv.next, 1000
277  br i1 %exitcond, label %for.end, label %for.body
278
279for.end:
280  ret void
281}
282
283define void @exp_f64(double* nocapture %varray) {
284; CHECK-LABEL: @exp_f64(
285; CHECK: __expd2_massv{{.*}}<2 x double>
286; CHECK: ret void
287;
288entry:
289  br label %for.body
290
291for.body:
292  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
293  %tmp = trunc i64 %iv to i32
294  %conv = sitofp i32 %tmp to double
295  %call = tail call double @exp(double %conv)
296  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
297  store double %call, double* %arrayidx, align 4
298  %iv.next = add nuw nsw i64 %iv, 1
299  %exitcond = icmp eq i64 %iv.next, 1000
300  br i1 %exitcond, label %for.end, label %for.body
301
302for.end:
303  ret void
304}
305
306define void @exp_f64_intrinsic(double* nocapture %varray) {
307; CHECK-LABEL: @exp_f64_intrinsic(
308; CHECK: __expd2_massv{{.*}}<2 x double>
309; CHECK: ret void
310;
311entry:
312  br label %for.body
313
314for.body:
315  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
316  %tmp = trunc i64 %iv to i32
317  %conv = sitofp i32 %tmp to double
318  %call = tail call double @llvm.exp.f64(double %conv)
319  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
320  store double %call, double* %arrayidx, align 4
321  %iv.next = add nuw nsw i64 %iv, 1
322  %exitcond = icmp eq i64 %iv.next, 1000
323  br i1 %exitcond, label %for.end, label %for.body
324
325for.end:
326  ret void
327}
328
329define void @exp_f32(float* nocapture %varray) {
330; CHECK-LABEL: @exp_f32(
331; CHECK: __expf4_massv{{.*}}<4 x float>
332; CHECK: ret void
333;
334entry:
335  br label %for.body
336
337for.body:
338  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
339  %tmp = trunc i64 %iv to i32
340  %conv = sitofp i32 %tmp to float
341  %call = tail call float @expf(float %conv)
342  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
343  store float %call, float* %arrayidx, align 4
344  %iv.next = add nuw nsw i64 %iv, 1
345  %exitcond = icmp eq i64 %iv.next, 1000
346  br i1 %exitcond, label %for.end, label %for.body
347
348for.end:
349  ret void
350}
351
352define void @exp_f32_intrinsic(float* nocapture %varray) {
353; CHECK-LABEL: @exp_f32_intrinsic(
354; CHECK: __expf4_massv{{.*}}<4 x float>
355; CHECK: ret void
356;
357entry:
358  br label %for.body
359
360for.body:
361  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
362  %tmp = trunc i64 %iv to i32
363  %conv = sitofp i32 %tmp to float
364  %call = tail call float @llvm.exp.f32(float %conv)
365  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
366  store float %call, float* %arrayidx, align 4
367  %iv.next = add nuw nsw i64 %iv, 1
368  %exitcond = icmp eq i64 %iv.next, 1000
369  br i1 %exitcond, label %for.end, label %for.body
370
371for.end:
372  ret void
373}
374
375define void @exp2_f64(double* nocapture %varray) {
376; CHECK-LABEL: @exp2_f64(
377; CHECK: __exp2d2_massv{{.*}}<2 x double>
378; CHECK:  ret void
379;
380entry:
381  br label %for.body
382
383for.body:
384  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
385  %tmp = trunc i64 %iv to i32
386  %conv = sitofp i32 %tmp to double
387  %call = tail call double @exp2(double %conv)
388  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
389  store double %call, double* %arrayidx, align 4
390  %iv.next = add nuw nsw i64 %iv, 1
391  %exitcond = icmp eq i64 %iv.next, 1000
392  br i1 %exitcond, label %for.end, label %for.body
393
394for.end:
395  ret void
396}
397
398define void @exp2_f64_intrinsic(double* nocapture %varray) {
399; CHECK-LABEL: @exp2_f64_intrinsic(
400; CHECK: __exp2d2_massv{{.*}}<2 x double>
401; CHECK: ret void
402;
403entry:
404  br label %for.body
405
406for.body:
407  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
408  %tmp = trunc i64 %iv to i32
409  %conv = sitofp i32 %tmp to double
410  %call = tail call double @llvm.exp2.f64(double %conv)
411  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
412  store double %call, double* %arrayidx, align 4
413  %iv.next = add nuw nsw i64 %iv, 1
414  %exitcond = icmp eq i64 %iv.next, 1000
415  br i1 %exitcond, label %for.end, label %for.body
416
417for.end:
418  ret void
419}
420
421define void @exp2_f32(float* nocapture %varray) {
422; CHECK-LABEL: @exp2_f32(
423; CHECK: __exp2f4_massv{{.*}}<4 x float>
424; CHECK: ret void
425;
426entry:
427  br label %for.body
428
429for.body:
430  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
431  %tmp = trunc i64 %iv to i32
432  %conv = sitofp i32 %tmp to float
433  %call = tail call float @exp2f(float %conv)
434  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
435  store float %call, float* %arrayidx, align 4
436  %iv.next = add nuw nsw i64 %iv, 1
437  %exitcond = icmp eq i64 %iv.next, 1000
438  br i1 %exitcond, label %for.end, label %for.body
439
440for.end:
441  ret void
442}
443
444define void @exp2_f32_intrinsic(float* nocapture %varray) {
445; CHECK-LABEL: @exp2_f32_intrinsic(
446; CHECK: __exp2f4_massv{{.*}}<4 x float>
447; CHECK: ret void
448;
449entry:
450  br label %for.body
451
452for.body:
453  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
454  %tmp = trunc i64 %iv to i32
455  %conv = sitofp i32 %tmp to float
456  %call = tail call float @llvm.exp2.f32(float %conv)
457  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
458  store float %call, float* %arrayidx, align 4
459  %iv.next = add nuw nsw i64 %iv, 1
460  %exitcond = icmp eq i64 %iv.next, 1000
461  br i1 %exitcond, label %for.end, label %for.body
462
463for.end:
464  ret void
465}
466
467define void @expm1_f64(double* nocapture %varray) {
468; CHECK-LABEL: @expm1_f64(
469; CHECK: __expm1d2_massv{{.*}}<2 x double>
470; CHECK:  ret void
471;
472entry:
473  br label %for.body
474
475for.body:
476  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
477  %tmp = trunc i64 %iv to i32
478  %conv = sitofp i32 %tmp to double
479  %call = tail call double @expm1(double %conv)
480  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
481  store double %call, double* %arrayidx, align 4
482  %iv.next = add nuw nsw i64 %iv, 1
483  %exitcond = icmp eq i64 %iv.next, 1000
484  br i1 %exitcond, label %for.end, label %for.body
485
486for.end:
487  ret void
488}
489
490define void @expm1_f32(float* nocapture %varray) {
491; CHECK-LABEL: @expm1_f32(
492; CHECK: __expm1f4_massv{{.*}}<4 x float>
493; CHECK: ret void
494;
495entry:
496  br label %for.body
497
498for.body:
499  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
500  %tmp = trunc i64 %iv to i32
501  %conv = sitofp i32 %tmp to float
502  %call = tail call float @expm1f(float %conv)
503  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
504  store float %call, float* %arrayidx, align 4
505  %iv.next = add nuw nsw i64 %iv, 1
506  %exitcond = icmp eq i64 %iv.next, 1000
507  br i1 %exitcond, label %for.end, label %for.body
508
509for.end:
510  ret void
511}
512
513define void @log_f64(double* nocapture %varray) {
514; CHECK-LABEL: @log_f64(
515; CHECK: __logd2_massv{{.*}}<2 x double>
516; CHECK: ret void
517;
518entry:
519  br label %for.body
520
521for.body:
522  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
523  %tmp = trunc i64 %iv to i32
524  %conv = sitofp i32 %tmp to double
525  %call = tail call double @log(double %conv)
526  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
527  store double %call, double* %arrayidx, align 4
528  %iv.next = add nuw nsw i64 %iv, 1
529  %exitcond = icmp eq i64 %iv.next, 1000
530  br i1 %exitcond, label %for.end, label %for.body
531
532for.end:
533  ret void
534}
535
536define void @log_f64_intrinsic(double* nocapture %varray) {
537; CHECK-LABEL: @log_f64_intrinsic(
538; CHECK: __logd2_massv{{.*}}<2 x double>
539; CHECK: ret void
540;
541entry:
542  br label %for.body
543
544for.body:
545  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
546  %tmp = trunc i64 %iv to i32
547  %conv = sitofp i32 %tmp to double
548  %call = tail call double @llvm.log.f64(double %conv)
549  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
550  store double %call, double* %arrayidx, align 4
551  %iv.next = add nuw nsw i64 %iv, 1
552  %exitcond = icmp eq i64 %iv.next, 1000
553  br i1 %exitcond, label %for.end, label %for.body
554
555for.end:
556  ret void
557}
558
559define void @log_f32(float* nocapture %varray) {
560; CHECK-LABEL: @log_f32(
561; CHECK: __logf4_massv{{.*}}<4 x float>
562; CHECK: ret void
563;
564entry:
565  br label %for.body
566
567for.body:
568  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
569  %tmp = trunc i64 %iv to i32
570  %conv = sitofp i32 %tmp to float
571  %call = tail call float @logf(float %conv)
572  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
573  store float %call, float* %arrayidx, align 4
574  %iv.next = add nuw nsw i64 %iv, 1
575  %exitcond = icmp eq i64 %iv.next, 1000
576  br i1 %exitcond, label %for.end, label %for.body
577
578for.end:
579  ret void
580}
581
582define void @log_f32_intrinsic(float* nocapture %varray) {
583; CHECK-LABEL: @log_f32_intrinsic(
584; CHECK: __logf4_massv{{.*}}<4 x float>
585; CHECK: ret void
586;
587entry:
588  br label %for.body
589
590for.body:
591  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
592  %tmp = trunc i64 %iv to i32
593  %conv = sitofp i32 %tmp to float
594  %call = tail call float @llvm.log.f32(float %conv)
595  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
596  store float %call, float* %arrayidx, align 4
597  %iv.next = add nuw nsw i64 %iv, 1
598  %exitcond = icmp eq i64 %iv.next, 1000
599  br i1 %exitcond, label %for.end, label %for.body
600
601for.end:
602  ret void
603}
604
605define void @log1p_f64(double* nocapture %varray) {
606; CHECK-LABEL: @log1p_f64(
607; CHECK: __log1pd2_massv{{.*}}<2 x double>
608; CHECK: ret void
609;
610entry:
611  br label %for.body
612
613for.body:
614  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
615  %tmp = trunc i64 %iv to i32
616  %conv = sitofp i32 %tmp to double
617  %call = tail call double @log1p(double %conv)
618  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
619  store double %call, double* %arrayidx, align 4
620  %iv.next = add nuw nsw i64 %iv, 1
621  %exitcond = icmp eq i64 %iv.next, 1000
622  br i1 %exitcond, label %for.end, label %for.body
623
624for.end:
625  ret void
626}
627
628define void @log1p_f32(float* nocapture %varray) {
629; CHECK-LABEL: @log1p_f32(
630; CHECK: __log1pf4_massv{{.*}}<4 x float>
631; CHECK: ret void
632;
633entry:
634  br label %for.body
635
636for.body:
637  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
638  %tmp = trunc i64 %iv to i32
639  %conv = sitofp i32 %tmp to float
640  %call = tail call float @log1pf(float %conv)
641  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
642  store float %call, float* %arrayidx, align 4
643  %iv.next = add nuw nsw i64 %iv, 1
644  %exitcond = icmp eq i64 %iv.next, 1000
645  br i1 %exitcond, label %for.end, label %for.body
646
647for.end:
648  ret void
649}
650
651define void @log10_f64(double* nocapture %varray) {
652; CHECK-LABEL: @log10_f64(
653; CHECK: __log10d2_massv(<2 x double>
654; CHECK: ret void
655;
656entry:
657  br label %for.body
658
659for.body:
660  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
661  %tmp = trunc i64 %iv to i32
662  %conv = sitofp i32 %tmp to double
663  %call = tail call double @log10(double %conv)
664  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
665  store double %call, double* %arrayidx, align 4
666  %iv.next = add nuw nsw i64 %iv, 1
667  %exitcond = icmp eq i64 %iv.next, 1000
668  br i1 %exitcond, label %for.end, label %for.body
669
670for.end:
671  ret void
672}
673
674define void @log10_f64_intrinsic(double* nocapture %varray) {
675; CHECK-LABEL: @log10_f64_intrinsic(
676; CHECK: __log10d2_massv{{.*}}<2 x double>
677; CHECK: ret void
678;
679entry:
680  br label %for.body
681
682for.body:
683  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
684  %tmp = trunc i64 %iv to i32
685  %conv = sitofp i32 %tmp to double
686  %call = tail call double @llvm.log10.f64(double %conv)
687  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
688  store double %call, double* %arrayidx, align 4
689  %iv.next = add nuw nsw i64 %iv, 1
690  %exitcond = icmp eq i64 %iv.next, 1000
691  br i1 %exitcond, label %for.end, label %for.body
692
693for.end:
694  ret void
695}
696
697define void @log10_f32(float* nocapture %varray) {
698; CHECK-LABEL: @log10_f32(
699; CHECK: __log10f4_massv{{.*}}<4 x float>
700; CHECK: ret void
701;
702entry:
703  br label %for.body
704
705for.body:
706  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
707  %tmp = trunc i64 %iv to i32
708  %conv = sitofp i32 %tmp to float
709  %call = tail call float @log10f(float %conv)
710  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
711  store float %call, float* %arrayidx, align 4
712  %iv.next = add nuw nsw i64 %iv, 1
713  %exitcond = icmp eq i64 %iv.next, 1000
714  br i1 %exitcond, label %for.end, label %for.body
715
716for.end:
717  ret void
718}
719
720define void @log10_f32_intrinsic(float* nocapture %varray) {
721; CHECK-LABEL: @log10_f32_intrinsic(
722; CHECK: __log10f4_massv{{.*}}<4 x float>
723; CHECK: ret void
724;
725entry:
726  br label %for.body
727
728for.body:
729  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
730  %tmp = trunc i64 %iv to i32
731  %conv = sitofp i32 %tmp to float
732  %call = tail call float @llvm.log10.f32(float %conv)
733  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
734  store float %call, float* %arrayidx, align 4
735  %iv.next = add nuw nsw i64 %iv, 1
736  %exitcond = icmp eq i64 %iv.next, 1000
737  br i1 %exitcond, label %for.end, label %for.body
738
739for.end:
740  ret void
741}
742
743define void @log2_f64(double* nocapture %varray) {
744; CHECK-LABEL: @log2_f64(
745; CHECK: __log2d2_massv(<2 x double>
746; CHECK: ret void
747;
748entry:
749  br label %for.body
750
751for.body:
752  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
753  %tmp = trunc i64 %iv to i32
754  %conv = sitofp i32 %tmp to double
755  %call = tail call double @log2(double %conv)
756  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
757  store double %call, double* %arrayidx, align 4
758  %iv.next = add nuw nsw i64 %iv, 1
759  %exitcond = icmp eq i64 %iv.next, 1000
760  br i1 %exitcond, label %for.end, label %for.body
761
762for.end:
763  ret void
764}
765
766define void @log2_f64_intrinsic(double* nocapture %varray) {
767; CHECK-LABEL: @log2_f64_intrinsic(
768; CHECK: __log2d2_massv{{.*}}<2 x double>
769; CHECK: ret void
770;
771entry:
772  br label %for.body
773
774for.body:
775  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
776  %tmp = trunc i64 %iv to i32
777  %conv = sitofp i32 %tmp to double
778  %call = tail call double @llvm.log2.f64(double %conv)
779  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
780  store double %call, double* %arrayidx, align 4
781  %iv.next = add nuw nsw i64 %iv, 1
782  %exitcond = icmp eq i64 %iv.next, 1000
783  br i1 %exitcond, label %for.end, label %for.body
784
785for.end:
786  ret void
787}
788
789define void @log2_f32(float* nocapture %varray) {
790; CHECK-LABEL: @log2_f32(
791; CHECK: __log2f4_massv{{.*}}<4 x float>
792; CHECK: ret void
793;
794entry:
795  br label %for.body
796
797for.body:
798  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
799  %tmp = trunc i64 %iv to i32
800  %conv = sitofp i32 %tmp to float
801  %call = tail call float @log2f(float %conv)
802  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
803  store float %call, float* %arrayidx, align 4
804  %iv.next = add nuw nsw i64 %iv, 1
805  %exitcond = icmp eq i64 %iv.next, 1000
806  br i1 %exitcond, label %for.end, label %for.body
807
808for.end:
809  ret void
810}
811
812define void @log2_f32_intrinsic(float* nocapture %varray) {
813; CHECK-LABEL: @log2_f32_intrinsic(
814; CHECK: __log2f4_massv{{.*}}<4 x float>
815; CHECK: ret void
816;
817entry:
818  br label %for.body
819
820for.body:
821  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
822  %tmp = trunc i64 %iv to i32
823  %conv = sitofp i32 %tmp to float
824  %call = tail call float @llvm.log2.f32(float %conv)
825  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
826  store float %call, float* %arrayidx, align 4
827  %iv.next = add nuw nsw i64 %iv, 1
828  %exitcond = icmp eq i64 %iv.next, 1000
829  br i1 %exitcond, label %for.end, label %for.body
830
831for.end:
832  ret void
833}
834
835define void @sin_f64(double* nocapture %varray) {
836; CHECK-LABEL: @sin_f64(
837; CHECK: __sind2_massv{{.*}}<2 x double>
838; CHECK: ret void
839;
840entry:
841  br label %for.body
842
843for.body:
844  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
845  %tmp = trunc i64 %iv to i32
846  %conv = sitofp i32 %tmp to double
847  %call = tail call double @sin(double %conv)
848  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
849  store double %call, double* %arrayidx, align 4
850  %iv.next = add nuw nsw i64 %iv, 1
851  %exitcond = icmp eq i64 %iv.next, 1000
852  br i1 %exitcond, label %for.end, label %for.body
853
854for.end:
855  ret void
856}
857
858define void @sin_f64_intrinsic(double* nocapture %varray) {
859; CHECK-LABEL: @sin_f64_intrinsic(
860; CHECK: __sind2_massv{{.*}}<2 x double>
861; CHECK: ret void
862;
863entry:
864  br label %for.body
865
866for.body:
867  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
868  %tmp = trunc i64 %iv to i32
869  %conv = sitofp i32 %tmp to double
870  %call = tail call double @llvm.sin.f64(double %conv)
871  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
872  store double %call, double* %arrayidx, align 4
873  %iv.next = add nuw nsw i64 %iv, 1
874  %exitcond = icmp eq i64 %iv.next, 1000
875  br i1 %exitcond, label %for.end, label %for.body
876
877for.end:
878  ret void
879}
880
881define void @sin_f32(float* nocapture %varray) {
882; CHECK-LABEL: @sin_f32(
883; CHECK: __sinf4_massv{{.*}}<4 x float>
884; CHECK: ret void
885;
886entry:
887  br label %for.body
888
889for.body:
890  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
891  %tmp = trunc i64 %iv to i32
892  %conv = sitofp i32 %tmp to float
893  %call = tail call float @sinf(float %conv)
894  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
895  store float %call, float* %arrayidx, align 4
896  %iv.next = add nuw nsw i64 %iv, 1
897  %exitcond = icmp eq i64 %iv.next, 1000
898  br i1 %exitcond, label %for.end, label %for.body
899
900for.end:
901  ret void
902}
903
904define void @sin_f32_intrinsic(float* nocapture %varray) {
905; CHECK-LABEL: @sin_f32_intrinsic(
906; CHECK: __sinf4_massv{{.*}}<4 x float>
907; CHECK: ret void
908;
909entry:
910  br label %for.body
911
912for.body:
913  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
914  %tmp = trunc i64 %iv to i32
915  %conv = sitofp i32 %tmp to float
916  %call = tail call float @llvm.sin.f32(float %conv)
917  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
918  store float %call, float* %arrayidx, align 4
919  %iv.next = add nuw nsw i64 %iv, 1
920  %exitcond = icmp eq i64 %iv.next, 1000
921  br i1 %exitcond, label %for.end, label %for.body
922
923for.end:
924  ret void
925}
926
927define void @cos_f64(double* nocapture %varray) {
928; CHECK-LABEL: @cos_f64(
929; CHECK: __cosd2_massv{{.*}}<2 x double>
930; CHECK: ret void
931;
932entry:
933  br label %for.body
934
935for.body:
936  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
937  %tmp = trunc i64 %iv to i32
938  %conv = sitofp i32 %tmp to double
939  %call = tail call double @cos(double %conv)
940  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
941  store double %call, double* %arrayidx, align 4
942  %iv.next = add nuw nsw i64 %iv, 1
943  %exitcond = icmp eq i64 %iv.next, 1000
944  br i1 %exitcond, label %for.end, label %for.body
945
946for.end:
947  ret void
948}
949
950define void @cos_f64_intrinsic(double* nocapture %varray) {
951; CHECK-LABEL: @cos_f64_intrinsic(
952; CHECK:    [[TMP5:%.*]] = call <2 x double> @__cosd2_massv(<2 x double> [[TMP4:%.*]])
953; CHECK:    ret void
954;
955entry:
956  br label %for.body
957
958for.body:
959  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
960  %tmp = trunc i64 %iv to i32
961  %conv = sitofp i32 %tmp to double
962  %call = tail call double @llvm.cos.f64(double %conv)
963  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
964  store double %call, double* %arrayidx, align 4
965  %iv.next = add nuw nsw i64 %iv, 1
966  %exitcond = icmp eq i64 %iv.next, 1000
967  br i1 %exitcond, label %for.end, label %for.body
968
969for.end:
970  ret void
971}
972
973define void @cos_f32(float* nocapture %varray) {
974; CHECK-LABEL: @cos_f32(
975; CHECK: __cosf4_massv{{.*}}<4 x float>
976; CHECK: ret void
977;
978entry:
979  br label %for.body
980
981for.body:
982  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
983  %tmp = trunc i64 %iv to i32
984  %conv = sitofp i32 %tmp to float
985  %call = tail call float @cosf(float %conv)
986  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
987  store float %call, float* %arrayidx, align 4
988  %iv.next = add nuw nsw i64 %iv, 1
989  %exitcond = icmp eq i64 %iv.next, 1000
990  br i1 %exitcond, label %for.end, label %for.body
991
992for.end:
993  ret void
994}
995
996define void @cos_f32_intrinsic(float* nocapture %varray) {
997; CHECK-LABEL: @cos_f32_intrinsic(
998; CHECK: __cosf4_massv{{.*}}<4 x float>
999; CHECK: ret void
1000;
1001entry:
1002  br label %for.body
1003
1004for.body:
1005  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1006  %tmp = trunc i64 %iv to i32
1007  %conv = sitofp i32 %tmp to float
1008  %call = tail call float @llvm.cos.f32(float %conv)
1009  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1010  store float %call, float* %arrayidx, align 4
1011  %iv.next = add nuw nsw i64 %iv, 1
1012  %exitcond = icmp eq i64 %iv.next, 1000
1013  br i1 %exitcond, label %for.end, label %for.body
1014
1015for.end:
1016  ret void
1017}
1018
1019define void @tan_f64(double* nocapture %varray) {
1020; CHECK-LABEL: @tan_f64(
1021; CHECK: __tand2_massv{{.*}}<2 x double>
1022; CHECK: ret void
1023;
1024entry:
1025  br label %for.body
1026
1027for.body:
1028  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1029  %tmp = trunc i64 %iv to i32
1030  %conv = sitofp i32 %tmp to double
1031  %call = tail call double @tan(double %conv)
1032  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1033  store double %call, double* %arrayidx, align 4
1034  %iv.next = add nuw nsw i64 %iv, 1
1035  %exitcond = icmp eq i64 %iv.next, 1000
1036  br i1 %exitcond, label %for.end, label %for.body
1037
1038for.end:
1039  ret void
1040}
1041
1042define void @tan_f32(float* nocapture %varray) {
1043; CHECK-LABEL: @tan_f32(
1044; CHECK: __tanf4_massv{{.*}}<4 x float>
1045; CHECK: ret void
1046;
1047entry:
1048  br label %for.body
1049
1050for.body:
1051  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1052  %tmp = trunc i64 %iv to i32
1053  %conv = sitofp i32 %tmp to float
1054  %call = tail call float @tanf(float %conv)
1055  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1056  store float %call, float* %arrayidx, align 4
1057  %iv.next = add nuw nsw i64 %iv, 1
1058  %exitcond = icmp eq i64 %iv.next, 1000
1059  br i1 %exitcond, label %for.end, label %for.body
1060
1061for.end:
1062  ret void
1063}
1064
1065define void @asin_f64(double* nocapture %varray) {
1066; CHECK-LABEL: @asin_f64(
1067; CHECK: __asind2_massv{{.*}}<2 x double>
1068; CHECK: ret void
1069;
1070entry:
1071  br label %for.body
1072
1073for.body:
1074  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1075  %tmp = trunc i64 %iv to i32
1076  %conv = sitofp i32 %tmp to double
1077  %call = tail call double @asin(double %conv)
1078  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1079  store double %call, double* %arrayidx, align 4
1080  %iv.next = add nuw nsw i64 %iv, 1
1081  %exitcond = icmp eq i64 %iv.next, 1000
1082  br i1 %exitcond, label %for.end, label %for.body
1083
1084for.end:
1085  ret void
1086}
1087
1088define void @asin_f32(float* nocapture %varray) {
1089; CHECK-LABEL: @asin_f32(
1090; CHECK: __asinf4_massv{{.*}}<4 x float>
1091; CHECK: ret void
1092;
1093entry:
1094  br label %for.body
1095
1096for.body:
1097  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1098  %tmp = trunc i64 %iv to i32
1099  %conv = sitofp i32 %tmp to float
1100  %call = tail call float @asinf(float %conv)
1101  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1102  store float %call, float* %arrayidx, align 4
1103  %iv.next = add nuw nsw i64 %iv, 1
1104  %exitcond = icmp eq i64 %iv.next, 1000
1105  br i1 %exitcond, label %for.end, label %for.body
1106
1107for.end:
1108  ret void
1109}
1110
1111define void @acos_f64(double* nocapture %varray) {
1112; CHECK-LABEL: @acos_f64(
1113; CHECK: __acosd2_massv{{.*}}<2 x double>
1114; CHECK: ret void
1115;
1116entry:
1117  br label %for.body
1118
1119for.body:
1120  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1121  %tmp = trunc i64 %iv to i32
1122  %conv = sitofp i32 %tmp to double
1123  %call = tail call double @acos(double %conv)
1124  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1125  store double %call, double* %arrayidx, align 4
1126  %iv.next = add nuw nsw i64 %iv, 1
1127  %exitcond = icmp eq i64 %iv.next, 1000
1128  br i1 %exitcond, label %for.end, label %for.body
1129
1130for.end:
1131  ret void
1132}
1133
1134define void @acos_f32(float* nocapture %varray) {
1135; CHECK-LABEL: @acos_f32(
1136; CHECK: __acosf4_massv{{.*}}<4 x float>
1137; CHECK: ret void
1138;
1139entry:
1140  br label %for.body
1141
1142for.body:
1143  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1144  %tmp = trunc i64 %iv to i32
1145  %conv = sitofp i32 %tmp to float
1146  %call = tail call float @acosf(float %conv)
1147  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1148  store float %call, float* %arrayidx, align 4
1149  %iv.next = add nuw nsw i64 %iv, 1
1150  %exitcond = icmp eq i64 %iv.next, 1000
1151  br i1 %exitcond, label %for.end, label %for.body
1152
1153for.end:
1154  ret void
1155}
1156
1157define void @atan_f64(double* nocapture %varray) {
1158; CHECK-LABEL: @atan_f64(
1159; CHECK: __atand2_massv{{.*}}<2 x double>
1160; CHECK: ret void
1161;
1162entry:
1163  br label %for.body
1164
1165for.body:
1166  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1167  %tmp = trunc i64 %iv to i32
1168  %conv = sitofp i32 %tmp to double
1169  %call = tail call double @atan(double %conv)
1170  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1171  store double %call, double* %arrayidx, align 4
1172  %iv.next = add nuw nsw i64 %iv, 1
1173  %exitcond = icmp eq i64 %iv.next, 1000
1174  br i1 %exitcond, label %for.end, label %for.body
1175
1176for.end:
1177  ret void
1178}
1179
1180define void @atan_f32(float* nocapture %varray) {
1181; CHECK-LABEL: @atan_f32(
1182; CHECK: __atanf4_massv{{.*}}<4 x float>
1183; CHECK: ret void
1184;
1185entry:
1186  br label %for.body
1187
1188for.body:
1189  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1190  %tmp = trunc i64 %iv to i32
1191  %conv = sitofp i32 %tmp to float
1192  %call = tail call float @atanf(float %conv)
1193  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1194  store float %call, float* %arrayidx, align 4
1195  %iv.next = add nuw nsw i64 %iv, 1
1196  %exitcond = icmp eq i64 %iv.next, 1000
1197  br i1 %exitcond, label %for.end, label %for.body
1198
1199for.end:
1200  ret void
1201}
1202
1203define void @atan2_f64(double* nocapture %varray) {
1204; CHECK-LABEL: @atan2_f64(
1205; CHECK: __atan2d2_massv{{.*}}<2 x double>
1206; CHECK: ret void
1207;
1208entry:
1209  br label %for.body
1210
1211for.body:
1212  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1213  %tmp = trunc i64 %iv to i32
1214  %conv = sitofp i32 %tmp to double
1215  %call = tail call double @atan2(double %conv)
1216  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1217  store double %call, double* %arrayidx, align 4
1218  %iv.next = add nuw nsw i64 %iv, 1
1219  %exitcond = icmp eq i64 %iv.next, 1000
1220  br i1 %exitcond, label %for.end, label %for.body
1221
1222for.end:
1223  ret void
1224}
1225
1226define void @atan2_f32(float* nocapture %varray) {
1227; CHECK-LABEL: @atan2_f32(
1228; CHECK: __atan2f4_massv{{.*}}<4 x float>
1229; CHECK: ret void
1230;
1231entry:
1232  br label %for.body
1233
1234for.body:
1235  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1236  %tmp = trunc i64 %iv to i32
1237  %conv = sitofp i32 %tmp to float
1238  %call = tail call float @atan2f(float %conv)
1239  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1240  store float %call, float* %arrayidx, align 4
1241  %iv.next = add nuw nsw i64 %iv, 1
1242  %exitcond = icmp eq i64 %iv.next, 1000
1243  br i1 %exitcond, label %for.end, label %for.body
1244
1245for.end:
1246  ret void
1247}
1248
1249define void @sinh_f64(double* nocapture %varray) {
1250; CHECK-LABEL: @sinh_f64(
1251; CHECK: __sinhd2_massv{{.*}}<2 x double>
1252; CHECK: ret void
1253;
1254entry:
1255  br label %for.body
1256
1257for.body:
1258  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1259  %tmp = trunc i64 %iv to i32
1260  %conv = sitofp i32 %tmp to double
1261  %call = tail call double @sinh(double %conv)
1262  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1263  store double %call, double* %arrayidx, align 4
1264  %iv.next = add nuw nsw i64 %iv, 1
1265  %exitcond = icmp eq i64 %iv.next, 1000
1266  br i1 %exitcond, label %for.end, label %for.body
1267
1268for.end:
1269  ret void
1270}
1271
1272define void @sinh_f32(float* nocapture %varray) {
1273; CHECK-LABEL: @sinh_f32(
1274; CHECK: __sinhf4_massv{{.*}}<4 x float>
1275; CHECK: ret void
1276;
1277entry:
1278  br label %for.body
1279
1280for.body:
1281  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1282  %tmp = trunc i64 %iv to i32
1283  %conv = sitofp i32 %tmp to float
1284  %call = tail call float @sinhf(float %conv)
1285  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1286  store float %call, float* %arrayidx, align 4
1287  %iv.next = add nuw nsw i64 %iv, 1
1288  %exitcond = icmp eq i64 %iv.next, 1000
1289  br i1 %exitcond, label %for.end, label %for.body
1290
1291for.end:
1292  ret void
1293}
1294
1295define void @cosh_f64(double* nocapture %varray) {
1296; CHECK-LABEL: @cosh_f64(
1297; CHECK: __coshd2_massv{{.*}}<2 x double>
1298; CHECK: ret void
1299;
1300entry:
1301  br label %for.body
1302
1303for.body:
1304  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1305  %tmp = trunc i64 %iv to i32
1306  %conv = sitofp i32 %tmp to double
1307  %call = tail call double @cosh(double %conv)
1308  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1309  store double %call, double* %arrayidx, align 4
1310  %iv.next = add nuw nsw i64 %iv, 1
1311  %exitcond = icmp eq i64 %iv.next, 1000
1312  br i1 %exitcond, label %for.end, label %for.body
1313
1314for.end:
1315  ret void
1316}
1317
1318define void @cosh_f32(float* nocapture %varray) {
1319; CHECK-LABEL: @cosh_f32(
1320; CHECK: __coshf4_massv{{.*}}<4 x float>
1321; CHECK: ret void
1322;
1323entry:
1324  br label %for.body
1325
1326for.body:
1327  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1328  %tmp = trunc i64 %iv to i32
1329  %conv = sitofp i32 %tmp to float
1330  %call = tail call float @coshf(float %conv)
1331  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1332  store float %call, float* %arrayidx, align 4
1333  %iv.next = add nuw nsw i64 %iv, 1
1334  %exitcond = icmp eq i64 %iv.next, 1000
1335  br i1 %exitcond, label %for.end, label %for.body
1336
1337for.end:
1338  ret void
1339}
1340
1341define void @tanh_f64(double* nocapture %varray) {
1342; CHECK-LABEL: @tanh_f64(
1343; CHECK: __tanhd2_massv{{.*}}<2 x double>
1344; CHECK: ret void
1345;
1346entry:
1347  br label %for.body
1348
1349for.body:
1350  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1351  %tmp = trunc i64 %iv to i32
1352  %conv = sitofp i32 %tmp to double
1353  %call = tail call double @tanh(double %conv)
1354  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1355  store double %call, double* %arrayidx, align 4
1356  %iv.next = add nuw nsw i64 %iv, 1
1357  %exitcond = icmp eq i64 %iv.next, 1000
1358  br i1 %exitcond, label %for.end, label %for.body
1359
1360for.end:
1361  ret void
1362}
1363
1364define void @tanh_f32(float* nocapture %varray) {
1365; CHECK-LABEL: @tanh_f32(
1366; CHECK: __tanhf4_massv{{.*}}<4 x float>
1367; CHECK: ret void
1368;
1369entry:
1370  br label %for.body
1371
1372for.body:
1373  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1374  %tmp = trunc i64 %iv to i32
1375  %conv = sitofp i32 %tmp to float
1376  %call = tail call float @tanhf(float %conv)
1377  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1378  store float %call, float* %arrayidx, align 4
1379  %iv.next = add nuw nsw i64 %iv, 1
1380  %exitcond = icmp eq i64 %iv.next, 1000
1381  br i1 %exitcond, label %for.end, label %for.body
1382
1383for.end:
1384  ret void
1385}
1386
1387define void @asinh_f64(double* nocapture %varray) {
1388; CHECK-LABEL: @asinh_f64(
1389; CHECK: __asinhd2_massv{{.*}}<2 x double>
1390; CHECK: ret void
1391;
1392entry:
1393  br label %for.body
1394
1395for.body:
1396  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1397  %tmp = trunc i64 %iv to i32
1398  %conv = sitofp i32 %tmp to double
1399  %call = tail call double @asinh(double %conv)
1400  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1401  store double %call, double* %arrayidx, align 4
1402  %iv.next = add nuw nsw i64 %iv, 1
1403  %exitcond = icmp eq i64 %iv.next, 1000
1404  br i1 %exitcond, label %for.end, label %for.body
1405
1406for.end:
1407  ret void
1408}
1409
1410define void @asinh_f32(float* nocapture %varray) {
1411; CHECK-LABEL: @asinh_f32(
1412; CHECK: __asinhf4_massv{{.*}}<4 x float>
1413; CHECK: ret void
1414;
1415entry:
1416  br label %for.body
1417
1418for.body:
1419  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1420  %tmp = trunc i64 %iv to i32
1421  %conv = sitofp i32 %tmp to float
1422  %call = tail call float @asinhf(float %conv)
1423  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1424  store float %call, float* %arrayidx, align 4
1425  %iv.next = add nuw nsw i64 %iv, 1
1426  %exitcond = icmp eq i64 %iv.next, 1000
1427  br i1 %exitcond, label %for.end, label %for.body
1428
1429for.end:
1430  ret void
1431}
1432
1433define void @acosh_f64(double* nocapture %varray) {
1434; CHECK-LABEL: @acosh_f64(
1435; CHECK: __acoshd2_massv{{.*}}<2 x double>
1436; CHECK: ret void
1437;
1438entry:
1439  br label %for.body
1440
1441for.body:
1442  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1443  %tmp = trunc i64 %iv to i32
1444  %conv = sitofp i32 %tmp to double
1445  %call = tail call double @acosh(double %conv)
1446  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1447  store double %call, double* %arrayidx, align 4
1448  %iv.next = add nuw nsw i64 %iv, 1
1449  %exitcond = icmp eq i64 %iv.next, 1000
1450  br i1 %exitcond, label %for.end, label %for.body
1451
1452for.end:
1453  ret void
1454}
1455
1456define void @acosh_f32(float* nocapture %varray) {
1457; CHECK-LABEL: @acosh_f32(
1458; CHECK: __acoshf4_massv{{.*}}<4 x float>
1459; CHECK: ret void
1460;
1461entry:
1462  br label %for.body
1463
1464for.body:
1465  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1466  %tmp = trunc i64 %iv to i32
1467  %conv = sitofp i32 %tmp to float
1468  %call = tail call float @acoshf(float %conv)
1469  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1470  store float %call, float* %arrayidx, align 4
1471  %iv.next = add nuw nsw i64 %iv, 1
1472  %exitcond = icmp eq i64 %iv.next, 1000
1473  br i1 %exitcond, label %for.end, label %for.body
1474
1475for.end:
1476  ret void
1477}
1478
1479define void @atanh_f64(double* nocapture %varray) {
1480; CHECK-LABEL: @atanh_f64(
1481; CHECK: __atanhd2_massv{{.*}}<2 x double>
1482; CHECK: ret void
1483;
1484entry:
1485  br label %for.body
1486
1487for.body:
1488  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1489  %tmp = trunc i64 %iv to i32
1490  %conv = sitofp i32 %tmp to double
1491  %call = tail call double @atanh(double %conv)
1492  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
1493  store double %call, double* %arrayidx, align 4
1494  %iv.next = add nuw nsw i64 %iv, 1
1495  %exitcond = icmp eq i64 %iv.next, 1000
1496  br i1 %exitcond, label %for.end, label %for.body
1497
1498for.end:
1499  ret void
1500}
1501
1502define void @atanh_f32(float* nocapture %varray) {
1503; CHECK-LABEL: @atanh_f32(
1504; CHECK: __atanhf4_massv{{.*}}<4 x float>
1505; CHECK: ret void
1506;
1507entry:
1508  br label %for.body
1509
1510for.body:
1511  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1512  %tmp = trunc i64 %iv to i32
1513  %conv = sitofp i32 %tmp to float
1514  %call = tail call float @atanhf(float %conv)
1515  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
1516  store float %call, float* %arrayidx, align 4
1517  %iv.next = add nuw nsw i64 %iv, 1
1518  %exitcond = icmp eq i64 %iv.next, 1000
1519  br i1 %exitcond, label %for.end, label %for.body
1520
1521for.end:
1522  ret void
1523}
1524
1525attributes #0 = { nounwind }
1526