1; RUN: opt -vector-library=SVML -loop-vectorize -force-vector-width=4 -force-vector-interleave=1 -mattr=avx -S < %s | FileCheck %s
2
3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4target triple = "x86_64-unknown-linux-gnu"
5
6declare double @sin(double) #0
7declare float @sinf(float) #0
8declare double @llvm.sin.f64(double) #0
9declare float @llvm.sin.f32(float) #0
10
11declare double @cos(double) #0
12declare float @cosf(float) #0
13declare double @llvm.cos.f64(double) #0
14declare float @llvm.cos.f32(float) #0
15
16declare double @pow(double, double) #0
17declare float @powf(float, float) #0
18declare double @llvm.pow.f64(double, double) #0
19declare float @llvm.pow.f32(float, float) #0
20
21declare double @exp(double) #0
22declare float @expf(float) #0
23declare double @llvm.exp.f64(double) #0
24declare float @llvm.exp.f32(float) #0
25
26declare double @log(double) #0
27declare float @logf(float) #0
28declare double @llvm.log.f64(double) #0
29declare float @llvm.log.f32(float) #0
30
31declare double @exp2(double) #0
32declare float @exp2f(float) #0
33declare double @llvm.exp2.f64(double) #0
34declare float @llvm.exp2.f32(float) #0
35
36define void @sin_f64(double* nocapture %varray) {
37; CHECK-LABEL: @sin_f64(
38; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_sin4(<4 x double> [[TMP4:%.*]])
39; CHECK:    ret void
40;
41entry:
42  br label %for.body
43
44for.body:
45  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
46  %tmp = trunc i64 %iv to i32
47  %conv = sitofp i32 %tmp to double
48  %call = tail call double @sin(double %conv)
49  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
50  store double %call, double* %arrayidx, align 4
51  %iv.next = add nuw nsw i64 %iv, 1
52  %exitcond = icmp eq i64 %iv.next, 1000
53  br i1 %exitcond, label %for.end, label %for.body
54
55for.end:
56  ret void
57}
58
59define void @sin_f32(float* nocapture %varray) {
60; CHECK-LABEL: @sin_f32(
61; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_sinf4(<4 x float> [[TMP4:%.*]])
62; CHECK:    ret void
63;
64entry:
65  br label %for.body
66
67for.body:
68  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
69  %tmp = trunc i64 %iv to i32
70  %conv = sitofp i32 %tmp to float
71  %call = tail call float @sinf(float %conv)
72  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
73  store float %call, float* %arrayidx, align 4
74  %iv.next = add nuw nsw i64 %iv, 1
75  %exitcond = icmp eq i64 %iv.next, 1000
76  br i1 %exitcond, label %for.end, label %for.body
77
78for.end:
79  ret void
80}
81
82define void @sin_f64_intrinsic(double* nocapture %varray) {
83; CHECK-LABEL: @sin_f64_intrinsic(
84; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_sin4(<4 x double> [[TMP4:%.*]])
85; CHECK:    ret void
86;
87entry:
88  br label %for.body
89
90for.body:
91  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
92  %tmp = trunc i64 %iv to i32
93  %conv = sitofp i32 %tmp to double
94  %call = tail call double @llvm.sin.f64(double %conv)
95  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
96  store double %call, double* %arrayidx, align 4
97  %iv.next = add nuw nsw i64 %iv, 1
98  %exitcond = icmp eq i64 %iv.next, 1000
99  br i1 %exitcond, label %for.end, label %for.body
100
101for.end:
102  ret void
103}
104
105define void @sin_f32_intrinsic(float* nocapture %varray) {
106; CHECK-LABEL: @sin_f32_intrinsic(
107; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_sinf4(<4 x float> [[TMP4:%.*]])
108; CHECK:    ret void
109;
110entry:
111  br label %for.body
112
113for.body:
114  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
115  %tmp = trunc i64 %iv to i32
116  %conv = sitofp i32 %tmp to float
117  %call = tail call float @llvm.sin.f32(float %conv)
118  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
119  store float %call, float* %arrayidx, align 4
120  %iv.next = add nuw nsw i64 %iv, 1
121  %exitcond = icmp eq i64 %iv.next, 1000
122  br i1 %exitcond, label %for.end, label %for.body
123
124for.end:
125  ret void
126}
127
128define void @cos_f64(double* nocapture %varray) {
129; CHECK-LABEL: @cos_f64(
130; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_cos4(<4 x double> [[TMP4:%.*]])
131; CHECK:    ret void
132;
133entry:
134  br label %for.body
135
136for.body:
137  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
138  %tmp = trunc i64 %iv to i32
139  %conv = sitofp i32 %tmp to double
140  %call = tail call double @cos(double %conv)
141  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
142  store double %call, double* %arrayidx, align 4
143  %iv.next = add nuw nsw i64 %iv, 1
144  %exitcond = icmp eq i64 %iv.next, 1000
145  br i1 %exitcond, label %for.end, label %for.body
146
147for.end:
148  ret void
149}
150
151define void @cos_f32(float* nocapture %varray) {
152; CHECK-LABEL: @cos_f32(
153; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_cosf4(<4 x float> [[TMP4:%.*]])
154; CHECK:    ret void
155;
156entry:
157  br label %for.body
158
159for.body:
160  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
161  %tmp = trunc i64 %iv to i32
162  %conv = sitofp i32 %tmp to float
163  %call = tail call float @cosf(float %conv)
164  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
165  store float %call, float* %arrayidx, align 4
166  %iv.next = add nuw nsw i64 %iv, 1
167  %exitcond = icmp eq i64 %iv.next, 1000
168  br i1 %exitcond, label %for.end, label %for.body
169
170for.end:
171  ret void
172}
173
174define void @cos_f64_intrinsic(double* nocapture %varray) {
175; CHECK-LABEL: @cos_f64_intrinsic(
176; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_cos4(<4 x double> [[TMP4:%.*]])
177; CHECK:    ret void
178;
179entry:
180  br label %for.body
181
182for.body:
183  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
184  %tmp = trunc i64 %iv to i32
185  %conv = sitofp i32 %tmp to double
186  %call = tail call double @llvm.cos.f64(double %conv)
187  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
188  store double %call, double* %arrayidx, align 4
189  %iv.next = add nuw nsw i64 %iv, 1
190  %exitcond = icmp eq i64 %iv.next, 1000
191  br i1 %exitcond, label %for.end, label %for.body
192
193for.end:
194  ret void
195}
196
197define void @cos_f32_intrinsic(float* nocapture %varray) {
198; CHECK-LABEL: @cos_f32_intrinsic(
199; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_cosf4(<4 x float> [[TMP4:%.*]])
200; CHECK:    ret void
201;
202entry:
203  br label %for.body
204
205for.body:
206  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
207  %tmp = trunc i64 %iv to i32
208  %conv = sitofp i32 %tmp to float
209  %call = tail call float @llvm.cos.f32(float %conv)
210  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
211  store float %call, float* %arrayidx, align 4
212  %iv.next = add nuw nsw i64 %iv, 1
213  %exitcond = icmp eq i64 %iv.next, 1000
214  br i1 %exitcond, label %for.end, label %for.body
215
216for.end:
217  ret void
218}
219
220define void @pow_f64(double* nocapture %varray, double* nocapture readonly %exp) {
221; CHECK-LABEL: @pow_f64(
222; CHECK:    [[TMP8:%.*]] = call <4 x double> @__svml_pow4(<4 x double> [[TMP4:%.*]], <4 x double> [[WIDE_LOAD:%.*]])
223; CHECK:    ret void
224;
225entry:
226  br label %for.body
227
228for.body:
229  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
230  %tmp = trunc i64 %iv to i32
231  %conv = sitofp i32 %tmp to double
232  %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv
233  %tmp1 = load double, double* %arrayidx, align 4
234  %tmp2 = tail call double @pow(double %conv, double %tmp1)
235  %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv
236  store double %tmp2, double* %arrayidx2, align 4
237  %iv.next = add nuw nsw i64 %iv, 1
238  %exitcond = icmp eq i64 %iv.next, 1000
239  br i1 %exitcond, label %for.end, label %for.body
240
241for.end:
242  ret void
243}
244
245define void @pow_f64_intrinsic(double* nocapture %varray, double* nocapture readonly %exp) {
246; CHECK-LABEL: @pow_f64_intrinsic(
247; CHECK:    [[TMP8:%.*]] = call <4 x double> @__svml_pow4(<4 x double> [[TMP4:%.*]], <4 x double> [[WIDE_LOAD:%.*]])
248; CHECK:    ret void
249;
250entry:
251  br label %for.body
252
253for.body:
254  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
255  %tmp = trunc i64 %iv to i32
256  %conv = sitofp i32 %tmp to double
257  %arrayidx = getelementptr inbounds double, double* %exp, i64 %iv
258  %tmp1 = load double, double* %arrayidx, align 4
259  %tmp2 = tail call double @llvm.pow.f64(double %conv, double %tmp1)
260  %arrayidx2 = getelementptr inbounds double, double* %varray, i64 %iv
261  store double %tmp2, double* %arrayidx2, align 4
262  %iv.next = add nuw nsw i64 %iv, 1
263  %exitcond = icmp eq i64 %iv.next, 1000
264  br i1 %exitcond, label %for.end, label %for.body
265
266for.end:
267  ret void
268}
269
270define void @pow_f32(float* nocapture %varray, float* nocapture readonly %exp) {
271; CHECK-LABEL: @pow_f32(
272; CHECK:    [[TMP8:%.*]] = call <4 x float> @__svml_powf4(<4 x float> [[TMP4:%.*]], <4 x float> [[WIDE_LOAD:%.*]])
273; CHECK:    ret void
274;
275entry:
276  br label %for.body
277
278for.body:
279  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
280  %tmp = trunc i64 %iv to i32
281  %conv = sitofp i32 %tmp to float
282  %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv
283  %tmp1 = load float, float* %arrayidx, align 4
284  %tmp2 = tail call float @powf(float %conv, float %tmp1)
285  %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv
286  store float %tmp2, float* %arrayidx2, align 4
287  %iv.next = add nuw nsw i64 %iv, 1
288  %exitcond = icmp eq i64 %iv.next, 1000
289  br i1 %exitcond, label %for.end, label %for.body
290
291for.end:
292  ret void
293}
294
295define void @pow_f32_intrinsic(float* nocapture %varray, float* nocapture readonly %exp) {
296; CHECK-LABEL: @pow_f32_intrinsic(
297; CHECK:    [[TMP8:%.*]] = call <4 x float> @__svml_powf4(<4 x float> [[TMP4:%.*]], <4 x float> [[WIDE_LOAD:%.*]])
298; CHECK:    ret void
299;
300entry:
301  br label %for.body
302
303for.body:
304  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
305  %tmp = trunc i64 %iv to i32
306  %conv = sitofp i32 %tmp to float
307  %arrayidx = getelementptr inbounds float, float* %exp, i64 %iv
308  %tmp1 = load float, float* %arrayidx, align 4
309  %tmp2 = tail call float @llvm.pow.f32(float %conv, float %tmp1)
310  %arrayidx2 = getelementptr inbounds float, float* %varray, i64 %iv
311  store float %tmp2, float* %arrayidx2, align 4
312  %iv.next = add nuw nsw i64 %iv, 1
313  %exitcond = icmp eq i64 %iv.next, 1000
314  br i1 %exitcond, label %for.end, label %for.body
315
316for.end:
317  ret void
318}
319
320define void @exp_f64(double* nocapture %varray) {
321; CHECK-LABEL: @exp_f64(
322; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_exp4(<4 x double> [[TMP4:%.*]])
323; CHECK:    ret void
324;
325entry:
326  br label %for.body
327
328for.body:
329  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
330  %tmp = trunc i64 %iv to i32
331  %conv = sitofp i32 %tmp to double
332  %call = tail call double @exp(double %conv)
333  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
334  store double %call, double* %arrayidx, align 4
335  %iv.next = add nuw nsw i64 %iv, 1
336  %exitcond = icmp eq i64 %iv.next, 1000
337  br i1 %exitcond, label %for.end, label %for.body
338
339for.end:
340  ret void
341}
342
343define void @exp_f32(float* nocapture %varray) {
344; CHECK-LABEL: @exp_f32(
345; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_expf4(<4 x float> [[TMP4:%.*]])
346; CHECK:    ret void
347;
348entry:
349  br label %for.body
350
351for.body:
352  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
353  %tmp = trunc i64 %iv to i32
354  %conv = sitofp i32 %tmp to float
355  %call = tail call float @expf(float %conv)
356  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
357  store float %call, float* %arrayidx, align 4
358  %iv.next = add nuw nsw i64 %iv, 1
359  %exitcond = icmp eq i64 %iv.next, 1000
360  br i1 %exitcond, label %for.end, label %for.body
361
362for.end:
363  ret void
364}
365
366define void @exp_f64_intrinsic(double* nocapture %varray) {
367; CHECK-LABEL: @exp_f64_intrinsic(
368; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_exp4(<4 x double> [[TMP4:%.*]])
369; CHECK:    ret void
370;
371entry:
372  br label %for.body
373
374for.body:
375  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
376  %tmp = trunc i64 %iv to i32
377  %conv = sitofp i32 %tmp to double
378  %call = tail call double @llvm.exp.f64(double %conv)
379  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
380  store double %call, double* %arrayidx, align 4
381  %iv.next = add nuw nsw i64 %iv, 1
382  %exitcond = icmp eq i64 %iv.next, 1000
383  br i1 %exitcond, label %for.end, label %for.body
384
385for.end:
386  ret void
387}
388
389define void @exp_f32_intrinsic(float* nocapture %varray) {
390; CHECK-LABEL: @exp_f32_intrinsic(
391; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_expf4(<4 x float> [[TMP4:%.*]])
392; CHECK:    ret void
393;
394entry:
395  br label %for.body
396
397for.body:
398  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
399  %tmp = trunc i64 %iv to i32
400  %conv = sitofp i32 %tmp to float
401  %call = tail call float @llvm.exp.f32(float %conv)
402  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
403  store float %call, float* %arrayidx, align 4
404  %iv.next = add nuw nsw i64 %iv, 1
405  %exitcond = icmp eq i64 %iv.next, 1000
406  br i1 %exitcond, label %for.end, label %for.body
407
408for.end:
409  ret void
410}
411
412define void @log_f64(double* nocapture %varray) {
413; CHECK-LABEL: @log_f64(
414; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_log4(<4 x double> [[TMP4:%.*]])
415; CHECK:    ret void
416;
417entry:
418  br label %for.body
419
420for.body:
421  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
422  %tmp = trunc i64 %iv to i32
423  %conv = sitofp i32 %tmp to double
424  %call = tail call double @log(double %conv)
425  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
426  store double %call, double* %arrayidx, align 4
427  %iv.next = add nuw nsw i64 %iv, 1
428  %exitcond = icmp eq i64 %iv.next, 1000
429  br i1 %exitcond, label %for.end, label %for.body
430
431for.end:
432  ret void
433}
434
435define void @log_f32(float* nocapture %varray) {
436; CHECK-LABEL: @log_f32(
437; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_logf4(<4 x float> [[TMP4:%.*]])
438; CHECK:    ret void
439;
440entry:
441  br label %for.body
442
443for.body:
444  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
445  %tmp = trunc i64 %iv to i32
446  %conv = sitofp i32 %tmp to float
447  %call = tail call float @logf(float %conv)
448  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
449  store float %call, float* %arrayidx, align 4
450  %iv.next = add nuw nsw i64 %iv, 1
451  %exitcond = icmp eq i64 %iv.next, 1000
452  br i1 %exitcond, label %for.end, label %for.body
453
454for.end:
455  ret void
456}
457
458define void @log_f64_intrinsic(double* nocapture %varray) {
459; CHECK-LABEL: @log_f64_intrinsic(
460; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_log4(<4 x double> [[TMP4:%.*]])
461; CHECK:    ret void
462;
463entry:
464  br label %for.body
465
466for.body:
467  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
468  %tmp = trunc i64 %iv to i32
469  %conv = sitofp i32 %tmp to double
470  %call = tail call double @llvm.log.f64(double %conv)
471  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
472  store double %call, double* %arrayidx, align 4
473  %iv.next = add nuw nsw i64 %iv, 1
474  %exitcond = icmp eq i64 %iv.next, 1000
475  br i1 %exitcond, label %for.end, label %for.body
476
477for.end:
478  ret void
479}
480
481define void @log_f32_intrinsic(float* nocapture %varray) {
482; CHECK-LABEL: @log_f32_intrinsic(
483; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_logf4(<4 x float> [[TMP4:%.*]])
484; CHECK:    ret void
485;
486entry:
487  br label %for.body
488
489for.body:
490  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
491  %tmp = trunc i64 %iv to i32
492  %conv = sitofp i32 %tmp to float
493  %call = tail call float @llvm.log.f32(float %conv)
494  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
495  store float %call, float* %arrayidx, align 4
496  %iv.next = add nuw nsw i64 %iv, 1
497  %exitcond = icmp eq i64 %iv.next, 1000
498  br i1 %exitcond, label %for.end, label %for.body
499
500for.end:
501  ret void
502}
503
504define void @exp2_f64(double* nocapture %varray) {
505; CHECK-LABEL: @exp2_f64(
506; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_exp24(<4 x double> [[TMP4:%.*]])
507; CHECK:    ret void
508;
509entry:
510  br label %for.body
511
512for.body:
513  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
514  %tmp = trunc i64 %iv to i32
515  %conv = sitofp i32 %tmp to double
516  %call = tail call double @exp2(double %conv)
517  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
518  store double %call, double* %arrayidx, align 4
519  %iv.next = add nuw nsw i64 %iv, 1
520  %exitcond = icmp eq i64 %iv.next, 1000
521  br i1 %exitcond, label %for.end, label %for.body
522
523for.end:
524  ret void
525}
526
527define void @exp2_f32(float* nocapture %varray) {
528; CHECK-LABEL: @exp2_f32(
529; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_exp2f4(<4 x float> [[TMP4:%.*]])
530; CHECK:    ret void
531;
532entry:
533  br label %for.body
534
535for.body:
536  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
537  %tmp = trunc i64 %iv to i32
538  %conv = sitofp i32 %tmp to float
539  %call = tail call float @exp2f(float %conv)
540  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
541  store float %call, float* %arrayidx, align 4
542  %iv.next = add nuw nsw i64 %iv, 1
543  %exitcond = icmp eq i64 %iv.next, 1000
544  br i1 %exitcond, label %for.end, label %for.body
545
546for.end:
547  ret void
548}
549
550define void @exp2_f64_intrinsic(double* nocapture %varray) {
551; CHECK-LABEL: @exp2_f64_intrinsic(
552; CHECK:    [[TMP5:%.*]] = call <4 x double> @__svml_exp24(<4 x double> [[TMP4:%.*]])
553; CHECK:    ret void
554;
555entry:
556  br label %for.body
557
558for.body:
559  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
560  %tmp = trunc i64 %iv to i32
561  %conv = sitofp i32 %tmp to double
562  %call = tail call double @llvm.exp2.f64(double %conv)
563  %arrayidx = getelementptr inbounds double, double* %varray, i64 %iv
564  store double %call, double* %arrayidx, align 4
565  %iv.next = add nuw nsw i64 %iv, 1
566  %exitcond = icmp eq i64 %iv.next, 1000
567  br i1 %exitcond, label %for.end, label %for.body
568
569for.end:
570  ret void
571}
572
573define void @exp2_f32_intrinsic(float* nocapture %varray) {
574; CHECK-LABEL: @exp2_f32_intrinsic(
575; CHECK:    [[TMP5:%.*]] = call <4 x float> @__svml_exp2f4(<4 x float> [[TMP4:%.*]])
576; CHECK:    ret void
577;
578entry:
579  br label %for.body
580
581for.body:
582  %iv = phi i64 [ 0, %entry ], [ %iv.next, %for.body ]
583  %tmp = trunc i64 %iv to i32
584  %conv = sitofp i32 %tmp to float
585  %call = tail call float @llvm.exp2.f32(float %conv)
586  %arrayidx = getelementptr inbounds float, float* %varray, i64 %iv
587  store float %call, float* %arrayidx, align 4
588  %iv.next = add nuw nsw i64 %iv, 1
589  %exitcond = icmp eq i64 %iv.next, 1000
590  br i1 %exitcond, label %for.end, label %for.body
591
592for.end:
593  ret void
594}
595
596attributes #0 = { nounwind readnone }
597