1 ; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -S | FileCheck %s
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
5 ;CHECK-LABEL: @sqrt_f32(
6 ;CHECK: llvm.sqrt.v4f32
8 define void @sqrt_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
10 %cmp6 = icmp sgt i32 %n, 0
11 br i1 %cmp6, label %for.body, label %for.end
13 for.body: ; preds = %entry, %for.body
14 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
15 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
16 %0 = load float, float* %arrayidx, align 4
17 %call = tail call float @llvm.sqrt.f32(float %0) nounwind readnone
18 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
19 store float %call, float* %arrayidx2, align 4
20 %indvars.iv.next = add i64 %indvars.iv, 1
21 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
22 %exitcond = icmp eq i32 %lftr.wideiv, %n
23 br i1 %exitcond, label %for.end, label %for.body
25 for.end: ; preds = %for.body, %entry
29 declare float @llvm.sqrt.f32(float) nounwind readnone
31 ;CHECK-LABEL: @sqrt_f64(
32 ;CHECK: llvm.sqrt.v4f64
34 define void @sqrt_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
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, double* %y, i64 %indvars.iv
42 %0 = load double, double* %arrayidx, align 8
43 %call = tail call double @llvm.sqrt.f64(double %0) nounwind readnone
44 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
45 store double %call, double* %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) nounwind readnone
57 ;CHECK-LABEL: @sin_f32(
58 ;CHECK: llvm.sin.v4f32
60 define void @sin_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
62 %cmp6 = icmp sgt i32 %n, 0
63 br i1 %cmp6, label %for.body, label %for.end
65 for.body: ; preds = %entry, %for.body
66 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
67 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
68 %0 = load float, float* %arrayidx, align 4
69 %call = tail call float @llvm.sin.f32(float %0) nounwind readnone
70 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
71 store float %call, float* %arrayidx2, align 4
72 %indvars.iv.next = add i64 %indvars.iv, 1
73 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
74 %exitcond = icmp eq i32 %lftr.wideiv, %n
75 br i1 %exitcond, label %for.end, label %for.body
77 for.end: ; preds = %for.body, %entry
81 declare float @llvm.sin.f32(float) nounwind readnone
83 ;CHECK-LABEL: @sin_f64(
84 ;CHECK: llvm.sin.v4f64
86 define void @sin_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
88 %cmp6 = icmp sgt i32 %n, 0
89 br i1 %cmp6, label %for.body, label %for.end
91 for.body: ; preds = %entry, %for.body
92 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
93 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
94 %0 = load double, double* %arrayidx, align 8
95 %call = tail call double @llvm.sin.f64(double %0) nounwind readnone
96 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
97 store double %call, double* %arrayidx2, align 8
98 %indvars.iv.next = add i64 %indvars.iv, 1
99 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
100 %exitcond = icmp eq i32 %lftr.wideiv, %n
101 br i1 %exitcond, label %for.end, label %for.body
103 for.end: ; preds = %for.body, %entry
107 declare double @llvm.sin.f64(double) nounwind readnone
109 ;CHECK-LABEL: @cos_f32(
110 ;CHECK: llvm.cos.v4f32
112 define void @cos_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
114 %cmp6 = icmp sgt i32 %n, 0
115 br i1 %cmp6, label %for.body, label %for.end
117 for.body: ; preds = %entry, %for.body
118 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
119 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
120 %0 = load float, float* %arrayidx, align 4
121 %call = tail call float @llvm.cos.f32(float %0) nounwind readnone
122 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
123 store float %call, float* %arrayidx2, align 4
124 %indvars.iv.next = add i64 %indvars.iv, 1
125 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
126 %exitcond = icmp eq i32 %lftr.wideiv, %n
127 br i1 %exitcond, label %for.end, label %for.body
129 for.end: ; preds = %for.body, %entry
133 declare float @llvm.cos.f32(float) nounwind readnone
135 ;CHECK-LABEL: @cos_f64(
136 ;CHECK: llvm.cos.v4f64
138 define void @cos_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
140 %cmp6 = icmp sgt i32 %n, 0
141 br i1 %cmp6, label %for.body, label %for.end
143 for.body: ; preds = %entry, %for.body
144 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
145 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
146 %0 = load double, double* %arrayidx, align 8
147 %call = tail call double @llvm.cos.f64(double %0) nounwind readnone
148 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
149 store double %call, double* %arrayidx2, align 8
150 %indvars.iv.next = add i64 %indvars.iv, 1
151 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
152 %exitcond = icmp eq i32 %lftr.wideiv, %n
153 br i1 %exitcond, label %for.end, label %for.body
155 for.end: ; preds = %for.body, %entry
159 declare double @llvm.cos.f64(double) nounwind readnone
161 ;CHECK-LABEL: @exp_f32(
162 ;CHECK: llvm.exp.v4f32
164 define void @exp_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
166 %cmp6 = icmp sgt i32 %n, 0
167 br i1 %cmp6, label %for.body, label %for.end
169 for.body: ; preds = %entry, %for.body
170 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
171 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
172 %0 = load float, float* %arrayidx, align 4
173 %call = tail call float @llvm.exp.f32(float %0) nounwind readnone
174 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
175 store float %call, float* %arrayidx2, align 4
176 %indvars.iv.next = add i64 %indvars.iv, 1
177 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
178 %exitcond = icmp eq i32 %lftr.wideiv, %n
179 br i1 %exitcond, label %for.end, label %for.body
181 for.end: ; preds = %for.body, %entry
185 declare float @llvm.exp.f32(float) nounwind readnone
187 ;CHECK-LABEL: @exp_f64(
188 ;CHECK: llvm.exp.v4f64
190 define void @exp_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
192 %cmp6 = icmp sgt i32 %n, 0
193 br i1 %cmp6, label %for.body, label %for.end
195 for.body: ; preds = %entry, %for.body
196 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
197 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
198 %0 = load double, double* %arrayidx, align 8
199 %call = tail call double @llvm.exp.f64(double %0) nounwind readnone
200 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
201 store double %call, double* %arrayidx2, align 8
202 %indvars.iv.next = add i64 %indvars.iv, 1
203 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
204 %exitcond = icmp eq i32 %lftr.wideiv, %n
205 br i1 %exitcond, label %for.end, label %for.body
207 for.end: ; preds = %for.body, %entry
211 declare double @llvm.exp.f64(double) nounwind readnone
213 ;CHECK-LABEL: @exp2_f32(
214 ;CHECK: llvm.exp2.v4f32
216 define void @exp2_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
218 %cmp6 = icmp sgt i32 %n, 0
219 br i1 %cmp6, label %for.body, label %for.end
221 for.body: ; preds = %entry, %for.body
222 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
223 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
224 %0 = load float, float* %arrayidx, align 4
225 %call = tail call float @llvm.exp2.f32(float %0) nounwind readnone
226 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
227 store float %call, float* %arrayidx2, align 4
228 %indvars.iv.next = add i64 %indvars.iv, 1
229 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
230 %exitcond = icmp eq i32 %lftr.wideiv, %n
231 br i1 %exitcond, label %for.end, label %for.body
233 for.end: ; preds = %for.body, %entry
237 declare float @llvm.exp2.f32(float) nounwind readnone
239 ;CHECK-LABEL: @exp2_f64(
240 ;CHECK: llvm.exp2.v4f64
242 define void @exp2_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
244 %cmp6 = icmp sgt i32 %n, 0
245 br i1 %cmp6, label %for.body, label %for.end
247 for.body: ; preds = %entry, %for.body
248 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
249 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
250 %0 = load double, double* %arrayidx, align 8
251 %call = tail call double @llvm.exp2.f64(double %0) nounwind readnone
252 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
253 store double %call, double* %arrayidx2, align 8
254 %indvars.iv.next = add i64 %indvars.iv, 1
255 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
256 %exitcond = icmp eq i32 %lftr.wideiv, %n
257 br i1 %exitcond, label %for.end, label %for.body
259 for.end: ; preds = %for.body, %entry
263 declare double @llvm.exp2.f64(double) nounwind readnone
265 ;CHECK-LABEL: @log_f32(
266 ;CHECK: llvm.log.v4f32
268 define void @log_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
270 %cmp6 = icmp sgt i32 %n, 0
271 br i1 %cmp6, label %for.body, label %for.end
273 for.body: ; preds = %entry, %for.body
274 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
275 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
276 %0 = load float, float* %arrayidx, align 4
277 %call = tail call float @llvm.log.f32(float %0) nounwind readnone
278 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
279 store float %call, float* %arrayidx2, align 4
280 %indvars.iv.next = add i64 %indvars.iv, 1
281 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
282 %exitcond = icmp eq i32 %lftr.wideiv, %n
283 br i1 %exitcond, label %for.end, label %for.body
285 for.end: ; preds = %for.body, %entry
289 declare float @llvm.log.f32(float) nounwind readnone
291 ;CHECK-LABEL: @log_f64(
292 ;CHECK: llvm.log.v4f64
294 define void @log_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
296 %cmp6 = icmp sgt i32 %n, 0
297 br i1 %cmp6, label %for.body, label %for.end
299 for.body: ; preds = %entry, %for.body
300 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
301 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
302 %0 = load double, double* %arrayidx, align 8
303 %call = tail call double @llvm.log.f64(double %0) nounwind readnone
304 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
305 store double %call, double* %arrayidx2, align 8
306 %indvars.iv.next = add i64 %indvars.iv, 1
307 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
308 %exitcond = icmp eq i32 %lftr.wideiv, %n
309 br i1 %exitcond, label %for.end, label %for.body
311 for.end: ; preds = %for.body, %entry
315 declare double @llvm.log.f64(double) nounwind readnone
317 ;CHECK-LABEL: @log10_f32(
318 ;CHECK: llvm.log10.v4f32
320 define void @log10_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
322 %cmp6 = icmp sgt i32 %n, 0
323 br i1 %cmp6, label %for.body, label %for.end
325 for.body: ; preds = %entry, %for.body
326 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
327 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
328 %0 = load float, float* %arrayidx, align 4
329 %call = tail call float @llvm.log10.f32(float %0) nounwind readnone
330 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
331 store float %call, float* %arrayidx2, align 4
332 %indvars.iv.next = add i64 %indvars.iv, 1
333 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
334 %exitcond = icmp eq i32 %lftr.wideiv, %n
335 br i1 %exitcond, label %for.end, label %for.body
337 for.end: ; preds = %for.body, %entry
341 declare float @llvm.log10.f32(float) nounwind readnone
343 ;CHECK-LABEL: @log10_f64(
344 ;CHECK: llvm.log10.v4f64
346 define void @log10_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
348 %cmp6 = icmp sgt i32 %n, 0
349 br i1 %cmp6, label %for.body, label %for.end
351 for.body: ; preds = %entry, %for.body
352 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
353 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
354 %0 = load double, double* %arrayidx, align 8
355 %call = tail call double @llvm.log10.f64(double %0) nounwind readnone
356 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
357 store double %call, double* %arrayidx2, align 8
358 %indvars.iv.next = add i64 %indvars.iv, 1
359 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
360 %exitcond = icmp eq i32 %lftr.wideiv, %n
361 br i1 %exitcond, label %for.end, label %for.body
363 for.end: ; preds = %for.body, %entry
367 declare double @llvm.log10.f64(double) nounwind readnone
369 ;CHECK-LABEL: @log2_f32(
370 ;CHECK: llvm.log2.v4f32
372 define void @log2_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
374 %cmp6 = icmp sgt i32 %n, 0
375 br i1 %cmp6, label %for.body, label %for.end
377 for.body: ; preds = %entry, %for.body
378 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
379 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
380 %0 = load float, float* %arrayidx, align 4
381 %call = tail call float @llvm.log2.f32(float %0) nounwind readnone
382 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
383 store float %call, float* %arrayidx2, align 4
384 %indvars.iv.next = add i64 %indvars.iv, 1
385 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
386 %exitcond = icmp eq i32 %lftr.wideiv, %n
387 br i1 %exitcond, label %for.end, label %for.body
389 for.end: ; preds = %for.body, %entry
393 declare float @llvm.log2.f32(float) nounwind readnone
395 ;CHECK-LABEL: @log2_f64(
396 ;CHECK: llvm.log2.v4f64
398 define void @log2_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
400 %cmp6 = icmp sgt i32 %n, 0
401 br i1 %cmp6, label %for.body, label %for.end
403 for.body: ; preds = %entry, %for.body
404 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
405 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
406 %0 = load double, double* %arrayidx, align 8
407 %call = tail call double @llvm.log2.f64(double %0) nounwind readnone
408 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
409 store double %call, double* %arrayidx2, align 8
410 %indvars.iv.next = add i64 %indvars.iv, 1
411 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
412 %exitcond = icmp eq i32 %lftr.wideiv, %n
413 br i1 %exitcond, label %for.end, label %for.body
415 for.end: ; preds = %for.body, %entry
419 declare double @llvm.log2.f64(double) nounwind readnone
421 ;CHECK-LABEL: @fabs_f32(
422 ;CHECK: llvm.fabs.v4f32
424 define void @fabs_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
426 %cmp6 = icmp sgt i32 %n, 0
427 br i1 %cmp6, label %for.body, label %for.end
429 for.body: ; preds = %entry, %for.body
430 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
431 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
432 %0 = load float, float* %arrayidx, align 4
433 %call = tail call float @llvm.fabs.f32(float %0) nounwind readnone
434 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
435 store float %call, float* %arrayidx2, align 4
436 %indvars.iv.next = add i64 %indvars.iv, 1
437 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
438 %exitcond = icmp eq i32 %lftr.wideiv, %n
439 br i1 %exitcond, label %for.end, label %for.body
441 for.end: ; preds = %for.body, %entry
445 declare float @llvm.fabs.f32(float) nounwind readnone
447 define void @fabs_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
449 %cmp6 = icmp sgt i32 %n, 0
450 br i1 %cmp6, label %for.body, label %for.end
452 for.body: ; preds = %entry, %for.body
453 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
454 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
455 %0 = load double, double* %arrayidx, align 8
456 %call = tail call double @llvm.fabs(double %0) nounwind readnone
457 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
458 store double %call, double* %arrayidx2, align 8
459 %indvars.iv.next = add i64 %indvars.iv, 1
460 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
461 %exitcond = icmp eq i32 %lftr.wideiv, %n
462 br i1 %exitcond, label %for.end, label %for.body
464 for.end: ; preds = %for.body, %entry
468 declare double @llvm.fabs(double) nounwind readnone
470 ;CHECK-LABEL: @copysign_f32(
471 ;CHECK: llvm.copysign.v4f32
473 define void @copysign_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
475 %cmp6 = icmp sgt i32 %n, 0
476 br i1 %cmp6, label %for.body, label %for.end
478 for.body: ; preds = %entry, %for.body
479 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
480 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
481 %0 = load float, float* %arrayidx, align 4
482 %arrayidx1 = getelementptr inbounds float, float* %z, i64 %indvars.iv
483 %1 = load float, float* %arrayidx1, align 4
484 %call = tail call float @llvm.copysign.f32(float %0, float %1) nounwind readnone
485 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
486 store float %call, float* %arrayidx2, align 4
487 %indvars.iv.next = add i64 %indvars.iv, 1
488 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
489 %exitcond = icmp eq i32 %lftr.wideiv, %n
490 br i1 %exitcond, label %for.end, label %for.body
492 for.end: ; preds = %for.body, %entry
496 declare float @llvm.copysign.f32(float, float) nounwind readnone
498 define void @copysign_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z) nounwind uwtable {
500 %cmp6 = icmp sgt i32 %n, 0
501 br i1 %cmp6, label %for.body, label %for.end
503 for.body: ; preds = %entry, %for.body
504 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
505 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
506 %0 = load double, double* %arrayidx, align 8
507 %arrayidx1 = getelementptr inbounds double, double* %z, i64 %indvars.iv
508 %1 = load double, double* %arrayidx, align 8
509 %call = tail call double @llvm.copysign(double %0, double %1) nounwind readnone
510 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
511 store double %call, double* %arrayidx2, align 8
512 %indvars.iv.next = add i64 %indvars.iv, 1
513 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
514 %exitcond = icmp eq i32 %lftr.wideiv, %n
515 br i1 %exitcond, label %for.end, label %for.body
517 for.end: ; preds = %for.body, %entry
521 declare double @llvm.copysign(double, double) nounwind readnone
523 ;CHECK-LABEL: @floor_f32(
524 ;CHECK: llvm.floor.v4f32
526 define void @floor_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
528 %cmp6 = icmp sgt i32 %n, 0
529 br i1 %cmp6, label %for.body, label %for.end
531 for.body: ; preds = %entry, %for.body
532 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
533 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
534 %0 = load float, float* %arrayidx, align 4
535 %call = tail call float @llvm.floor.f32(float %0) nounwind readnone
536 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
537 store float %call, float* %arrayidx2, align 4
538 %indvars.iv.next = add i64 %indvars.iv, 1
539 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
540 %exitcond = icmp eq i32 %lftr.wideiv, %n
541 br i1 %exitcond, label %for.end, label %for.body
543 for.end: ; preds = %for.body, %entry
547 declare float @llvm.floor.f32(float) nounwind readnone
549 ;CHECK-LABEL: @floor_f64(
550 ;CHECK: llvm.floor.v4f64
552 define void @floor_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
554 %cmp6 = icmp sgt i32 %n, 0
555 br i1 %cmp6, label %for.body, label %for.end
557 for.body: ; preds = %entry, %for.body
558 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
559 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
560 %0 = load double, double* %arrayidx, align 8
561 %call = tail call double @llvm.floor.f64(double %0) nounwind readnone
562 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
563 store double %call, double* %arrayidx2, align 8
564 %indvars.iv.next = add i64 %indvars.iv, 1
565 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
566 %exitcond = icmp eq i32 %lftr.wideiv, %n
567 br i1 %exitcond, label %for.end, label %for.body
569 for.end: ; preds = %for.body, %entry
573 declare double @llvm.floor.f64(double) nounwind readnone
575 ;CHECK-LABEL: @ceil_f32(
576 ;CHECK: llvm.ceil.v4f32
578 define void @ceil_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
580 %cmp6 = icmp sgt i32 %n, 0
581 br i1 %cmp6, label %for.body, label %for.end
583 for.body: ; preds = %entry, %for.body
584 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
585 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
586 %0 = load float, float* %arrayidx, align 4
587 %call = tail call float @llvm.ceil.f32(float %0) nounwind readnone
588 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
589 store float %call, float* %arrayidx2, align 4
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 float @llvm.ceil.f32(float) nounwind readnone
601 ;CHECK-LABEL: @ceil_f64(
602 ;CHECK: llvm.ceil.v4f64
604 define void @ceil_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
606 %cmp6 = icmp sgt i32 %n, 0
607 br i1 %cmp6, label %for.body, label %for.end
609 for.body: ; preds = %entry, %for.body
610 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
611 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
612 %0 = load double, double* %arrayidx, align 8
613 %call = tail call double @llvm.ceil.f64(double %0) nounwind readnone
614 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
615 store double %call, double* %arrayidx2, align 8
616 %indvars.iv.next = add i64 %indvars.iv, 1
617 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
618 %exitcond = icmp eq i32 %lftr.wideiv, %n
619 br i1 %exitcond, label %for.end, label %for.body
621 for.end: ; preds = %for.body, %entry
625 declare double @llvm.ceil.f64(double) nounwind readnone
627 ;CHECK-LABEL: @trunc_f32(
628 ;CHECK: llvm.trunc.v4f32
630 define void @trunc_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
632 %cmp6 = icmp sgt i32 %n, 0
633 br i1 %cmp6, label %for.body, label %for.end
635 for.body: ; preds = %entry, %for.body
636 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
637 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
638 %0 = load float, float* %arrayidx, align 4
639 %call = tail call float @llvm.trunc.f32(float %0) nounwind readnone
640 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
641 store float %call, float* %arrayidx2, align 4
642 %indvars.iv.next = add i64 %indvars.iv, 1
643 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
644 %exitcond = icmp eq i32 %lftr.wideiv, %n
645 br i1 %exitcond, label %for.end, label %for.body
647 for.end: ; preds = %for.body, %entry
651 declare float @llvm.trunc.f32(float) nounwind readnone
653 ;CHECK-LABEL: @trunc_f64(
654 ;CHECK: llvm.trunc.v4f64
656 define void @trunc_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
658 %cmp6 = icmp sgt i32 %n, 0
659 br i1 %cmp6, label %for.body, label %for.end
661 for.body: ; preds = %entry, %for.body
662 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
663 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
664 %0 = load double, double* %arrayidx, align 8
665 %call = tail call double @llvm.trunc.f64(double %0) nounwind readnone
666 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
667 store double %call, double* %arrayidx2, align 8
668 %indvars.iv.next = add i64 %indvars.iv, 1
669 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
670 %exitcond = icmp eq i32 %lftr.wideiv, %n
671 br i1 %exitcond, label %for.end, label %for.body
673 for.end: ; preds = %for.body, %entry
677 declare double @llvm.trunc.f64(double) nounwind readnone
679 ;CHECK-LABEL: @rint_f32(
680 ;CHECK: llvm.rint.v4f32
682 define void @rint_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
684 %cmp6 = icmp sgt i32 %n, 0
685 br i1 %cmp6, label %for.body, label %for.end
687 for.body: ; preds = %entry, %for.body
688 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
689 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
690 %0 = load float, float* %arrayidx, align 4
691 %call = tail call float @llvm.rint.f32(float %0) nounwind readnone
692 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
693 store float %call, float* %arrayidx2, align 4
694 %indvars.iv.next = add i64 %indvars.iv, 1
695 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
696 %exitcond = icmp eq i32 %lftr.wideiv, %n
697 br i1 %exitcond, label %for.end, label %for.body
699 for.end: ; preds = %for.body, %entry
703 declare float @llvm.rint.f32(float) nounwind readnone
705 ;CHECK-LABEL: @rint_f64(
706 ;CHECK: llvm.rint.v4f64
708 define void @rint_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
710 %cmp6 = icmp sgt i32 %n, 0
711 br i1 %cmp6, label %for.body, label %for.end
713 for.body: ; preds = %entry, %for.body
714 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
715 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
716 %0 = load double, double* %arrayidx, align 8
717 %call = tail call double @llvm.rint.f64(double %0) nounwind readnone
718 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
719 store double %call, double* %arrayidx2, align 8
720 %indvars.iv.next = add i64 %indvars.iv, 1
721 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
722 %exitcond = icmp eq i32 %lftr.wideiv, %n
723 br i1 %exitcond, label %for.end, label %for.body
725 for.end: ; preds = %for.body, %entry
729 declare double @llvm.rint.f64(double) nounwind readnone
731 ;CHECK-LABEL: @nearbyint_f32(
732 ;CHECK: llvm.nearbyint.v4f32
734 define void @nearbyint_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
736 %cmp6 = icmp sgt i32 %n, 0
737 br i1 %cmp6, label %for.body, label %for.end
739 for.body: ; preds = %entry, %for.body
740 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
741 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
742 %0 = load float, float* %arrayidx, align 4
743 %call = tail call float @llvm.nearbyint.f32(float %0) nounwind readnone
744 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
745 store float %call, float* %arrayidx2, align 4
746 %indvars.iv.next = add i64 %indvars.iv, 1
747 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
748 %exitcond = icmp eq i32 %lftr.wideiv, %n
749 br i1 %exitcond, label %for.end, label %for.body
751 for.end: ; preds = %for.body, %entry
755 declare float @llvm.nearbyint.f32(float) nounwind readnone
757 ;CHECK-LABEL: @nearbyint_f64(
758 ;CHECK: llvm.nearbyint.v4f64
760 define void @nearbyint_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
762 %cmp6 = icmp sgt i32 %n, 0
763 br i1 %cmp6, label %for.body, label %for.end
765 for.body: ; preds = %entry, %for.body
766 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
767 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
768 %0 = load double, double* %arrayidx, align 8
769 %call = tail call double @llvm.nearbyint.f64(double %0) nounwind readnone
770 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
771 store double %call, double* %arrayidx2, align 8
772 %indvars.iv.next = add i64 %indvars.iv, 1
773 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
774 %exitcond = icmp eq i32 %lftr.wideiv, %n
775 br i1 %exitcond, label %for.end, label %for.body
777 for.end: ; preds = %for.body, %entry
781 declare double @llvm.nearbyint.f64(double) nounwind readnone
783 ;CHECK-LABEL: @round_f32(
784 ;CHECK: llvm.round.v4f32
786 define void @round_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
788 %cmp6 = icmp sgt i32 %n, 0
789 br i1 %cmp6, label %for.body, label %for.end
791 for.body: ; preds = %entry, %for.body
792 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
793 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
794 %0 = load float, float* %arrayidx, align 4
795 %call = tail call float @llvm.round.f32(float %0) nounwind readnone
796 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
797 store float %call, float* %arrayidx2, align 4
798 %indvars.iv.next = add i64 %indvars.iv, 1
799 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
800 %exitcond = icmp eq i32 %lftr.wideiv, %n
801 br i1 %exitcond, label %for.end, label %for.body
803 for.end: ; preds = %for.body, %entry
807 declare float @llvm.round.f32(float) nounwind readnone
809 ;CHECK-LABEL: @round_f64(
810 ;CHECK: llvm.round.v4f64
812 define void @round_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
814 %cmp6 = icmp sgt i32 %n, 0
815 br i1 %cmp6, label %for.body, label %for.end
817 for.body: ; preds = %entry, %for.body
818 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
819 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
820 %0 = load double, double* %arrayidx, align 8
821 %call = tail call double @llvm.round.f64(double %0) nounwind readnone
822 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
823 store double %call, double* %arrayidx2, align 8
824 %indvars.iv.next = add i64 %indvars.iv, 1
825 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
826 %exitcond = icmp eq i32 %lftr.wideiv, %n
827 br i1 %exitcond, label %for.end, label %for.body
829 for.end: ; preds = %for.body, %entry
833 declare double @llvm.round.f64(double) nounwind readnone
835 ;CHECK-LABEL: @roundeven_f32(
836 ;CHECK: llvm.roundeven.v4f32
838 define void @roundeven_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
840 %cmp6 = icmp sgt i32 %n, 0
841 br i1 %cmp6, label %for.body, label %for.end
843 for.body: ; preds = %entry, %for.body
844 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
845 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
846 %0 = load float, float* %arrayidx, align 4
847 %call = tail call float @llvm.roundeven.f32(float %0) nounwind readnone
848 %arrayidx2 = getelementptr inbounds float, float* %x, i64 %indvars.iv
849 store float %call, float* %arrayidx2, align 4
850 %indvars.iv.next = add i64 %indvars.iv, 1
851 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
852 %exitcond = icmp eq i32 %lftr.wideiv, %n
853 br i1 %exitcond, label %for.end, label %for.body
855 for.end: ; preds = %for.body, %entry
859 declare float @llvm.roundeven.f32(float) nounwind readnone
861 ;CHECK-LABEL: @roundeven_f64(
862 ;CHECK: llvm.roundeven.v4f64
864 define void @roundeven_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
866 %cmp6 = icmp sgt i32 %n, 0
867 br i1 %cmp6, label %for.body, label %for.end
869 for.body: ; preds = %entry, %for.body
870 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
871 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
872 %0 = load double, double* %arrayidx, align 8
873 %call = tail call double @llvm.roundeven.f64(double %0) nounwind readnone
874 %arrayidx2 = getelementptr inbounds double, double* %x, i64 %indvars.iv
875 store double %call, double* %arrayidx2, align 8
876 %indvars.iv.next = add i64 %indvars.iv, 1
877 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
878 %exitcond = icmp eq i32 %lftr.wideiv, %n
879 br i1 %exitcond, label %for.end, label %for.body
881 for.end: ; preds = %for.body, %entry
885 declare double @llvm.roundeven.f64(double) nounwind readnone
887 ;CHECK-LABEL: @fma_f32(
888 ;CHECK: llvm.fma.v4f32
890 define void @fma_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z, float* noalias %w) nounwind uwtable {
892 %cmp12 = icmp sgt i32 %n, 0
893 br i1 %cmp12, label %for.body, label %for.end
895 for.body: ; preds = %entry, %for.body
896 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
897 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
898 %0 = load float, float* %arrayidx, align 4
899 %arrayidx2 = getelementptr inbounds float, float* %w, i64 %indvars.iv
900 %1 = load float, float* %arrayidx2, align 4
901 %arrayidx4 = getelementptr inbounds float, float* %z, i64 %indvars.iv
902 %2 = load float, float* %arrayidx4, align 4
903 %3 = tail call float @llvm.fma.f32(float %0, float %2, float %1)
904 %arrayidx6 = getelementptr inbounds float, float* %x, i64 %indvars.iv
905 store float %3, float* %arrayidx6, align 4
906 %indvars.iv.next = add i64 %indvars.iv, 1
907 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
908 %exitcond = icmp eq i32 %lftr.wideiv, %n
909 br i1 %exitcond, label %for.end, label %for.body
911 for.end: ; preds = %for.body, %entry
915 declare float @llvm.fma.f32(float, float, float) nounwind readnone
917 ;CHECK-LABEL: @fma_f64(
918 ;CHECK: llvm.fma.v4f64
920 define void @fma_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z, double* noalias %w) nounwind uwtable {
922 %cmp12 = icmp sgt i32 %n, 0
923 br i1 %cmp12, label %for.body, label %for.end
925 for.body: ; preds = %entry, %for.body
926 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
927 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
928 %0 = load double, double* %arrayidx, align 8
929 %arrayidx2 = getelementptr inbounds double, double* %w, i64 %indvars.iv
930 %1 = load double, double* %arrayidx2, align 8
931 %arrayidx4 = getelementptr inbounds double, double* %z, i64 %indvars.iv
932 %2 = load double, double* %arrayidx4, align 8
933 %3 = tail call double @llvm.fma.f64(double %0, double %2, double %1)
934 %arrayidx6 = getelementptr inbounds double, double* %x, i64 %indvars.iv
935 store double %3, double* %arrayidx6, align 8
936 %indvars.iv.next = add i64 %indvars.iv, 1
937 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
938 %exitcond = icmp eq i32 %lftr.wideiv, %n
939 br i1 %exitcond, label %for.end, label %for.body
941 for.end: ; preds = %for.body, %entry
945 declare double @llvm.fma.f64(double, double, double) nounwind readnone
947 ;CHECK-LABEL: @fmuladd_f32(
948 ;CHECK: llvm.fmuladd.v4f32
950 define void @fmuladd_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z, float* noalias %w) nounwind uwtable {
952 %cmp12 = icmp sgt i32 %n, 0
953 br i1 %cmp12, label %for.body, label %for.end
955 for.body: ; preds = %entry, %for.body
956 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
957 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
958 %0 = load float, float* %arrayidx, align 4
959 %arrayidx2 = getelementptr inbounds float, float* %w, i64 %indvars.iv
960 %1 = load float, float* %arrayidx2, align 4
961 %arrayidx4 = getelementptr inbounds float, float* %z, i64 %indvars.iv
962 %2 = load float, float* %arrayidx4, align 4
963 %3 = tail call float @llvm.fmuladd.f32(float %0, float %2, float %1)
964 %arrayidx6 = getelementptr inbounds float, float* %x, i64 %indvars.iv
965 store float %3, float* %arrayidx6, align 4
966 %indvars.iv.next = add i64 %indvars.iv, 1
967 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
968 %exitcond = icmp eq i32 %lftr.wideiv, %n
969 br i1 %exitcond, label %for.end, label %for.body
971 for.end: ; preds = %for.body, %entry
975 declare float @llvm.fmuladd.f32(float, float, float) nounwind readnone
977 ;CHECK-LABEL: @fmuladd_f64(
978 ;CHECK: llvm.fmuladd.v4f64
980 define void @fmuladd_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z, double* noalias %w) nounwind uwtable {
982 %cmp12 = icmp sgt i32 %n, 0
983 br i1 %cmp12, label %for.body, label %for.end
985 for.body: ; preds = %entry, %for.body
986 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
987 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
988 %0 = load double, double* %arrayidx, align 8
989 %arrayidx2 = getelementptr inbounds double, double* %w, i64 %indvars.iv
990 %1 = load double, double* %arrayidx2, align 8
991 %arrayidx4 = getelementptr inbounds double, double* %z, i64 %indvars.iv
992 %2 = load double, double* %arrayidx4, align 8
993 %3 = tail call double @llvm.fmuladd.f64(double %0, double %2, double %1)
994 %arrayidx6 = getelementptr inbounds double, double* %x, i64 %indvars.iv
995 store double %3, double* %arrayidx6, align 8
996 %indvars.iv.next = add i64 %indvars.iv, 1
997 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
998 %exitcond = icmp eq i32 %lftr.wideiv, %n
999 br i1 %exitcond, label %for.end, label %for.body
1001 for.end: ; preds = %for.body, %entry
1005 declare double @llvm.fmuladd.f64(double, double, double) nounwind readnone
1007 ;CHECK-LABEL: @pow_f32(
1008 ;CHECK: llvm.pow.v4f32
1010 define void @pow_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
1012 %cmp9 = icmp sgt i32 %n, 0
1013 br i1 %cmp9, label %for.body, label %for.end
1015 for.body: ; preds = %entry, %for.body
1016 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1017 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
1018 %0 = load float, float* %arrayidx, align 4
1019 %arrayidx2 = getelementptr inbounds float, float* %z, i64 %indvars.iv
1020 %1 = load float, float* %arrayidx2, align 4
1021 %call = tail call float @llvm.pow.f32(float %0, float %1) nounwind readnone
1022 %arrayidx4 = getelementptr inbounds float, float* %x, i64 %indvars.iv
1023 store float %call, float* %arrayidx4, align 4
1024 %indvars.iv.next = add i64 %indvars.iv, 1
1025 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1026 %exitcond = icmp eq i32 %lftr.wideiv, %n
1027 br i1 %exitcond, label %for.end, label %for.body
1029 for.end: ; preds = %for.body, %entry
1033 declare float @llvm.pow.f32(float, float) nounwind readnone
1035 ;CHECK-LABEL: @pow_f64(
1036 ;CHECK: llvm.pow.v4f64
1038 define void @pow_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z) nounwind uwtable {
1040 %cmp9 = icmp sgt i32 %n, 0
1041 br i1 %cmp9, label %for.body, label %for.end
1043 for.body: ; preds = %entry, %for.body
1044 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1045 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
1046 %0 = load double, double* %arrayidx, align 8
1047 %arrayidx2 = getelementptr inbounds double, double* %z, i64 %indvars.iv
1048 %1 = load double, double* %arrayidx2, align 8
1049 %call = tail call double @llvm.pow.f64(double %0, double %1) nounwind readnone
1050 %arrayidx4 = getelementptr inbounds double, double* %x, i64 %indvars.iv
1051 store double %call, double* %arrayidx4, align 8
1052 %indvars.iv.next = add i64 %indvars.iv, 1
1053 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1054 %exitcond = icmp eq i32 %lftr.wideiv, %n
1055 br i1 %exitcond, label %for.end, label %for.body
1057 for.end: ; preds = %for.body, %entry
1062 ; CHECK: call <4 x float> @llvm.fabs.v4f32
1064 define void @fabs_libm(float* nocapture %x) nounwind {
1068 for.body: ; preds = %entry, %for.body
1069 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1070 %arrayidx = getelementptr inbounds float, float* %x, i64 %indvars.iv
1071 %0 = load float, float* %arrayidx, align 4
1072 %call = tail call float @fabsf(float %0) nounwind readnone
1073 store float %call, float* %arrayidx, align 4
1074 %indvars.iv.next = add i64 %indvars.iv, 1
1075 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1076 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1077 br i1 %exitcond, label %for.end, label %for.body
1079 for.end: ; preds = %for.body
1083 declare float @fabsf(float) nounwind readnone
1085 declare double @llvm.pow.f64(double, double) nounwind readnone
1089 ; Make sure we don't replace calls to functions with standard library function
1090 ; signatures but defined with internal linkage.
1092 define internal float @roundf(float %x) nounwind readnone {
1093 ret float 0.00000000
1095 ; CHECK-LABEL: internal_round
1096 ; CHECK-NOT: load <4 x float>
1098 define void @internal_round(float* nocapture %x) nounwind {
1102 for.body: ; preds = %entry, %for.body
1103 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1104 %arrayidx = getelementptr inbounds float, float* %x, i64 %indvars.iv
1105 %0 = load float, float* %arrayidx, align 4
1106 %call = tail call float @roundf(float %0) nounwind readnone
1107 store float %call, float* %arrayidx, align 4
1108 %indvars.iv.next = add i64 %indvars.iv, 1
1109 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1110 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1111 br i1 %exitcond, label %for.end, label %for.body
1113 for.end: ; preds = %for.body
1117 ; Make sure we don't replace calls to functions with standard library names but
1118 ; different signatures.
1120 declare void @round(double %f)
1122 ; CHECK-LABEL: wrong_signature
1123 ; CHECK-NOT: load <4 x double>
1125 define void @wrong_signature(double* nocapture %x) nounwind {
1129 for.body: ; preds = %entry, %for.body
1130 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1131 %arrayidx = getelementptr inbounds double, double* %x, i64 %indvars.iv
1132 %0 = load double, double* %arrayidx, align 4
1133 store double %0, double* %arrayidx, align 4
1134 tail call void @round(double %0) nounwind readnone
1135 %indvars.iv.next = add i64 %indvars.iv, 1
1136 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1137 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1138 br i1 %exitcond, label %for.end, label %for.body
1140 for.end: ; preds = %for.body
1144 declare double @llvm.powi.f64.i32(double %Val, i32 %power) nounwind readnone
1146 ;CHECK-LABEL: @powi_f64(
1147 ;CHECK: llvm.powi.v4f64
1149 define void @powi_f64(i32 %n, double* noalias %y, double* noalias %x, i32 %P) nounwind uwtable {
1151 %cmp9 = icmp sgt i32 %n, 0
1152 br i1 %cmp9, label %for.body, label %for.end
1154 for.body: ; preds = %entry, %for.body
1155 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1156 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
1157 %0 = load double, double* %arrayidx, align 8
1158 %call = tail call double @llvm.powi.f64.i32(double %0, i32 %P) nounwind readnone
1159 %arrayidx4 = getelementptr inbounds double, double* %x, i64 %indvars.iv
1160 store double %call, double* %arrayidx4, align 8
1161 %indvars.iv.next = add i64 %indvars.iv, 1
1162 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1163 %exitcond = icmp eq i32 %lftr.wideiv, %n
1164 br i1 %exitcond, label %for.end, label %for.body
1166 for.end: ; preds = %for.body, %entry
1170 ;CHECK-LABEL: @powi_f64_neg(
1171 ;CHECK-NOT: llvm.powi.v4f64
1173 define void @powi_f64_neg(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
1175 %cmp9 = icmp sgt i32 %n, 0
1176 br i1 %cmp9, label %for.body, label %for.end
1178 for.body: ; preds = %entry, %for.body
1179 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1180 %arrayidx = getelementptr inbounds double, double* %y, i64 %indvars.iv
1181 %0 = load double, double* %arrayidx, align 8
1182 %1 = trunc i64 %indvars.iv to i32
1183 %call = tail call double @llvm.powi.f64.i32(double %0, i32 %1) nounwind readnone
1184 %arrayidx4 = getelementptr inbounds double, double* %x, i64 %indvars.iv
1185 store double %call, double* %arrayidx4, align 8
1186 %indvars.iv.next = add i64 %indvars.iv, 1
1187 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1188 %exitcond = icmp eq i32 %lftr.wideiv, %n
1189 br i1 %exitcond, label %for.end, label %for.body
1191 for.end: ; preds = %for.body, %entry
1195 declare i64 @llvm.cttz.i64 (i64, i1) nounwind readnone
1197 ;CHECK-LABEL: @cttz_f64(
1198 ;CHECK: llvm.cttz.v4i64
1200 define void @cttz_f64(i32 %n, i64* noalias %y, i64* noalias %x) nounwind uwtable {
1202 %cmp9 = icmp sgt i32 %n, 0
1203 br i1 %cmp9, label %for.body, label %for.end
1205 for.body: ; preds = %entry, %for.body
1206 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1207 %arrayidx = getelementptr inbounds i64, i64* %y, i64 %indvars.iv
1208 %0 = load i64, i64* %arrayidx, align 8
1209 %call = tail call i64 @llvm.cttz.i64(i64 %0, i1 true) nounwind readnone
1210 %arrayidx4 = getelementptr inbounds i64, i64* %x, i64 %indvars.iv
1211 store i64 %call, i64* %arrayidx4, align 8
1212 %indvars.iv.next = add i64 %indvars.iv, 1
1213 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1214 %exitcond = icmp eq i32 %lftr.wideiv, %n
1215 br i1 %exitcond, label %for.end, label %for.body
1217 for.end: ; preds = %for.body, %entry
1221 declare i64 @llvm.ctlz.i64 (i64, i1) nounwind readnone
1223 ;CHECK-LABEL: @ctlz_f64(
1224 ;CHECK: llvm.ctlz.v4i64
1226 define void @ctlz_f64(i32 %n, i64* noalias %y, i64* noalias %x) nounwind uwtable {
1228 %cmp9 = icmp sgt i32 %n, 0
1229 br i1 %cmp9, label %for.body, label %for.end
1231 for.body: ; preds = %entry, %for.body
1232 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1233 %arrayidx = getelementptr inbounds i64, i64* %y, i64 %indvars.iv
1234 %0 = load i64, i64* %arrayidx, align 8
1235 %call = tail call i64 @llvm.ctlz.i64(i64 %0, i1 true) nounwind readnone
1236 %arrayidx4 = getelementptr inbounds i64, i64* %x, i64 %indvars.iv
1237 store i64 %call, i64* %arrayidx4, align 8
1238 %indvars.iv.next = add i64 %indvars.iv, 1
1239 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1240 %exitcond = icmp eq i32 %lftr.wideiv, %n
1241 br i1 %exitcond, label %for.end, label %for.body
1243 for.end: ; preds = %for.body, %entry
1247 declare i64 @llvm.abs.i64 (i64, i1) nounwind readnone
1249 define void @abs_i64(i32 %n, i64* noalias %y, i64* noalias %x) nounwind uwtable {
1250 ;CHECK-LABEL: @abs_i64(
1251 ;CHECK: llvm.abs.v4i64(<4 x i64> [[WIDE_LOADX:%.*]], i1 true)
1254 %cmp9 = icmp sgt i32 %n, 0
1255 br i1 %cmp9, label %for.body, label %for.end
1257 for.body: ; preds = %entry, %for.body
1258 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1259 %arrayidx = getelementptr inbounds i64, i64* %y, i64 %indvars.iv
1260 %0 = load i64, i64* %arrayidx, align 8
1261 %call = tail call i64 @llvm.abs.i64(i64 %0, i1 true) nounwind readnone
1262 %arrayidx4 = getelementptr inbounds i64, i64* %x, i64 %indvars.iv
1263 store i64 %call, i64* %arrayidx4, align 8
1264 %indvars.iv.next = add i64 %indvars.iv, 1
1265 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1266 %exitcond = icmp eq i32 %lftr.wideiv, %n
1267 br i1 %exitcond, label %for.end, label %for.body
1269 for.end: ; preds = %for.body, %entry
1273 declare i32 @llvm.smin.i32 (i32, i32)
1275 define void @smin_i32(i32 %n, i32* noalias %x, i32* noalias %y) {
1276 ; CHECK-LABEL: @smin_i32(
1277 ; CHECK: call <4 x i32> @llvm.smin.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1280 %cmp = icmp sgt i32 %n, 0
1281 br i1 %cmp, label %loop, label %end
1284 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1285 %xi = getelementptr inbounds i32, i32* %x, i32 %iv
1286 %yi = getelementptr inbounds i32, i32* %y, i32 %iv
1287 %xld = load i32, i32* %xi, align 4
1288 %yld = load i32, i32* %yi, align 4
1289 %call = tail call i32 @llvm.smin.i32(i32 %xld, i32 %yld)
1290 store i32 %call, i32* %xi, align 4
1291 %iv.next = add i32 %iv, 1
1292 %exitcond = icmp eq i32 %iv.next, %n
1293 br i1 %exitcond, label %end, label %loop
1299 declare i32 @llvm.smax.i32 (i32, i32)
1301 define void @smax_i32(i32 %n, i32* noalias %x, i32* noalias %y) {
1302 ; CHECK-LABEL: @smax_i32(
1303 ; CHECK: call <4 x i32> @llvm.smax.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1306 %cmp = icmp sgt i32 %n, 0
1307 br i1 %cmp, label %loop, label %end
1310 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1311 %xi = getelementptr inbounds i32, i32* %x, i32 %iv
1312 %yi = getelementptr inbounds i32, i32* %y, i32 %iv
1313 %xld = load i32, i32* %xi, align 4
1314 %yld = load i32, i32* %yi, align 4
1315 %call = tail call i32 @llvm.smax.i32(i32 %xld, i32 %yld)
1316 store i32 %call, i32* %xi, align 4
1317 %iv.next = add i32 %iv, 1
1318 %exitcond = icmp eq i32 %iv.next, %n
1319 br i1 %exitcond, label %end, label %loop
1325 declare i32 @llvm.umin.i32 (i32, i32)
1327 define void @umin_i32(i32 %n, i32* noalias %x, i32* noalias %y) {
1328 ; CHECK-LABEL: @umin_i32(
1329 ; CHECK: call <4 x i32> @llvm.umin.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1332 %cmp = icmp sgt i32 %n, 0
1333 br i1 %cmp, label %loop, label %end
1336 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1337 %xi = getelementptr inbounds i32, i32* %x, i32 %iv
1338 %yi = getelementptr inbounds i32, i32* %y, i32 %iv
1339 %xld = load i32, i32* %xi, align 4
1340 %yld = load i32, i32* %yi, align 4
1341 %call = tail call i32 @llvm.umin.i32(i32 %xld, i32 %yld)
1342 store i32 %call, i32* %xi, align 4
1343 %iv.next = add i32 %iv, 1
1344 %exitcond = icmp eq i32 %iv.next, %n
1345 br i1 %exitcond, label %end, label %loop
1351 declare i32 @llvm.umax.i32 (i32, i32)
1353 define void @umax_i32(i32 %n, i32* noalias %x, i32* noalias %y) {
1354 ; CHECK-LABEL: @umax_i32(
1355 ; CHECK: call <4 x i32> @llvm.umax.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]])
1358 %cmp = icmp sgt i32 %n, 0
1359 br i1 %cmp, label %loop, label %end
1362 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1363 %xi = getelementptr inbounds i32, i32* %x, i32 %iv
1364 %yi = getelementptr inbounds i32, i32* %y, i32 %iv
1365 %xld = load i32, i32* %xi, align 4
1366 %yld = load i32, i32* %yi, align 4
1367 %call = tail call i32 @llvm.umax.i32(i32 %xld, i32 %yld)
1368 store i32 %call, i32* %xi, align 4
1369 %iv.next = add i32 %iv, 1
1370 %exitcond = icmp eq i32 %iv.next, %n
1371 br i1 %exitcond, label %end, label %loop
1377 declare i32 @llvm.fshl.i32 (i32, i32, i32)
1379 define void @fshl_i32(i32 %n, i32* noalias %x, i32* noalias %y, i32 %shAmt) {
1380 ; CHECK-LABEL: @fshl_i32(
1381 ; CHECK: call <4 x i32> @llvm.fshl.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]], <4 x i32> [[SPLAT:%.*]])
1384 %cmp = icmp sgt i32 %n, 0
1385 br i1 %cmp, label %loop, label %end
1388 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1389 %xi = getelementptr inbounds i32, i32* %x, i32 %iv
1390 %yi = getelementptr inbounds i32, i32* %y, i32 %iv
1391 %xld = load i32, i32* %xi, align 4
1392 %yld = load i32, i32* %yi, align 4
1393 %call = tail call i32 @llvm.fshl.i32(i32 %xld, i32 %yld, i32 %shAmt)
1394 store i32 %call, i32* %xi, align 4
1395 %iv.next = add i32 %iv, 1
1396 %exitcond = icmp eq i32 %iv.next, %n
1397 br i1 %exitcond, label %end, label %loop
1403 declare i32 @llvm.fshr.i32 (i32, i32, i32)
1405 define void @fshr_i32(i32 %n, i32* noalias %x, i32* noalias %y, i32 %shAmt) {
1406 ; CHECK-LABEL: @fshr_i32(
1407 ; CHECK: call <4 x i32> @llvm.fshr.v4i32(<4 x i32> [[WIDE_LOADX:%.*]], <4 x i32> [[WIDE_LOADY:%.*]], <4 x i32> [[SPLAT:%.*]])
1410 %cmp = icmp sgt i32 %n, 0
1411 br i1 %cmp, label %loop, label %end
1414 %iv = phi i32 [ %iv.next, %loop ], [ 0, %entry ]
1415 %xi = getelementptr inbounds i32, i32* %x, i32 %iv
1416 %yi = getelementptr inbounds i32, i32* %y, i32 %iv
1417 %xld = load i32, i32* %xi, align 4
1418 %yld = load i32, i32* %yi, align 4
1419 %call = tail call i32 @llvm.fshr.i32(i32 %xld, i32 %yld, i32 %shAmt)
1420 store i32 %call, i32* %xi, align 4
1421 %iv.next = add i32 %iv, 1
1422 %exitcond = icmp eq i32 %iv.next, %n
1423 br i1 %exitcond, label %end, label %loop
1429 declare float @llvm.minnum.f32(float, float) nounwind readnone
1431 ;CHECK-LABEL: @minnum_f32(
1432 ;CHECK: llvm.minnum.v4f32
1434 define void @minnum_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
1436 %cmp9 = icmp sgt i32 %n, 0
1437 br i1 %cmp9, label %for.body, label %for.end
1439 for.body: ; preds = %entry, %for.body
1440 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1441 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
1442 %0 = load float, float* %arrayidx, align 4
1443 %arrayidx2 = getelementptr inbounds float, float* %z, i64 %indvars.iv
1444 %1 = load float, float* %arrayidx2, align 4
1445 %call = tail call float @llvm.minnum.f32(float %0, float %1) nounwind readnone
1446 %arrayidx4 = getelementptr inbounds float, float* %x, i64 %indvars.iv
1447 store float %call, float* %arrayidx4, align 4
1448 %indvars.iv.next = add i64 %indvars.iv, 1
1449 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1450 %exitcond = icmp eq i32 %lftr.wideiv, %n
1451 br i1 %exitcond, label %for.end, label %for.body
1453 for.end: ; preds = %for.body, %entry
1457 declare float @llvm.maxnum.f32(float, float) nounwind readnone
1459 ;CHECK-LABEL: @maxnum_f32(
1460 ;CHECK: llvm.maxnum.v4f32
1462 define void @maxnum_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
1464 %cmp9 = icmp sgt i32 %n, 0
1465 br i1 %cmp9, label %for.body, label %for.end
1467 for.body: ; preds = %entry, %for.body
1468 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1469 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
1470 %0 = load float, float* %arrayidx, align 4
1471 %arrayidx2 = getelementptr inbounds float, float* %z, i64 %indvars.iv
1472 %1 = load float, float* %arrayidx2, align 4
1473 %call = tail call float @llvm.maxnum.f32(float %0, float %1) nounwind readnone
1474 %arrayidx4 = getelementptr inbounds float, float* %x, i64 %indvars.iv
1475 store float %call, float* %arrayidx4, align 4
1476 %indvars.iv.next = add i64 %indvars.iv, 1
1477 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1478 %exitcond = icmp eq i32 %lftr.wideiv, %n
1479 br i1 %exitcond, label %for.end, label %for.body
1481 for.end: ; preds = %for.body, %entry
1485 declare float @llvm.minimum.f32(float, float) nounwind readnone
1487 ;CHECK-LABEL: @minimum_f32(
1488 ;CHECK: llvm.minimum.v4f32
1490 define void @minimum_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
1492 %cmp9 = icmp sgt i32 %n, 0
1493 br i1 %cmp9, label %for.body, label %for.end
1495 for.body: ; preds = %entry, %for.body
1496 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1497 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
1498 %0 = load float, float* %arrayidx, align 4
1499 %arrayidx2 = getelementptr inbounds float, float* %z, i64 %indvars.iv
1500 %1 = load float, float* %arrayidx2, align 4
1501 %call = tail call float @llvm.minimum.f32(float %0, float %1) nounwind readnone
1502 %arrayidx4 = getelementptr inbounds float, float* %x, i64 %indvars.iv
1503 store float %call, float* %arrayidx4, align 4
1504 %indvars.iv.next = add i64 %indvars.iv, 1
1505 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1506 %exitcond = icmp eq i32 %lftr.wideiv, %n
1507 br i1 %exitcond, label %for.end, label %for.body
1509 for.end: ; preds = %for.body, %entry
1513 declare float @llvm.maximum.f32(float, float) nounwind readnone
1515 ;CHECK-LABEL: @maximum_f32(
1516 ;CHECK: llvm.maximum.v4f32
1518 define void @maximum_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
1520 %cmp9 = icmp sgt i32 %n, 0
1521 br i1 %cmp9, label %for.body, label %for.end
1523 for.body: ; preds = %entry, %for.body
1524 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1525 %arrayidx = getelementptr inbounds float, float* %y, i64 %indvars.iv
1526 %0 = load float, float* %arrayidx, align 4
1527 %arrayidx2 = getelementptr inbounds float, float* %z, i64 %indvars.iv
1528 %1 = load float, float* %arrayidx2, align 4
1529 %call = tail call float @llvm.maximum.f32(float %0, float %1) nounwind readnone
1530 %arrayidx4 = getelementptr inbounds float, float* %x, i64 %indvars.iv
1531 store float %call, float* %arrayidx4, align 4
1532 %indvars.iv.next = add i64 %indvars.iv, 1
1533 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1534 %exitcond = icmp eq i32 %lftr.wideiv, %n
1535 br i1 %exitcond, label %for.end, label %for.body
1537 for.end: ; preds = %for.body, %entry