1 ; RUN: opt < %s -passes=loop-vectorize,dce,instcombine -force-vector-interleave=1 -force-vector-width=4 -S | FileCheck %s
3 define void @sqrt_f32(i32 %n, ptr %y, ptr %x) {
4 ; CHECK-LABEL: @sqrt_f32(
5 ; CHECK: llvm.sqrt.v4f32
9 %cmp6 = icmp sgt i32 %n, 0
10 br i1 %cmp6, label %for.body, label %for.end
12 for.body: ; preds = %entry, %for.body
13 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
14 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
15 %0 = load float, ptr %arrayidx, align 4
16 %call = tail call float @llvm.sqrt.f32(float %0)
17 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
18 store float %call, ptr %arrayidx2, align 4
19 %indvars.iv.next = add i64 %indvars.iv, 1
20 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
21 %exitcond = icmp eq i32 %lftr.wideiv, %n
22 br i1 %exitcond, label %for.end, label %for.body
24 for.end: ; preds = %for.body, %entry
28 declare float @llvm.sqrt.f32(float)
30 define void @sqrt_f64(i32 %n, ptr %y, ptr %x) {
31 ; CHECK-LABEL: @sqrt_f64(
32 ; CHECK: llvm.sqrt.v4f64
36 %cmp6 = icmp sgt i32 %n, 0
37 br i1 %cmp6, label %for.body, label %for.end
39 for.body: ; preds = %entry, %for.body
40 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
41 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
42 %0 = load double, ptr %arrayidx, align 8
43 %call = tail call double @llvm.sqrt.f64(double %0)
44 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
45 store double %call, ptr %arrayidx2, align 8
46 %indvars.iv.next = add i64 %indvars.iv, 1
47 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
48 %exitcond = icmp eq i32 %lftr.wideiv, %n
49 br i1 %exitcond, label %for.end, label %for.body
51 for.end: ; preds = %for.body, %entry
55 declare double @llvm.sqrt.f64(double)
57 define void @sin_f32(i32 %n, ptr %y, ptr %x) {
58 ; CHECK-LABEL: @sin_f32(
59 ; CHECK: llvm.sin.v4f32
63 %cmp6 = icmp sgt i32 %n, 0
64 br i1 %cmp6, label %for.body, label %for.end
66 for.body: ; preds = %entry, %for.body
67 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
68 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
69 %0 = load float, ptr %arrayidx, align 4
70 %call = tail call float @llvm.sin.f32(float %0)
71 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
72 store float %call, ptr %arrayidx2, align 4
73 %indvars.iv.next = add i64 %indvars.iv, 1
74 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
75 %exitcond = icmp eq i32 %lftr.wideiv, %n
76 br i1 %exitcond, label %for.end, label %for.body
78 for.end: ; preds = %for.body, %entry
82 declare float @llvm.sin.f32(float)
84 define void @sin_f64(i32 %n, ptr %y, ptr %x) {
85 ; CHECK-LABEL: @sin_f64(
86 ; CHECK: llvm.sin.v4f64
90 %cmp6 = icmp sgt i32 %n, 0
91 br i1 %cmp6, label %for.body, label %for.end
93 for.body: ; preds = %entry, %for.body
94 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
95 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
96 %0 = load double, ptr %arrayidx, align 8
97 %call = tail call double @llvm.sin.f64(double %0)
98 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
99 store double %call, ptr %arrayidx2, align 8
100 %indvars.iv.next = add i64 %indvars.iv, 1
101 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
102 %exitcond = icmp eq i32 %lftr.wideiv, %n
103 br i1 %exitcond, label %for.end, label %for.body
105 for.end: ; preds = %for.body, %entry
109 declare double @llvm.sin.f64(double)
111 define void @cos_f32(i32 %n, ptr %y, ptr %x) {
112 ; CHECK-LABEL: @cos_f32(
113 ; CHECK: llvm.cos.v4f32
117 %cmp6 = icmp sgt i32 %n, 0
118 br i1 %cmp6, label %for.body, label %for.end
120 for.body: ; preds = %entry, %for.body
121 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
122 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
123 %0 = load float, ptr %arrayidx, align 4
124 %call = tail call float @llvm.cos.f32(float %0)
125 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
126 store float %call, ptr %arrayidx2, align 4
127 %indvars.iv.next = add i64 %indvars.iv, 1
128 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
129 %exitcond = icmp eq i32 %lftr.wideiv, %n
130 br i1 %exitcond, label %for.end, label %for.body
132 for.end: ; preds = %for.body, %entry
136 declare float @llvm.cos.f32(float)
138 define void @cos_f64(i32 %n, ptr %y, ptr %x) {
139 ; CHECK-LABEL: @cos_f64(
140 ; CHECK: llvm.cos.v4f64
144 %cmp6 = icmp sgt i32 %n, 0
145 br i1 %cmp6, label %for.body, label %for.end
147 for.body: ; preds = %entry, %for.body
148 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
149 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
150 %0 = load double, ptr %arrayidx, align 8
151 %call = tail call double @llvm.cos.f64(double %0)
152 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
153 store double %call, ptr %arrayidx2, align 8
154 %indvars.iv.next = add i64 %indvars.iv, 1
155 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
156 %exitcond = icmp eq i32 %lftr.wideiv, %n
157 br i1 %exitcond, label %for.end, label %for.body
159 for.end: ; preds = %for.body, %entry
163 declare double @llvm.cos.f64(double)
165 define void @tan_f32(i32 %n, ptr %y, ptr %x) {
166 ; CHECK-LABEL: @tan_f32(
167 ; CHECK: llvm.tan.v4f32
171 %cmp6 = icmp sgt i32 %n, 0
172 br i1 %cmp6, label %for.body, label %for.end
174 for.body: ; preds = %entry, %for.body
175 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
176 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
177 %0 = load float, ptr %arrayidx, align 4
178 %call = tail call float @llvm.tan.f32(float %0)
179 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
180 store float %call, ptr %arrayidx2, align 4
181 %indvars.iv.next = add i64 %indvars.iv, 1
182 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
183 %exitcond = icmp eq i32 %lftr.wideiv, %n
184 br i1 %exitcond, label %for.end, label %for.body
186 for.end: ; preds = %for.body, %entry
190 declare float @llvm.tan.f32(float)
192 define void @tan_f64(i32 %n, ptr %y, ptr %x) {
193 ; CHECK-LABEL: @tan_f64(
194 ; CHECK: llvm.tan.v4f64
198 %cmp6 = icmp sgt i32 %n, 0
199 br i1 %cmp6, label %for.body, label %for.end
201 for.body: ; preds = %entry, %for.body
202 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
203 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
204 %0 = load double, ptr %arrayidx, align 8
205 %call = tail call double @llvm.tan.f64(double %0)
206 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
207 store double %call, ptr %arrayidx2, align 8
208 %indvars.iv.next = add i64 %indvars.iv, 1
209 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
210 %exitcond = icmp eq i32 %lftr.wideiv, %n
211 br i1 %exitcond, label %for.end, label %for.body
213 for.end: ; preds = %for.body, %entry
217 declare double @llvm.tan.f64(double)
219 define void @exp_f32(i32 %n, ptr %y, ptr %x) {
220 ; CHECK-LABEL: @exp_f32(
221 ; CHECK: llvm.exp.v4f32
225 %cmp6 = icmp sgt i32 %n, 0
226 br i1 %cmp6, label %for.body, label %for.end
228 for.body: ; preds = %entry, %for.body
229 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
230 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
231 %0 = load float, ptr %arrayidx, align 4
232 %call = tail call float @llvm.exp.f32(float %0)
233 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
234 store float %call, ptr %arrayidx2, align 4
235 %indvars.iv.next = add i64 %indvars.iv, 1
236 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
237 %exitcond = icmp eq i32 %lftr.wideiv, %n
238 br i1 %exitcond, label %for.end, label %for.body
240 for.end: ; preds = %for.body, %entry
244 declare float @llvm.exp.f32(float)
246 define void @exp_f64(i32 %n, ptr %y, ptr %x) {
247 ; CHECK-LABEL: @exp_f64(
248 ; CHECK: llvm.exp.v4f64
252 %cmp6 = icmp sgt i32 %n, 0
253 br i1 %cmp6, label %for.body, label %for.end
255 for.body: ; preds = %entry, %for.body
256 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
257 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
258 %0 = load double, ptr %arrayidx, align 8
259 %call = tail call double @llvm.exp.f64(double %0)
260 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
261 store double %call, ptr %arrayidx2, align 8
262 %indvars.iv.next = add i64 %indvars.iv, 1
263 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
264 %exitcond = icmp eq i32 %lftr.wideiv, %n
265 br i1 %exitcond, label %for.end, label %for.body
267 for.end: ; preds = %for.body, %entry
271 declare double @llvm.exp.f64(double)
273 define void @exp2_f32(i32 %n, ptr %y, ptr %x) {
274 ; CHECK-LABEL: @exp2_f32(
275 ; CHECK: llvm.exp2.v4f32
279 %cmp6 = icmp sgt i32 %n, 0
280 br i1 %cmp6, label %for.body, label %for.end
282 for.body: ; preds = %entry, %for.body
283 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
284 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
285 %0 = load float, ptr %arrayidx, align 4
286 %call = tail call float @llvm.exp2.f32(float %0)
287 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
288 store float %call, ptr %arrayidx2, align 4
289 %indvars.iv.next = add i64 %indvars.iv, 1
290 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
291 %exitcond = icmp eq i32 %lftr.wideiv, %n
292 br i1 %exitcond, label %for.end, label %for.body
294 for.end: ; preds = %for.body, %entry
298 declare float @llvm.exp2.f32(float)
300 define void @exp2_f64(i32 %n, ptr %y, ptr %x) {
301 ; CHECK-LABEL: @exp2_f64(
302 ; CHECK: llvm.exp2.v4f64
306 %cmp6 = icmp sgt i32 %n, 0
307 br i1 %cmp6, label %for.body, label %for.end
309 for.body: ; preds = %entry, %for.body
310 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
311 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
312 %0 = load double, ptr %arrayidx, align 8
313 %call = tail call double @llvm.exp2.f64(double %0)
314 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
315 store double %call, ptr %arrayidx2, align 8
316 %indvars.iv.next = add i64 %indvars.iv, 1
317 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
318 %exitcond = icmp eq i32 %lftr.wideiv, %n
319 br i1 %exitcond, label %for.end, label %for.body
321 for.end: ; preds = %for.body, %entry
325 declare double @llvm.exp2.f64(double)
327 define void @log_f32(i32 %n, ptr %y, ptr %x) {
328 ; CHECK-LABEL: @log_f32(
329 ; CHECK: llvm.log.v4f32
333 %cmp6 = icmp sgt i32 %n, 0
334 br i1 %cmp6, label %for.body, label %for.end
336 for.body: ; preds = %entry, %for.body
337 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
338 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
339 %0 = load float, ptr %arrayidx, align 4
340 %call = tail call float @llvm.log.f32(float %0)
341 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
342 store float %call, ptr %arrayidx2, align 4
343 %indvars.iv.next = add i64 %indvars.iv, 1
344 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
345 %exitcond = icmp eq i32 %lftr.wideiv, %n
346 br i1 %exitcond, label %for.end, label %for.body
348 for.end: ; preds = %for.body, %entry
352 declare float @llvm.log.f32(float)
354 define void @log_f64(i32 %n, ptr %y, ptr %x) {
355 ; CHECK-LABEL: @log_f64(
356 ; CHECK: llvm.log.v4f64
360 %cmp6 = icmp sgt i32 %n, 0
361 br i1 %cmp6, label %for.body, label %for.end
363 for.body: ; preds = %entry, %for.body
364 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
365 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
366 %0 = load double, ptr %arrayidx, align 8
367 %call = tail call double @llvm.log.f64(double %0)
368 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
369 store double %call, ptr %arrayidx2, align 8
370 %indvars.iv.next = add i64 %indvars.iv, 1
371 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
372 %exitcond = icmp eq i32 %lftr.wideiv, %n
373 br i1 %exitcond, label %for.end, label %for.body
375 for.end: ; preds = %for.body, %entry
379 declare double @llvm.log.f64(double)
381 define void @log10_f32(i32 %n, ptr %y, ptr %x) {
382 ; CHECK-LABEL: @log10_f32(
383 ; CHECK: llvm.log10.v4f32
387 %cmp6 = icmp sgt i32 %n, 0
388 br i1 %cmp6, label %for.body, label %for.end
390 for.body: ; preds = %entry, %for.body
391 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
392 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
393 %0 = load float, ptr %arrayidx, align 4
394 %call = tail call float @llvm.log10.f32(float %0)
395 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
396 store float %call, ptr %arrayidx2, align 4
397 %indvars.iv.next = add i64 %indvars.iv, 1
398 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
399 %exitcond = icmp eq i32 %lftr.wideiv, %n
400 br i1 %exitcond, label %for.end, label %for.body
402 for.end: ; preds = %for.body, %entry
406 declare float @llvm.log10.f32(float)
408 define void @log10_f64(i32 %n, ptr %y, ptr %x) {
409 ; CHECK-LABEL: @log10_f64(
410 ; CHECK: llvm.log10.v4f64
414 %cmp6 = icmp sgt i32 %n, 0
415 br i1 %cmp6, label %for.body, label %for.end
417 for.body: ; preds = %entry, %for.body
418 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
419 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
420 %0 = load double, ptr %arrayidx, align 8
421 %call = tail call double @llvm.log10.f64(double %0)
422 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
423 store double %call, ptr %arrayidx2, align 8
424 %indvars.iv.next = add i64 %indvars.iv, 1
425 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
426 %exitcond = icmp eq i32 %lftr.wideiv, %n
427 br i1 %exitcond, label %for.end, label %for.body
429 for.end: ; preds = %for.body, %entry
433 declare double @llvm.log10.f64(double)
435 define void @log2_f32(i32 %n, ptr %y, ptr %x) {
436 ; CHECK-LABEL: @log2_f32(
437 ; CHECK: llvm.log2.v4f32
441 %cmp6 = icmp sgt i32 %n, 0
442 br i1 %cmp6, label %for.body, label %for.end
444 for.body: ; preds = %entry, %for.body
445 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
446 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
447 %0 = load float, ptr %arrayidx, align 4
448 %call = tail call float @llvm.log2.f32(float %0)
449 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
450 store float %call, ptr %arrayidx2, align 4
451 %indvars.iv.next = add i64 %indvars.iv, 1
452 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
453 %exitcond = icmp eq i32 %lftr.wideiv, %n
454 br i1 %exitcond, label %for.end, label %for.body
456 for.end: ; preds = %for.body, %entry
460 declare float @llvm.log2.f32(float)
462 define void @log2_f64(i32 %n, ptr %y, ptr %x) {
463 ; CHECK-LABEL: @log2_f64(
464 ; CHECK: llvm.log2.v4f64
468 %cmp6 = icmp sgt i32 %n, 0
469 br i1 %cmp6, label %for.body, label %for.end
471 for.body: ; preds = %entry, %for.body
472 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
473 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
474 %0 = load double, ptr %arrayidx, align 8
475 %call = tail call double @llvm.log2.f64(double %0)
476 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
477 store double %call, ptr %arrayidx2, align 8
478 %indvars.iv.next = add i64 %indvars.iv, 1
479 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
480 %exitcond = icmp eq i32 %lftr.wideiv, %n
481 br i1 %exitcond, label %for.end, label %for.body
483 for.end: ; preds = %for.body, %entry
487 declare double @llvm.log2.f64(double)
489 define void @fabs_f32(i32 %n, ptr %y, ptr %x) {
490 ; CHECK-LABEL: @fabs_f32(
491 ; CHECK: llvm.fabs.v4f32
495 %cmp6 = icmp sgt i32 %n, 0
496 br i1 %cmp6, label %for.body, label %for.end
498 for.body: ; preds = %entry, %for.body
499 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
500 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
501 %0 = load float, ptr %arrayidx, align 4
502 %call = tail call float @llvm.fabs.f32(float %0)
503 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
504 store float %call, ptr %arrayidx2, align 4
505 %indvars.iv.next = add i64 %indvars.iv, 1
506 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
507 %exitcond = icmp eq i32 %lftr.wideiv, %n
508 br i1 %exitcond, label %for.end, label %for.body
510 for.end: ; preds = %for.body, %entry
514 declare float @llvm.fabs.f32(float)
516 define void @fabs_f64(i32 %n, ptr %y, ptr %x) {
517 ; CHECK-LABEL: @fabs_f64(
518 ; CHECK: llvm.fabs.v4f64
522 %cmp6 = icmp sgt i32 %n, 0
523 br i1 %cmp6, label %for.body, label %for.end
525 for.body: ; preds = %entry, %for.body
526 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
527 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
528 %0 = load double, ptr %arrayidx, align 8
529 %call = tail call double @llvm.fabs(double %0)
530 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
531 store double %call, ptr %arrayidx2, align 8
532 %indvars.iv.next = add i64 %indvars.iv, 1
533 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
534 %exitcond = icmp eq i32 %lftr.wideiv, %n
535 br i1 %exitcond, label %for.end, label %for.body
537 for.end: ; preds = %for.body, %entry
541 declare double @llvm.fabs(double)
543 define void @copysign_f32(i32 %n, ptr %y, ptr %x, ptr %z) {
544 ; CHECK-LABEL: @copysign_f32(
545 ; CHECK: llvm.copysign.v4f32
549 %cmp6 = icmp sgt i32 %n, 0
550 br i1 %cmp6, label %for.body, label %for.end
552 for.body: ; preds = %entry, %for.body
553 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
554 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
555 %0 = load float, ptr %arrayidx, align 4
556 %arrayidx1 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
557 %1 = load float, ptr %arrayidx1, align 4
558 %call = tail call float @llvm.copysign.f32(float %0, float %1)
559 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
560 store float %call, ptr %arrayidx2, align 4
561 %indvars.iv.next = add i64 %indvars.iv, 1
562 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
563 %exitcond = icmp eq i32 %lftr.wideiv, %n
564 br i1 %exitcond, label %for.end, label %for.body
566 for.end: ; preds = %for.body, %entry
570 declare float @llvm.copysign.f32(float, float)
572 define void @copysign_f64(i32 %n, ptr %y, ptr %x, ptr %z) {
573 ; CHECK-LABEL: @copysign_f64(
574 ; CHECK: llvm.copysign.v4f64
578 %cmp6 = icmp sgt i32 %n, 0
579 br i1 %cmp6, label %for.body, label %for.end
581 for.body: ; preds = %entry, %for.body
582 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
583 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
584 %0 = load double, ptr %arrayidx, align 8
585 %arrayidx1 = getelementptr inbounds double, ptr %z, i64 %indvars.iv
586 %1 = load double, ptr %arrayidx1, align 8
587 %call = tail call double @llvm.copysign(double %0, double %1)
588 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
589 store double %call, ptr %arrayidx2, align 8
590 %indvars.iv.next = add i64 %indvars.iv, 1
591 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
592 %exitcond = icmp eq i32 %lftr.wideiv, %n
593 br i1 %exitcond, label %for.end, label %for.body
595 for.end: ; preds = %for.body, %entry
599 declare double @llvm.copysign(double, double)
601 define void @floor_f32(i32 %n, ptr %y, ptr %x) {
602 ; CHECK-LABEL: @floor_f32(
603 ; CHECK: llvm.floor.v4f32
607 %cmp6 = icmp sgt i32 %n, 0
608 br i1 %cmp6, label %for.body, label %for.end
610 for.body: ; preds = %entry, %for.body
611 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
612 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
613 %0 = load float, ptr %arrayidx, align 4
614 %call = tail call float @llvm.floor.f32(float %0)
615 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
616 store float %call, ptr %arrayidx2, align 4
617 %indvars.iv.next = add i64 %indvars.iv, 1
618 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
619 %exitcond = icmp eq i32 %lftr.wideiv, %n
620 br i1 %exitcond, label %for.end, label %for.body
622 for.end: ; preds = %for.body, %entry
626 declare float @llvm.floor.f32(float)
628 define void @floor_f64(i32 %n, ptr %y, ptr %x) {
629 ; CHECK-LABEL: @floor_f64(
630 ; CHECK: llvm.floor.v4f64
634 %cmp6 = icmp sgt i32 %n, 0
635 br i1 %cmp6, label %for.body, label %for.end
637 for.body: ; preds = %entry, %for.body
638 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
639 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
640 %0 = load double, ptr %arrayidx, align 8
641 %call = tail call double @llvm.floor.f64(double %0)
642 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
643 store double %call, ptr %arrayidx2, align 8
644 %indvars.iv.next = add i64 %indvars.iv, 1
645 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
646 %exitcond = icmp eq i32 %lftr.wideiv, %n
647 br i1 %exitcond, label %for.end, label %for.body
649 for.end: ; preds = %for.body, %entry
653 declare double @llvm.floor.f64(double)
655 define void @ceil_f32(i32 %n, ptr %y, ptr %x) {
656 ; CHECK-LABEL: @ceil_f32(
657 ; CHECK: llvm.ceil.v4f32
661 %cmp6 = icmp sgt i32 %n, 0
662 br i1 %cmp6, label %for.body, label %for.end
664 for.body: ; preds = %entry, %for.body
665 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
666 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
667 %0 = load float, ptr %arrayidx, align 4
668 %call = tail call float @llvm.ceil.f32(float %0)
669 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
670 store float %call, ptr %arrayidx2, align 4
671 %indvars.iv.next = add i64 %indvars.iv, 1
672 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
673 %exitcond = icmp eq i32 %lftr.wideiv, %n
674 br i1 %exitcond, label %for.end, label %for.body
676 for.end: ; preds = %for.body, %entry
680 declare float @llvm.ceil.f32(float)
682 define void @ceil_f64(i32 %n, ptr %y, ptr %x) {
683 ; CHECK-LABEL: @ceil_f64(
684 ; CHECK: llvm.ceil.v4f64
688 %cmp6 = icmp sgt i32 %n, 0
689 br i1 %cmp6, label %for.body, label %for.end
691 for.body: ; preds = %entry, %for.body
692 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
693 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
694 %0 = load double, ptr %arrayidx, align 8
695 %call = tail call double @llvm.ceil.f64(double %0)
696 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
697 store double %call, ptr %arrayidx2, align 8
698 %indvars.iv.next = add i64 %indvars.iv, 1
699 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
700 %exitcond = icmp eq i32 %lftr.wideiv, %n
701 br i1 %exitcond, label %for.end, label %for.body
703 for.end: ; preds = %for.body, %entry
707 declare double @llvm.ceil.f64(double)
709 define void @trunc_f32(i32 %n, ptr %y, ptr %x) {
710 ; CHECK-LABEL: @trunc_f32(
711 ; CHECK: llvm.trunc.v4f32
715 %cmp6 = icmp sgt i32 %n, 0
716 br i1 %cmp6, label %for.body, label %for.end
718 for.body: ; preds = %entry, %for.body
719 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
720 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
721 %0 = load float, ptr %arrayidx, align 4
722 %call = tail call float @llvm.trunc.f32(float %0)
723 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
724 store float %call, ptr %arrayidx2, align 4
725 %indvars.iv.next = add i64 %indvars.iv, 1
726 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
727 %exitcond = icmp eq i32 %lftr.wideiv, %n
728 br i1 %exitcond, label %for.end, label %for.body
730 for.end: ; preds = %for.body, %entry
734 declare float @llvm.trunc.f32(float)
736 define void @trunc_f64(i32 %n, ptr %y, ptr %x) {
737 ; CHECK-LABEL: @trunc_f64(
738 ; CHECK: llvm.trunc.v4f64
742 %cmp6 = icmp sgt i32 %n, 0
743 br i1 %cmp6, label %for.body, label %for.end
745 for.body: ; preds = %entry, %for.body
746 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
747 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
748 %0 = load double, ptr %arrayidx, align 8
749 %call = tail call double @llvm.trunc.f64(double %0)
750 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
751 store double %call, ptr %arrayidx2, align 8
752 %indvars.iv.next = add i64 %indvars.iv, 1
753 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
754 %exitcond = icmp eq i32 %lftr.wideiv, %n
755 br i1 %exitcond, label %for.end, label %for.body
757 for.end: ; preds = %for.body, %entry
761 declare double @llvm.trunc.f64(double)
763 define void @rint_f32(i32 %n, ptr %y, ptr %x) {
764 ; CHECK-LABEL: @rint_f32(
765 ; CHECK: llvm.rint.v4f32
769 %cmp6 = icmp sgt i32 %n, 0
770 br i1 %cmp6, label %for.body, label %for.end
772 for.body: ; preds = %entry, %for.body
773 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
774 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
775 %0 = load float, ptr %arrayidx, align 4
776 %call = tail call float @llvm.rint.f32(float %0)
777 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
778 store float %call, ptr %arrayidx2, align 4
779 %indvars.iv.next = add i64 %indvars.iv, 1
780 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
781 %exitcond = icmp eq i32 %lftr.wideiv, %n
782 br i1 %exitcond, label %for.end, label %for.body
784 for.end: ; preds = %for.body, %entry
788 declare float @llvm.rint.f32(float)
790 define void @rint_f64(i32 %n, ptr %y, ptr %x) {
791 ; CHECK-LABEL: @rint_f64(
792 ; CHECK: llvm.rint.v4f64
796 %cmp6 = icmp sgt i32 %n, 0
797 br i1 %cmp6, label %for.body, label %for.end
799 for.body: ; preds = %entry, %for.body
800 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
801 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
802 %0 = load double, ptr %arrayidx, align 8
803 %call = tail call double @llvm.rint.f64(double %0)
804 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
805 store double %call, ptr %arrayidx2, align 8
806 %indvars.iv.next = add i64 %indvars.iv, 1
807 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
808 %exitcond = icmp eq i32 %lftr.wideiv, %n
809 br i1 %exitcond, label %for.end, label %for.body
811 for.end: ; preds = %for.body, %entry
815 declare double @llvm.rint.f64(double)
817 define void @nearbyint_f32(i32 %n, ptr %y, ptr %x) {
818 ; CHECK-LABEL: @nearbyint_f32(
819 ; CHECK: llvm.nearbyint.v4f32
823 %cmp6 = icmp sgt i32 %n, 0
824 br i1 %cmp6, label %for.body, label %for.end
826 for.body: ; preds = %entry, %for.body
827 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
828 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
829 %0 = load float, ptr %arrayidx, align 4
830 %call = tail call float @llvm.nearbyint.f32(float %0)
831 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
832 store float %call, ptr %arrayidx2, align 4
833 %indvars.iv.next = add i64 %indvars.iv, 1
834 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
835 %exitcond = icmp eq i32 %lftr.wideiv, %n
836 br i1 %exitcond, label %for.end, label %for.body
838 for.end: ; preds = %for.body, %entry
842 declare float @llvm.nearbyint.f32(float)
844 define void @nearbyint_f64(i32 %n, ptr %y, ptr %x) {
845 ; CHECK-LABEL: @nearbyint_f64(
846 ; CHECK: llvm.nearbyint.v4f64
850 %cmp6 = icmp sgt i32 %n, 0
851 br i1 %cmp6, label %for.body, label %for.end
853 for.body: ; preds = %entry, %for.body
854 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
855 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
856 %0 = load double, ptr %arrayidx, align 8
857 %call = tail call double @llvm.nearbyint.f64(double %0)
858 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
859 store double %call, ptr %arrayidx2, align 8
860 %indvars.iv.next = add i64 %indvars.iv, 1
861 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
862 %exitcond = icmp eq i32 %lftr.wideiv, %n
863 br i1 %exitcond, label %for.end, label %for.body
865 for.end: ; preds = %for.body, %entry
869 declare double @llvm.nearbyint.f64(double)
871 define void @round_f32(i32 %n, ptr %y, ptr %x) {
872 ; CHECK-LABEL: @round_f32(
873 ; CHECK: llvm.round.v4f32
877 %cmp6 = icmp sgt i32 %n, 0
878 br i1 %cmp6, label %for.body, label %for.end
880 for.body: ; preds = %entry, %for.body
881 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
882 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
883 %0 = load float, ptr %arrayidx, align 4
884 %call = tail call float @llvm.round.f32(float %0)
885 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
886 store float %call, ptr %arrayidx2, align 4
887 %indvars.iv.next = add i64 %indvars.iv, 1
888 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
889 %exitcond = icmp eq i32 %lftr.wideiv, %n
890 br i1 %exitcond, label %for.end, label %for.body
892 for.end: ; preds = %for.body, %entry
896 declare float @llvm.round.f32(float)
898 define void @round_f64(i32 %n, ptr %y, ptr %x) {
899 ; CHECK-LABEL: @round_f64(
900 ; CHECK: llvm.round.v4f64
904 %cmp6 = icmp sgt i32 %n, 0
905 br i1 %cmp6, label %for.body, label %for.end
907 for.body: ; preds = %entry, %for.body
908 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
909 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
910 %0 = load double, ptr %arrayidx, align 8
911 %call = tail call double @llvm.round.f64(double %0)
912 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
913 store double %call, ptr %arrayidx2, align 8
914 %indvars.iv.next = add i64 %indvars.iv, 1
915 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
916 %exitcond = icmp eq i32 %lftr.wideiv, %n
917 br i1 %exitcond, label %for.end, label %for.body
919 for.end: ; preds = %for.body, %entry
923 declare double @llvm.round.f64(double)
925 define void @roundeven_f32(i32 %n, ptr %y, ptr %x) {
926 ; CHECK-LABEL: @roundeven_f32(
927 ; CHECK: llvm.roundeven.v4f32
931 %cmp6 = icmp sgt i32 %n, 0
932 br i1 %cmp6, label %for.body, label %for.end
934 for.body: ; preds = %entry, %for.body
935 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
936 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
937 %0 = load float, ptr %arrayidx, align 4
938 %call = tail call float @llvm.roundeven.f32(float %0)
939 %arrayidx2 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
940 store float %call, ptr %arrayidx2, align 4
941 %indvars.iv.next = add i64 %indvars.iv, 1
942 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
943 %exitcond = icmp eq i32 %lftr.wideiv, %n
944 br i1 %exitcond, label %for.end, label %for.body
946 for.end: ; preds = %for.body, %entry
950 declare float @llvm.roundeven.f32(float)
952 define void @roundeven_f64(i32 %n, ptr %y, ptr %x) {
953 ; CHECK-LABEL: @roundeven_f64(
954 ; CHECK: llvm.roundeven.v4f64
958 %cmp6 = icmp sgt i32 %n, 0
959 br i1 %cmp6, label %for.body, label %for.end
961 for.body: ; preds = %entry, %for.body
962 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
963 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
964 %0 = load double, ptr %arrayidx, align 8
965 %call = tail call double @llvm.roundeven.f64(double %0)
966 %arrayidx2 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
967 store double %call, ptr %arrayidx2, align 8
968 %indvars.iv.next = add i64 %indvars.iv, 1
969 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
970 %exitcond = icmp eq i32 %lftr.wideiv, %n
971 br i1 %exitcond, label %for.end, label %for.body
973 for.end: ; preds = %for.body, %entry
977 declare double @llvm.roundeven.f64(double)
979 define void @fma_f32(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {
980 ; CHECK-LABEL: @fma_f32(
981 ; CHECK: llvm.fma.v4f32
985 %cmp12 = icmp sgt i32 %n, 0
986 br i1 %cmp12, label %for.body, label %for.end
988 for.body: ; preds = %entry, %for.body
989 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
990 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
991 %0 = load float, ptr %arrayidx, align 4
992 %arrayidx2 = getelementptr inbounds float, ptr %w, i64 %indvars.iv
993 %1 = load float, ptr %arrayidx2, align 4
994 %arrayidx4 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
995 %2 = load float, ptr %arrayidx4, align 4
996 %3 = tail call float @llvm.fma.f32(float %0, float %2, float %1)
997 %arrayidx6 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
998 store float %3, ptr %arrayidx6, align 4
999 %indvars.iv.next = add i64 %indvars.iv, 1
1000 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1001 %exitcond = icmp eq i32 %lftr.wideiv, %n
1002 br i1 %exitcond, label %for.end, label %for.body
1004 for.end: ; preds = %for.body, %entry
1008 declare float @llvm.fma.f32(float, float, float)
1010 define void @fma_f64(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {
1011 ; CHECK-LABEL: @fma_f64(
1012 ; CHECK: llvm.fma.v4f64
1016 %cmp12 = icmp sgt i32 %n, 0
1017 br i1 %cmp12, label %for.body, label %for.end
1019 for.body: ; preds = %entry, %for.body
1020 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1021 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
1022 %0 = load double, ptr %arrayidx, align 8
1023 %arrayidx2 = getelementptr inbounds double, ptr %w, i64 %indvars.iv
1024 %1 = load double, ptr %arrayidx2, align 8
1025 %arrayidx4 = getelementptr inbounds double, ptr %z, i64 %indvars.iv
1026 %2 = load double, ptr %arrayidx4, align 8
1027 %3 = tail call double @llvm.fma.f64(double %0, double %2, double %1)
1028 %arrayidx6 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
1029 store double %3, ptr %arrayidx6, align 8
1030 %indvars.iv.next = add i64 %indvars.iv, 1
1031 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1032 %exitcond = icmp eq i32 %lftr.wideiv, %n
1033 br i1 %exitcond, label %for.end, label %for.body
1035 for.end: ; preds = %for.body, %entry
1039 declare double @llvm.fma.f64(double, double, double)
1041 define void @fmuladd_f32(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {
1042 ; CHECK-LABEL: @fmuladd_f32(
1043 ; CHECK: llvm.fmuladd.v4f32
1047 %cmp12 = icmp sgt i32 %n, 0
1048 br i1 %cmp12, label %for.body, label %for.end
1050 for.body: ; preds = %entry, %for.body
1051 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1052 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
1053 %0 = load float, ptr %arrayidx, align 4
1054 %arrayidx2 = getelementptr inbounds float, ptr %w, i64 %indvars.iv
1055 %1 = load float, ptr %arrayidx2, align 4
1056 %arrayidx4 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
1057 %2 = load float, ptr %arrayidx4, align 4
1058 %3 = tail call float @llvm.fmuladd.f32(float %0, float %2, float %1)
1059 %arrayidx6 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1060 store float %3, ptr %arrayidx6, align 4
1061 %indvars.iv.next = add i64 %indvars.iv, 1
1062 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1063 %exitcond = icmp eq i32 %lftr.wideiv, %n
1064 br i1 %exitcond, label %for.end, label %for.body
1066 for.end: ; preds = %for.body, %entry
1070 declare float @llvm.fmuladd.f32(float, float, float)
1072 define void @fmuladd_f64(i32 %n, ptr %y, ptr %x, ptr %z, ptr %w) {
1073 ; CHECK-LABEL: @fmuladd_f64(
1074 ; CHECK: llvm.fmuladd.v4f64
1078 %cmp12 = icmp sgt i32 %n, 0
1079 br i1 %cmp12, label %for.body, label %for.end
1081 for.body: ; preds = %entry, %for.body
1082 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1083 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
1084 %0 = load double, ptr %arrayidx, align 8
1085 %arrayidx2 = getelementptr inbounds double, ptr %w, i64 %indvars.iv
1086 %1 = load double, ptr %arrayidx2, align 8
1087 %arrayidx4 = getelementptr inbounds double, ptr %z, i64 %indvars.iv
1088 %2 = load double, ptr %arrayidx4, align 8
1089 %3 = tail call double @llvm.fmuladd.f64(double %0, double %2, double %1)
1090 %arrayidx6 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
1091 store double %3, ptr %arrayidx6, align 8
1092 %indvars.iv.next = add i64 %indvars.iv, 1
1093 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1094 %exitcond = icmp eq i32 %lftr.wideiv, %n
1095 br i1 %exitcond, label %for.end, label %for.body
1097 for.end: ; preds = %for.body, %entry
1101 declare double @llvm.fmuladd.f64(double, double, double)
1103 define void @pow_f32(i32 %n, ptr %y, ptr %x, ptr %z) {
1104 ; CHECK-LABEL: @pow_f32(
1105 ; CHECK: llvm.pow.v4f32
1109 %cmp9 = icmp sgt i32 %n, 0
1110 br i1 %cmp9, label %for.body, label %for.end
1112 for.body: ; preds = %entry, %for.body
1113 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1114 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
1115 %0 = load float, ptr %arrayidx, align 4
1116 %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
1117 %1 = load float, ptr %arrayidx2, align 4
1118 %call = tail call float @llvm.pow.f32(float %0, float %1)
1119 %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1120 store float %call, ptr %arrayidx4, align 4
1121 %indvars.iv.next = add i64 %indvars.iv, 1
1122 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1123 %exitcond = icmp eq i32 %lftr.wideiv, %n
1124 br i1 %exitcond, label %for.end, label %for.body
1126 for.end: ; preds = %for.body, %entry
1130 declare float @llvm.pow.f32(float, float)
1132 define void @pow_f64(i32 %n, ptr %y, ptr %x, ptr %z) {
1133 ; CHECK-LABEL: @pow_f64(
1134 ; CHECK: llvm.pow.v4f64
1138 %cmp9 = icmp sgt i32 %n, 0
1139 br i1 %cmp9, label %for.body, label %for.end
1141 for.body: ; preds = %entry, %for.body
1142 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1143 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
1144 %0 = load double, ptr %arrayidx, align 8
1145 %arrayidx2 = getelementptr inbounds double, ptr %z, i64 %indvars.iv
1146 %1 = load double, ptr %arrayidx2, align 8
1147 %call = tail call double @llvm.pow.f64(double %0, double %1)
1148 %arrayidx4 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
1149 store double %call, ptr %arrayidx4, align 8
1150 %indvars.iv.next = add i64 %indvars.iv, 1
1151 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1152 %exitcond = icmp eq i32 %lftr.wideiv, %n
1153 br i1 %exitcond, label %for.end, label %for.body
1155 for.end: ; preds = %for.body, %entry
1159 define void @fabs_libm(ptr %x) {
1161 ; CHECK: call <4 x float> @llvm.fabs.v4f32
1167 for.body: ; preds = %entry, %for.body
1168 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1169 %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1170 %0 = load float, ptr %arrayidx, align 4
1171 %call = tail call float @fabsf(float %0) nounwind readnone
1172 store float %call, ptr %arrayidx, align 4
1173 %indvars.iv.next = add i64 %indvars.iv, 1
1174 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1175 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1176 br i1 %exitcond, label %for.end, label %for.body
1178 for.end: ; preds = %for.body
1182 declare float @fabsf(float) nounwind readnone
1184 declare double @llvm.pow.f64(double, double)
1186 ; Make sure we don't replace calls to functions with standard library function
1187 ; signatures but defined with internal linkage.
1189 define internal float @roundf(float %x) {
1190 ret float 0.00000000
1192 define void @internal_round(ptr %x) {
1193 ; CHECK-LABEL: internal_round
1194 ; CHECK-NOT: load <4 x float>
1200 for.body: ; preds = %entry, %for.body
1201 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1202 %arrayidx = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1203 %0 = load float, ptr %arrayidx, align 4
1204 %call = tail call float @roundf(float %0)
1205 store float %call, ptr %arrayidx, align 4
1206 %indvars.iv.next = add i64 %indvars.iv, 1
1207 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1208 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1209 br i1 %exitcond, label %for.end, label %for.body
1211 for.end: ; preds = %for.body
1215 ; Make sure we don't replace calls to functions with standard library names but
1216 ; different signatures.
1218 declare void @round(double %f)
1220 define void @wrong_signature(ptr %x) {
1221 ; CHECK-LABEL: wrong_signature
1222 ; CHECK-NOT: load <4 x double>
1228 for.body: ; preds = %entry, %for.body
1229 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1230 %arrayidx = getelementptr inbounds double, ptr %x, i64 %indvars.iv
1231 %0 = load double, ptr %arrayidx, align 4
1232 store double %0, ptr %arrayidx, align 4
1233 tail call void @round(double %0)
1234 %indvars.iv.next = add i64 %indvars.iv, 1
1235 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1236 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1237 br i1 %exitcond, label %for.end, label %for.body
1239 for.end: ; preds = %for.body
1243 declare double @llvm.powi.f64.i32(double %Val, i32 %power)
1245 define void @powi_f64(i32 %n, ptr %y, ptr %x, i32 %P) {
1246 ; CHECK-LABEL: @powi_f64(
1247 ; CHECK: llvm.powi.v4f64
1251 %cmp9 = icmp sgt i32 %n, 0
1252 br i1 %cmp9, label %for.body, label %for.end
1254 for.body: ; preds = %entry, %for.body
1255 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1256 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
1257 %0 = load double, ptr %arrayidx, align 8
1258 %call = tail call double @llvm.powi.f64.i32(double %0, i32 %P)
1259 %arrayidx4 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
1260 store double %call, ptr %arrayidx4, align 8
1261 %indvars.iv.next = add i64 %indvars.iv, 1
1262 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1263 %exitcond = icmp eq i32 %lftr.wideiv, %n
1264 br i1 %exitcond, label %for.end, label %for.body
1266 for.end: ; preds = %for.body, %entry
1270 define void @powi_f64_neg(i32 %n, ptr %y, ptr %x) {
1271 ; CHECK-LABEL: @powi_f64_neg(
1272 ; CHECK-NOT: llvm.powi.v4f64
1276 %cmp9 = icmp sgt i32 %n, 0
1277 br i1 %cmp9, label %for.body, label %for.end
1279 for.body: ; preds = %entry, %for.body
1280 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1281 %arrayidx = getelementptr inbounds double, ptr %y, i64 %indvars.iv
1282 %0 = load double, ptr %arrayidx, align 8
1283 %1 = trunc i64 %indvars.iv to i32
1284 %call = tail call double @llvm.powi.f64.i32(double %0, i32 %1)
1285 %arrayidx4 = getelementptr inbounds double, ptr %x, i64 %indvars.iv
1286 store double %call, ptr %arrayidx4, align 8
1287 %indvars.iv.next = add i64 %indvars.iv, 1
1288 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1289 %exitcond = icmp eq i32 %lftr.wideiv, %n
1290 br i1 %exitcond, label %for.end, label %for.body
1292 for.end: ; preds = %for.body, %entry
1296 declare i64 @llvm.cttz.i64 (i64, i1)
1298 define void @cttz_f64(i32 %n, ptr %y, ptr %x) {
1299 ; CHECK-LABEL: @cttz_f64(
1300 ; CHECK: llvm.cttz.v4i64
1304 %cmp9 = icmp sgt i32 %n, 0
1305 br i1 %cmp9, label %for.body, label %for.end
1307 for.body: ; preds = %entry, %for.body
1308 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1309 %arrayidx = getelementptr inbounds i64, ptr %y, i64 %indvars.iv
1310 %0 = load i64, ptr %arrayidx, align 8
1311 %call = tail call i64 @llvm.cttz.i64(i64 %0, i1 true)
1312 %arrayidx4 = getelementptr inbounds i64, ptr %x, i64 %indvars.iv
1313 store i64 %call, ptr %arrayidx4, align 8
1314 %indvars.iv.next = add i64 %indvars.iv, 1
1315 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1316 %exitcond = icmp eq i32 %lftr.wideiv, %n
1317 br i1 %exitcond, label %for.end, label %for.body
1319 for.end: ; preds = %for.body, %entry
1323 declare i64 @llvm.ctlz.i64 (i64, i1)
1325 define void @ctlz_f64(i32 %n, ptr %y, ptr %x) {
1326 ; CHECK-LABEL: @ctlz_f64(
1327 ; CHECK: llvm.ctlz.v4i64
1331 %cmp9 = icmp sgt i32 %n, 0
1332 br i1 %cmp9, label %for.body, label %for.end
1334 for.body: ; preds = %entry, %for.body
1335 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1336 %arrayidx = getelementptr inbounds i64, ptr %y, i64 %indvars.iv
1337 %0 = load i64, ptr %arrayidx, align 8
1338 %call = tail call i64 @llvm.ctlz.i64(i64 %0, i1 true)
1339 %arrayidx4 = getelementptr inbounds i64, ptr %x, i64 %indvars.iv
1340 store i64 %call, ptr %arrayidx4, align 8
1341 %indvars.iv.next = add i64 %indvars.iv, 1
1342 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1343 %exitcond = icmp eq i32 %lftr.wideiv, %n
1344 br i1 %exitcond, label %for.end, label %for.body
1346 for.end: ; preds = %for.body, %entry
1350 declare i64 @llvm.abs.i64 (i64, i1)
1352 define void @abs_i64(i32 %n, ptr %y, ptr %x) {
1353 ; CHECK-LABEL: @abs_i64(
1354 ; CHECK: llvm.abs.v4i64(<4 x i64> [[WIDE_LOADX:%.*]], i1 true)
1358 %cmp9 = icmp sgt i32 %n, 0
1359 br i1 %cmp9, label %for.body, label %for.end
1361 for.body: ; preds = %entry, %for.body
1362 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1363 %arrayidx = getelementptr inbounds i64, ptr %y, i64 %indvars.iv
1364 %0 = load i64, ptr %arrayidx, align 8
1365 %call = tail call i64 @llvm.abs.i64(i64 %0, i1 true)
1366 %arrayidx4 = getelementptr inbounds i64, ptr %x, i64 %indvars.iv
1367 store i64 %call, ptr %arrayidx4, align 8
1368 %indvars.iv.next = add i64 %indvars.iv, 1
1369 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1370 %exitcond = icmp eq i32 %lftr.wideiv, %n
1371 br i1 %exitcond, label %for.end, label %for.body
1373 for.end: ; preds = %for.body, %entry
1377 declare i32 @llvm.smin.i32 (i32, i32)
1379 define void @smin_i32(i32 %n, ptr %x, ptr %y) {
1380 ; CHECK-LABEL: @smin_i32(
1381 ; CHECK: call <4 x i32> @llvm.smin.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1385 %cmp = icmp sgt i32 %n, 0
1386 br i1 %cmp, label %loop, label %end
1389 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1390 %xi = getelementptr inbounds i32, ptr %x, i32 %iv
1391 %yi = getelementptr inbounds i32, ptr %y, i32 %iv
1392 %xld = load i32, ptr %xi, align 4
1393 %yld = load i32, ptr %yi, align 4
1394 %call = tail call i32 @llvm.smin.i32(i32 %xld, i32 %yld)
1395 store i32 %call, ptr %xi, align 4
1396 %iv.next = add i32 %iv, 1
1397 %exitcond = icmp eq i32 %iv.next, %n
1398 br i1 %exitcond, label %end, label %loop
1404 declare i32 @llvm.smax.i32 (i32, i32)
1406 define void @smax_i32(i32 %n, ptr %x, ptr %y) {
1407 ; CHECK-LABEL: @smax_i32(
1408 ; CHECK: call <4 x i32> @llvm.smax.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1412 %cmp = icmp sgt i32 %n, 0
1413 br i1 %cmp, label %loop, label %end
1416 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1417 %xi = getelementptr inbounds i32, ptr %x, i32 %iv
1418 %yi = getelementptr inbounds i32, ptr %y, i32 %iv
1419 %xld = load i32, ptr %xi, align 4
1420 %yld = load i32, ptr %yi, align 4
1421 %call = tail call i32 @llvm.smax.i32(i32 %xld, i32 %yld)
1422 store i32 %call, ptr %xi, align 4
1423 %iv.next = add i32 %iv, 1
1424 %exitcond = icmp eq i32 %iv.next, %n
1425 br i1 %exitcond, label %end, label %loop
1431 declare i32 @llvm.umin.i32 (i32, i32)
1433 define void @umin_i32(i32 %n, ptr %x, ptr %y) {
1434 ; CHECK-LABEL: @umin_i32(
1435 ; CHECK: call <4 x i32> @llvm.umin.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1439 %cmp = icmp sgt i32 %n, 0
1440 br i1 %cmp, label %loop, label %end
1443 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1444 %xi = getelementptr inbounds i32, ptr %x, i32 %iv
1445 %yi = getelementptr inbounds i32, ptr %y, i32 %iv
1446 %xld = load i32, ptr %xi, align 4
1447 %yld = load i32, ptr %yi, align 4
1448 %call = tail call i32 @llvm.umin.i32(i32 %xld, i32 %yld)
1449 store i32 %call, ptr %xi, align 4
1450 %iv.next = add i32 %iv, 1
1451 %exitcond = icmp eq i32 %iv.next, %n
1452 br i1 %exitcond, label %end, label %loop
1458 declare i32 @llvm.umax.i32 (i32, i32)
1460 define void @umax_i32(i32 %n, ptr %x, ptr %y) {
1461 ; CHECK-LABEL: @umax_i32(
1462 ; CHECK: call <4 x i32> @llvm.umax.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1466 %cmp = icmp sgt i32 %n, 0
1467 br i1 %cmp, label %loop, label %end
1470 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1471 %xi = getelementptr inbounds i32, ptr %x, i32 %iv
1472 %yi = getelementptr inbounds i32, ptr %y, i32 %iv
1473 %xld = load i32, ptr %xi, align 4
1474 %yld = load i32, ptr %yi, align 4
1475 %call = tail call i32 @llvm.umax.i32(i32 %xld, i32 %yld)
1476 store i32 %call, ptr %xi, align 4
1477 %iv.next = add i32 %iv, 1
1478 %exitcond = icmp eq i32 %iv.next, %n
1479 br i1 %exitcond, label %end, label %loop
1485 declare i32 @llvm.fshl.i32 (i32, i32, i32)
1487 define void @fshl_i32(i32 %n, ptr %x, ptr %y, i32 %shAmt) {
1488 ; CHECK-LABEL: @fshl_i32(
1489 ; CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]], <4 x i32> [[SPLAT:%.*]])
1493 %cmp = icmp sgt i32 %n, 0
1494 br i1 %cmp, label %loop, label %end
1497 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1498 %xi = getelementptr inbounds i32, ptr %x, i32 %iv
1499 %yi = getelementptr inbounds i32, ptr %y, i32 %iv
1500 %xld = load i32, ptr %xi, align 4
1501 %yld = load i32, ptr %yi, align 4
1502 %call = tail call i32 @llvm.fshl.i32(i32 %xld, i32 %yld, i32 %shAmt)
1503 store i32 %call, ptr %xi, align 4
1504 %iv.next = add i32 %iv, 1
1505 %exitcond = icmp eq i32 %iv.next, %n
1506 br i1 %exitcond, label %end, label %loop
1512 declare i32 @llvm.fshr.i32 (i32, i32, i32)
1514 define void @fshr_i32(i32 %n, ptr %x, ptr %y, i32 %shAmt) {
1515 ; CHECK-LABEL: @fshr_i32(
1516 ; CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]], <4 x i32> [[SPLAT:%.*]])
1520 %cmp = icmp sgt i32 %n, 0
1521 br i1 %cmp, label %loop, label %end
1524 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1525 %xi = getelementptr inbounds i32, ptr %x, i32 %iv
1526 %yi = getelementptr inbounds i32, ptr %y, i32 %iv
1527 %xld = load i32, ptr %xi, align 4
1528 %yld = load i32, ptr %yi, align 4
1529 %call = tail call i32 @llvm.fshr.i32(i32 %xld, i32 %yld, i32 %shAmt)
1530 store i32 %call, ptr %xi, align 4
1531 %iv.next = add i32 %iv, 1
1532 %exitcond = icmp eq i32 %iv.next, %n
1533 br i1 %exitcond, label %end, label %loop
1539 declare float @llvm.minnum.f32(float, float)
1541 define void @minnum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {
1542 ; CHECK-LABEL: @minnum_f32(
1543 ; CHECK: llvm.minnum.v4f32
1547 %cmp9 = icmp sgt i32 %n, 0
1548 br i1 %cmp9, label %for.body, label %for.end
1550 for.body: ; preds = %entry, %for.body
1551 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1552 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
1553 %0 = load float, ptr %arrayidx, align 4
1554 %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
1555 %1 = load float, ptr %arrayidx2, align 4
1556 %call = tail call float @llvm.minnum.f32(float %0, float %1)
1557 %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1558 store float %call, ptr %arrayidx4, align 4
1559 %indvars.iv.next = add i64 %indvars.iv, 1
1560 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1561 %exitcond = icmp eq i32 %lftr.wideiv, %n
1562 br i1 %exitcond, label %for.end, label %for.body
1564 for.end: ; preds = %for.body, %entry
1568 declare float @llvm.maxnum.f32(float, float)
1570 define void @maxnum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {
1571 ; CHECK-LABEL: @maxnum_f32(
1572 ; CHECK: llvm.maxnum.v4f32
1576 %cmp9 = icmp sgt i32 %n, 0
1577 br i1 %cmp9, label %for.body, label %for.end
1579 for.body: ; preds = %entry, %for.body
1580 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1581 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
1582 %0 = load float, ptr %arrayidx, align 4
1583 %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
1584 %1 = load float, ptr %arrayidx2, align 4
1585 %call = tail call float @llvm.maxnum.f32(float %0, float %1)
1586 %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1587 store float %call, ptr %arrayidx4, align 4
1588 %indvars.iv.next = add i64 %indvars.iv, 1
1589 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1590 %exitcond = icmp eq i32 %lftr.wideiv, %n
1591 br i1 %exitcond, label %for.end, label %for.body
1593 for.end: ; preds = %for.body, %entry
1597 declare float @llvm.minimum.f32(float, float)
1599 define void @minimum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {
1600 ; CHECK-LABEL: @minimum_f32(
1601 ; CHECK: llvm.minimum.v4f32
1605 %cmp9 = icmp sgt i32 %n, 0
1606 br i1 %cmp9, label %for.body, label %for.end
1608 for.body: ; preds = %entry, %for.body
1609 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1610 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
1611 %0 = load float, ptr %arrayidx, align 4
1612 %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
1613 %1 = load float, ptr %arrayidx2, align 4
1614 %call = tail call float @llvm.minimum.f32(float %0, float %1)
1615 %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1616 store float %call, ptr %arrayidx4, align 4
1617 %indvars.iv.next = add i64 %indvars.iv, 1
1618 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1619 %exitcond = icmp eq i32 %lftr.wideiv, %n
1620 br i1 %exitcond, label %for.end, label %for.body
1622 for.end: ; preds = %for.body, %entry
1626 declare float @llvm.maximum.f32(float, float)
1628 define void @maximum_f32(i32 %n, ptr %y, ptr %x, ptr %z) {
1629 ; CHECK-LABEL: @maximum_f32(
1630 ; CHECK: llvm.maximum.v4f32
1634 %cmp9 = icmp sgt i32 %n, 0
1635 br i1 %cmp9, label %for.body, label %for.end
1637 for.body: ; preds = %entry, %for.body
1638 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1639 %arrayidx = getelementptr inbounds float, ptr %y, i64 %indvars.iv
1640 %0 = load float, ptr %arrayidx, align 4
1641 %arrayidx2 = getelementptr inbounds float, ptr %z, i64 %indvars.iv
1642 %1 = load float, ptr %arrayidx2, align 4
1643 %call = tail call float @llvm.maximum.f32(float %0, float %1)
1644 %arrayidx4 = getelementptr inbounds float, ptr %x, i64 %indvars.iv
1645 store float %call, ptr %arrayidx4, align 4
1646 %indvars.iv.next = add i64 %indvars.iv, 1
1647 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1648 %exitcond = icmp eq i32 %lftr.wideiv, %n
1649 br i1 %exitcond, label %for.end, label %for.body
1651 for.end: ; preds = %for.body, %entry
1655 declare i32 @llvm.lrint.i32.f32(float)
1657 define void @lrint_i32_f32(ptr %x, ptr %y, i64 %n) {
1658 ; CHECK-LABEL: @lrint_i32_f32(
1659 ; CHECK: llvm.lrint.v4i32.v4f32
1663 %cmp = icmp sgt i64 %n, 0
1664 br i1 %cmp, label %for.body, label %exit
1666 for.body: ; preds = %entry, %for.body
1667 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1668 %gep.load = getelementptr inbounds float, ptr %x, i64 %iv
1669 %0 = load float, ptr %gep.load, align 4
1670 %1 = tail call i32 @llvm.lrint.i32.f32(float %0)
1671 %gep.store = getelementptr inbounds i32, ptr %y, i64 %iv
1672 store i32 %1, ptr %gep.store, align 4
1673 %iv.next = add nuw nsw i64 %iv, 1
1674 %exitcond = icmp eq i64 %iv.next, %n
1675 br i1 %exitcond, label %exit, label %for.body
1677 exit: ; preds = %for.body, %entry
1681 declare i64 @llvm.llrint.i64.f32(float)
1683 define void @llrint_i64_f32(ptr %x, ptr %y, i64 %n) {
1684 ; CHECK-LABEL: @llrint_i64_f32(
1685 ; CHECK: llvm.llrint.v4i64.v4f32
1689 %cmp = icmp sgt i64 %n, 0
1690 br i1 %cmp, label %for.body, label %exit
1692 for.body: ; preds = %entry, %for.body
1693 %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
1694 %gep.load = getelementptr inbounds float, ptr %x, i64 %iv
1695 %0 = load float, ptr %gep.load, align 4
1696 %1 = tail call i64 @llvm.llrint.i64.f32(float %0)
1697 %gep.store = getelementptr inbounds i64, ptr %y, i64 %iv
1698 store i64 %1, ptr %gep.store, align 4
1699 %iv.next = add nuw nsw i64 %iv, 1
1700 %exitcond = icmp eq i64 %iv.next, %n
1701 br i1 %exitcond, label %exit, label %for.body
1703 exit: ; preds = %for.body, %entry