blob: 80149d23a467c94b739f5d44b977c3ead314dec7 [file] [log] [blame]
Sanjay Patelb653de12014-09-10 17:58:16 +00001; RUN: opt < %s -loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -dce -instcombine -S | FileCheck %s
Paul Redmond2adb13c2012-12-09 20:42:17 +00002
3target 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"
4target triple = "x86_64-unknown-linux-gnu"
5
Stephen Linc1c7a132013-07-14 01:42:54 +00006;CHECK-LABEL: @sqrt_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +00007;CHECK: llvm.sqrt.v4f32
8;CHECK: ret void
9define void @sqrt_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
10entry:
11 %cmp6 = icmp sgt i32 %n, 0
12 br i1 %cmp6, label %for.body, label %for.end
13
14for.body: ; preds = %entry, %for.body
15 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
16 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000017 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +000018 %call = tail call float @llvm.sqrt.f32(float %0) nounwind readnone
19 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000020 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +000021 %indvars.iv.next = add i64 %indvars.iv, 1
22 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
23 %exitcond = icmp eq i32 %lftr.wideiv, %n
24 br i1 %exitcond, label %for.end, label %for.body
25
26for.end: ; preds = %for.body, %entry
27 ret void
28}
29
30declare float @llvm.sqrt.f32(float) nounwind readnone
31
Stephen Linc1c7a132013-07-14 01:42:54 +000032;CHECK-LABEL: @sqrt_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +000033;CHECK: llvm.sqrt.v4f64
34;CHECK: ret void
35define void @sqrt_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
36entry:
37 %cmp6 = icmp sgt i32 %n, 0
38 br i1 %cmp6, label %for.body, label %for.end
39
40for.body: ; preds = %entry, %for.body
41 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
42 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000043 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +000044 %call = tail call double @llvm.sqrt.f64(double %0) nounwind readnone
45 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000046 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +000047 %indvars.iv.next = add i64 %indvars.iv, 1
48 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
49 %exitcond = icmp eq i32 %lftr.wideiv, %n
50 br i1 %exitcond, label %for.end, label %for.body
51
52for.end: ; preds = %for.body, %entry
53 ret void
54}
55
56declare double @llvm.sqrt.f64(double) nounwind readnone
57
Stephen Linc1c7a132013-07-14 01:42:54 +000058;CHECK-LABEL: @sin_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +000059;CHECK: llvm.sin.v4f32
60;CHECK: ret void
61define void @sin_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
62entry:
63 %cmp6 = icmp sgt i32 %n, 0
64 br i1 %cmp6, label %for.body, label %for.end
65
66for.body: ; preds = %entry, %for.body
67 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
68 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000069 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +000070 %call = tail call float @llvm.sin.f32(float %0) nounwind readnone
71 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000072 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +000073 %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
77
78for.end: ; preds = %for.body, %entry
79 ret void
80}
81
82declare float @llvm.sin.f32(float) nounwind readnone
83
Stephen Linc1c7a132013-07-14 01:42:54 +000084;CHECK-LABEL: @sin_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +000085;CHECK: llvm.sin.v4f64
86;CHECK: ret void
87define void @sin_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
88entry:
89 %cmp6 = icmp sgt i32 %n, 0
90 br i1 %cmp6, label %for.body, label %for.end
91
92for.body: ; preds = %entry, %for.body
93 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
94 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000095 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +000096 %call = tail call double @llvm.sin.f64(double %0) nounwind readnone
97 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +000098 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +000099 %indvars.iv.next = add i64 %indvars.iv, 1
100 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
101 %exitcond = icmp eq i32 %lftr.wideiv, %n
102 br i1 %exitcond, label %for.end, label %for.body
103
104for.end: ; preds = %for.body, %entry
105 ret void
106}
107
108declare double @llvm.sin.f64(double) nounwind readnone
109
Stephen Linc1c7a132013-07-14 01:42:54 +0000110;CHECK-LABEL: @cos_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000111;CHECK: llvm.cos.v4f32
112;CHECK: ret void
113define void @cos_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
114entry:
115 %cmp6 = icmp sgt i32 %n, 0
116 br i1 %cmp6, label %for.body, label %for.end
117
118for.body: ; preds = %entry, %for.body
119 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
120 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000121 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000122 %call = tail call float @llvm.cos.f32(float %0) nounwind readnone
123 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000124 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000125 %indvars.iv.next = add i64 %indvars.iv, 1
126 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
127 %exitcond = icmp eq i32 %lftr.wideiv, %n
128 br i1 %exitcond, label %for.end, label %for.body
129
130for.end: ; preds = %for.body, %entry
131 ret void
132}
133
134declare float @llvm.cos.f32(float) nounwind readnone
135
Stephen Linc1c7a132013-07-14 01:42:54 +0000136;CHECK-LABEL: @cos_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000137;CHECK: llvm.cos.v4f64
138;CHECK: ret void
139define void @cos_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
140entry:
141 %cmp6 = icmp sgt i32 %n, 0
142 br i1 %cmp6, label %for.body, label %for.end
143
144for.body: ; preds = %entry, %for.body
145 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
146 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000147 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000148 %call = tail call double @llvm.cos.f64(double %0) nounwind readnone
149 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000150 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000151 %indvars.iv.next = add i64 %indvars.iv, 1
152 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
153 %exitcond = icmp eq i32 %lftr.wideiv, %n
154 br i1 %exitcond, label %for.end, label %for.body
155
156for.end: ; preds = %for.body, %entry
157 ret void
158}
159
160declare double @llvm.cos.f64(double) nounwind readnone
161
Stephen Linc1c7a132013-07-14 01:42:54 +0000162;CHECK-LABEL: @exp_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000163;CHECK: llvm.exp.v4f32
164;CHECK: ret void
165define void @exp_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
166entry:
167 %cmp6 = icmp sgt i32 %n, 0
168 br i1 %cmp6, label %for.body, label %for.end
169
170for.body: ; preds = %entry, %for.body
171 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
172 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000173 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000174 %call = tail call float @llvm.exp.f32(float %0) nounwind readnone
175 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000176 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000177 %indvars.iv.next = add i64 %indvars.iv, 1
178 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
179 %exitcond = icmp eq i32 %lftr.wideiv, %n
180 br i1 %exitcond, label %for.end, label %for.body
181
182for.end: ; preds = %for.body, %entry
183 ret void
184}
185
186declare float @llvm.exp.f32(float) nounwind readnone
187
Stephen Linc1c7a132013-07-14 01:42:54 +0000188;CHECK-LABEL: @exp_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000189;CHECK: llvm.exp.v4f64
190;CHECK: ret void
191define void @exp_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
192entry:
193 %cmp6 = icmp sgt i32 %n, 0
194 br i1 %cmp6, label %for.body, label %for.end
195
196for.body: ; preds = %entry, %for.body
197 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
198 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000199 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000200 %call = tail call double @llvm.exp.f64(double %0) nounwind readnone
201 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000202 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000203 %indvars.iv.next = add i64 %indvars.iv, 1
204 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
205 %exitcond = icmp eq i32 %lftr.wideiv, %n
206 br i1 %exitcond, label %for.end, label %for.body
207
208for.end: ; preds = %for.body, %entry
209 ret void
210}
211
212declare double @llvm.exp.f64(double) nounwind readnone
213
Stephen Linc1c7a132013-07-14 01:42:54 +0000214;CHECK-LABEL: @exp2_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000215;CHECK: llvm.exp2.v4f32
216;CHECK: ret void
217define void @exp2_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
218entry:
219 %cmp6 = icmp sgt i32 %n, 0
220 br i1 %cmp6, label %for.body, label %for.end
221
222for.body: ; preds = %entry, %for.body
223 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
224 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000225 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000226 %call = tail call float @llvm.exp2.f32(float %0) nounwind readnone
227 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000228 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000229 %indvars.iv.next = add i64 %indvars.iv, 1
230 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
231 %exitcond = icmp eq i32 %lftr.wideiv, %n
232 br i1 %exitcond, label %for.end, label %for.body
233
234for.end: ; preds = %for.body, %entry
235 ret void
236}
237
238declare float @llvm.exp2.f32(float) nounwind readnone
239
Stephen Linc1c7a132013-07-14 01:42:54 +0000240;CHECK-LABEL: @exp2_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000241;CHECK: llvm.exp2.v4f64
242;CHECK: ret void
243define void @exp2_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
244entry:
245 %cmp6 = icmp sgt i32 %n, 0
246 br i1 %cmp6, label %for.body, label %for.end
247
248for.body: ; preds = %entry, %for.body
249 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
250 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000251 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000252 %call = tail call double @llvm.exp2.f64(double %0) nounwind readnone
253 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000254 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000255 %indvars.iv.next = add i64 %indvars.iv, 1
256 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
257 %exitcond = icmp eq i32 %lftr.wideiv, %n
258 br i1 %exitcond, label %for.end, label %for.body
259
260for.end: ; preds = %for.body, %entry
261 ret void
262}
263
264declare double @llvm.exp2.f64(double) nounwind readnone
265
Stephen Linc1c7a132013-07-14 01:42:54 +0000266;CHECK-LABEL: @log_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000267;CHECK: llvm.log.v4f32
268;CHECK: ret void
269define void @log_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
270entry:
271 %cmp6 = icmp sgt i32 %n, 0
272 br i1 %cmp6, label %for.body, label %for.end
273
274for.body: ; preds = %entry, %for.body
275 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
276 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000277 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000278 %call = tail call float @llvm.log.f32(float %0) nounwind readnone
279 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000280 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000281 %indvars.iv.next = add i64 %indvars.iv, 1
282 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
283 %exitcond = icmp eq i32 %lftr.wideiv, %n
284 br i1 %exitcond, label %for.end, label %for.body
285
286for.end: ; preds = %for.body, %entry
287 ret void
288}
289
290declare float @llvm.log.f32(float) nounwind readnone
291
Stephen Linc1c7a132013-07-14 01:42:54 +0000292;CHECK-LABEL: @log_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000293;CHECK: llvm.log.v4f64
294;CHECK: ret void
295define void @log_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
296entry:
297 %cmp6 = icmp sgt i32 %n, 0
298 br i1 %cmp6, label %for.body, label %for.end
299
300for.body: ; preds = %entry, %for.body
301 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
302 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000303 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000304 %call = tail call double @llvm.log.f64(double %0) nounwind readnone
305 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000306 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000307 %indvars.iv.next = add i64 %indvars.iv, 1
308 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
309 %exitcond = icmp eq i32 %lftr.wideiv, %n
310 br i1 %exitcond, label %for.end, label %for.body
311
312for.end: ; preds = %for.body, %entry
313 ret void
314}
315
316declare double @llvm.log.f64(double) nounwind readnone
317
Stephen Linc1c7a132013-07-14 01:42:54 +0000318;CHECK-LABEL: @log10_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000319;CHECK: llvm.log10.v4f32
320;CHECK: ret void
321define void @log10_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
322entry:
323 %cmp6 = icmp sgt i32 %n, 0
324 br i1 %cmp6, label %for.body, label %for.end
325
326for.body: ; preds = %entry, %for.body
327 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
328 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000329 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000330 %call = tail call float @llvm.log10.f32(float %0) nounwind readnone
331 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000332 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000333 %indvars.iv.next = add i64 %indvars.iv, 1
334 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
335 %exitcond = icmp eq i32 %lftr.wideiv, %n
336 br i1 %exitcond, label %for.end, label %for.body
337
338for.end: ; preds = %for.body, %entry
339 ret void
340}
341
342declare float @llvm.log10.f32(float) nounwind readnone
343
Stephen Linc1c7a132013-07-14 01:42:54 +0000344;CHECK-LABEL: @log10_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000345;CHECK: llvm.log10.v4f64
346;CHECK: ret void
347define void @log10_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
348entry:
349 %cmp6 = icmp sgt i32 %n, 0
350 br i1 %cmp6, label %for.body, label %for.end
351
352for.body: ; preds = %entry, %for.body
353 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
354 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000355 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000356 %call = tail call double @llvm.log10.f64(double %0) nounwind readnone
357 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000358 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000359 %indvars.iv.next = add i64 %indvars.iv, 1
360 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
361 %exitcond = icmp eq i32 %lftr.wideiv, %n
362 br i1 %exitcond, label %for.end, label %for.body
363
364for.end: ; preds = %for.body, %entry
365 ret void
366}
367
368declare double @llvm.log10.f64(double) nounwind readnone
369
Stephen Linc1c7a132013-07-14 01:42:54 +0000370;CHECK-LABEL: @log2_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000371;CHECK: llvm.log2.v4f32
372;CHECK: ret void
373define void @log2_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
374entry:
375 %cmp6 = icmp sgt i32 %n, 0
376 br i1 %cmp6, label %for.body, label %for.end
377
378for.body: ; preds = %entry, %for.body
379 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
380 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000381 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000382 %call = tail call float @llvm.log2.f32(float %0) nounwind readnone
383 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000384 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000385 %indvars.iv.next = add i64 %indvars.iv, 1
386 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
387 %exitcond = icmp eq i32 %lftr.wideiv, %n
388 br i1 %exitcond, label %for.end, label %for.body
389
390for.end: ; preds = %for.body, %entry
391 ret void
392}
393
394declare float @llvm.log2.f32(float) nounwind readnone
395
Stephen Linc1c7a132013-07-14 01:42:54 +0000396;CHECK-LABEL: @log2_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000397;CHECK: llvm.log2.v4f64
398;CHECK: ret void
399define void @log2_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
400entry:
401 %cmp6 = icmp sgt i32 %n, 0
402 br i1 %cmp6, label %for.body, label %for.end
403
404for.body: ; preds = %entry, %for.body
405 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
406 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000407 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000408 %call = tail call double @llvm.log2.f64(double %0) nounwind readnone
409 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000410 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000411 %indvars.iv.next = add i64 %indvars.iv, 1
412 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
413 %exitcond = icmp eq i32 %lftr.wideiv, %n
414 br i1 %exitcond, label %for.end, label %for.body
415
416for.end: ; preds = %for.body, %entry
417 ret void
418}
419
420declare double @llvm.log2.f64(double) nounwind readnone
421
Stephen Linc1c7a132013-07-14 01:42:54 +0000422;CHECK-LABEL: @fabs_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000423;CHECK: llvm.fabs.v4f32
424;CHECK: ret void
425define void @fabs_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
426entry:
427 %cmp6 = icmp sgt i32 %n, 0
428 br i1 %cmp6, label %for.body, label %for.end
429
430for.body: ; preds = %entry, %for.body
431 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
432 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000433 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000434 %call = tail call float @llvm.fabs.f32(float %0) nounwind readnone
435 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000436 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000437 %indvars.iv.next = add i64 %indvars.iv, 1
438 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
439 %exitcond = icmp eq i32 %lftr.wideiv, %n
440 br i1 %exitcond, label %for.end, label %for.body
441
442for.end: ; preds = %for.body, %entry
443 ret void
444}
445
446declare float @llvm.fabs.f32(float) nounwind readnone
447
448define void @fabs_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
449entry:
450 %cmp6 = icmp sgt i32 %n, 0
451 br i1 %cmp6, label %for.body, label %for.end
452
453for.body: ; preds = %entry, %for.body
454 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
455 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000456 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000457 %call = tail call double @llvm.fabs(double %0) nounwind readnone
458 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000459 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000460 %indvars.iv.next = add i64 %indvars.iv, 1
461 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
462 %exitcond = icmp eq i32 %lftr.wideiv, %n
463 br i1 %exitcond, label %for.end, label %for.body
464
465for.end: ; preds = %for.body, %entry
466 ret void
467}
468
469declare double @llvm.fabs(double) nounwind readnone
470
Hal Finkel0c5c01aa2013-08-19 23:35:46 +0000471;CHECK-LABEL: @copysign_f32(
472;CHECK: llvm.copysign.v4f32
473;CHECK: ret void
474define void @copysign_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
475entry:
476 %cmp6 = icmp sgt i32 %n, 0
477 br i1 %cmp6, label %for.body, label %for.end
478
479for.body: ; preds = %entry, %for.body
480 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
481 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
482 %0 = load float* %arrayidx, align 4
483 %arrayidx1 = getelementptr inbounds float* %z, i64 %indvars.iv
484 %1 = load float* %arrayidx1, align 4
485 %call = tail call float @llvm.copysign.f32(float %0, float %1) nounwind readnone
486 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
487 store float %call, float* %arrayidx2, align 4
488 %indvars.iv.next = add i64 %indvars.iv, 1
489 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
490 %exitcond = icmp eq i32 %lftr.wideiv, %n
491 br i1 %exitcond, label %for.end, label %for.body
492
493for.end: ; preds = %for.body, %entry
494 ret void
495}
496
497declare float @llvm.copysign.f32(float, float) nounwind readnone
498
499define void @copysign_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z) nounwind uwtable {
500entry:
501 %cmp6 = icmp sgt i32 %n, 0
502 br i1 %cmp6, label %for.body, label %for.end
503
504for.body: ; preds = %entry, %for.body
505 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
506 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
507 %0 = load double* %arrayidx, align 8
508 %arrayidx1 = getelementptr inbounds double* %z, i64 %indvars.iv
509 %1 = load double* %arrayidx, align 8
510 %call = tail call double @llvm.copysign(double %0, double %1) nounwind readnone
511 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
512 store double %call, double* %arrayidx2, align 8
513 %indvars.iv.next = add i64 %indvars.iv, 1
514 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
515 %exitcond = icmp eq i32 %lftr.wideiv, %n
516 br i1 %exitcond, label %for.end, label %for.body
517
518for.end: ; preds = %for.body, %entry
519 ret void
520}
521
522declare double @llvm.copysign(double, double) nounwind readnone
523
Stephen Linc1c7a132013-07-14 01:42:54 +0000524;CHECK-LABEL: @floor_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000525;CHECK: llvm.floor.v4f32
526;CHECK: ret void
527define void @floor_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
528entry:
529 %cmp6 = icmp sgt i32 %n, 0
530 br i1 %cmp6, label %for.body, label %for.end
531
532for.body: ; preds = %entry, %for.body
533 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
534 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000535 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000536 %call = tail call float @llvm.floor.f32(float %0) nounwind readnone
537 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000538 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000539 %indvars.iv.next = add i64 %indvars.iv, 1
540 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
541 %exitcond = icmp eq i32 %lftr.wideiv, %n
542 br i1 %exitcond, label %for.end, label %for.body
543
544for.end: ; preds = %for.body, %entry
545 ret void
546}
547
548declare float @llvm.floor.f32(float) nounwind readnone
549
Stephen Linc1c7a132013-07-14 01:42:54 +0000550;CHECK-LABEL: @floor_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000551;CHECK: llvm.floor.v4f64
552;CHECK: ret void
553define void @floor_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
554entry:
555 %cmp6 = icmp sgt i32 %n, 0
556 br i1 %cmp6, label %for.body, label %for.end
557
558for.body: ; preds = %entry, %for.body
559 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
560 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000561 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000562 %call = tail call double @llvm.floor.f64(double %0) nounwind readnone
563 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000564 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000565 %indvars.iv.next = add i64 %indvars.iv, 1
566 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
567 %exitcond = icmp eq i32 %lftr.wideiv, %n
568 br i1 %exitcond, label %for.end, label %for.body
569
570for.end: ; preds = %for.body, %entry
571 ret void
572}
573
574declare double @llvm.floor.f64(double) nounwind readnone
575
Stephen Linc1c7a132013-07-14 01:42:54 +0000576;CHECK-LABEL: @ceil_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000577;CHECK: llvm.ceil.v4f32
578;CHECK: ret void
579define void @ceil_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
580entry:
581 %cmp6 = icmp sgt i32 %n, 0
582 br i1 %cmp6, label %for.body, label %for.end
583
584for.body: ; preds = %entry, %for.body
585 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
586 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000587 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000588 %call = tail call float @llvm.ceil.f32(float %0) nounwind readnone
589 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000590 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000591 %indvars.iv.next = add i64 %indvars.iv, 1
592 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
593 %exitcond = icmp eq i32 %lftr.wideiv, %n
594 br i1 %exitcond, label %for.end, label %for.body
595
596for.end: ; preds = %for.body, %entry
597 ret void
598}
599
600declare float @llvm.ceil.f32(float) nounwind readnone
601
Stephen Linc1c7a132013-07-14 01:42:54 +0000602;CHECK-LABEL: @ceil_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000603;CHECK: llvm.ceil.v4f64
604;CHECK: ret void
605define void @ceil_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
606entry:
607 %cmp6 = icmp sgt i32 %n, 0
608 br i1 %cmp6, label %for.body, label %for.end
609
610for.body: ; preds = %entry, %for.body
611 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
612 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000613 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000614 %call = tail call double @llvm.ceil.f64(double %0) nounwind readnone
615 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000616 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000617 %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
621
622for.end: ; preds = %for.body, %entry
623 ret void
624}
625
626declare double @llvm.ceil.f64(double) nounwind readnone
627
Stephen Linc1c7a132013-07-14 01:42:54 +0000628;CHECK-LABEL: @trunc_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000629;CHECK: llvm.trunc.v4f32
630;CHECK: ret void
631define void @trunc_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
632entry:
633 %cmp6 = icmp sgt i32 %n, 0
634 br i1 %cmp6, label %for.body, label %for.end
635
636for.body: ; preds = %entry, %for.body
637 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
638 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000639 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000640 %call = tail call float @llvm.trunc.f32(float %0) nounwind readnone
641 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000642 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000643 %indvars.iv.next = add i64 %indvars.iv, 1
644 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
645 %exitcond = icmp eq i32 %lftr.wideiv, %n
646 br i1 %exitcond, label %for.end, label %for.body
647
648for.end: ; preds = %for.body, %entry
649 ret void
650}
651
652declare float @llvm.trunc.f32(float) nounwind readnone
653
Stephen Linc1c7a132013-07-14 01:42:54 +0000654;CHECK-LABEL: @trunc_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000655;CHECK: llvm.trunc.v4f64
656;CHECK: ret void
657define void @trunc_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
658entry:
659 %cmp6 = icmp sgt i32 %n, 0
660 br i1 %cmp6, label %for.body, label %for.end
661
662for.body: ; preds = %entry, %for.body
663 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
664 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000665 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000666 %call = tail call double @llvm.trunc.f64(double %0) nounwind readnone
667 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000668 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000669 %indvars.iv.next = add i64 %indvars.iv, 1
670 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
671 %exitcond = icmp eq i32 %lftr.wideiv, %n
672 br i1 %exitcond, label %for.end, label %for.body
673
674for.end: ; preds = %for.body, %entry
675 ret void
676}
677
678declare double @llvm.trunc.f64(double) nounwind readnone
679
Stephen Linc1c7a132013-07-14 01:42:54 +0000680;CHECK-LABEL: @rint_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000681;CHECK: llvm.rint.v4f32
682;CHECK: ret void
683define void @rint_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
684entry:
685 %cmp6 = icmp sgt i32 %n, 0
686 br i1 %cmp6, label %for.body, label %for.end
687
688for.body: ; preds = %entry, %for.body
689 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
690 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000691 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000692 %call = tail call float @llvm.rint.f32(float %0) nounwind readnone
693 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000694 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000695 %indvars.iv.next = add i64 %indvars.iv, 1
696 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
697 %exitcond = icmp eq i32 %lftr.wideiv, %n
698 br i1 %exitcond, label %for.end, label %for.body
699
700for.end: ; preds = %for.body, %entry
701 ret void
702}
703
704declare float @llvm.rint.f32(float) nounwind readnone
705
Stephen Linc1c7a132013-07-14 01:42:54 +0000706;CHECK-LABEL: @rint_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000707;CHECK: llvm.rint.v4f64
708;CHECK: ret void
709define void @rint_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
710entry:
711 %cmp6 = icmp sgt i32 %n, 0
712 br i1 %cmp6, label %for.body, label %for.end
713
714for.body: ; preds = %entry, %for.body
715 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
716 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000717 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000718 %call = tail call double @llvm.rint.f64(double %0) nounwind readnone
719 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000720 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000721 %indvars.iv.next = add i64 %indvars.iv, 1
722 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
723 %exitcond = icmp eq i32 %lftr.wideiv, %n
724 br i1 %exitcond, label %for.end, label %for.body
725
726for.end: ; preds = %for.body, %entry
727 ret void
728}
729
730declare double @llvm.rint.f64(double) nounwind readnone
731
Stephen Linc1c7a132013-07-14 01:42:54 +0000732;CHECK-LABEL: @nearbyint_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000733;CHECK: llvm.nearbyint.v4f32
734;CHECK: ret void
735define void @nearbyint_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
736entry:
737 %cmp6 = icmp sgt i32 %n, 0
738 br i1 %cmp6, label %for.body, label %for.end
739
740for.body: ; preds = %entry, %for.body
741 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
742 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000743 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000744 %call = tail call float @llvm.nearbyint.f32(float %0) nounwind readnone
745 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000746 store float %call, float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000747 %indvars.iv.next = add i64 %indvars.iv, 1
748 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
749 %exitcond = icmp eq i32 %lftr.wideiv, %n
750 br i1 %exitcond, label %for.end, label %for.body
751
752for.end: ; preds = %for.body, %entry
753 ret void
754}
755
756declare float @llvm.nearbyint.f32(float) nounwind readnone
757
Stephen Linc1c7a132013-07-14 01:42:54 +0000758;CHECK-LABEL: @nearbyint_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000759;CHECK: llvm.nearbyint.v4f64
760;CHECK: ret void
761define void @nearbyint_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
762entry:
763 %cmp6 = icmp sgt i32 %n, 0
764 br i1 %cmp6, label %for.body, label %for.end
765
766for.body: ; preds = %entry, %for.body
767 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
768 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000769 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000770 %call = tail call double @llvm.nearbyint.f64(double %0) nounwind readnone
771 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000772 store double %call, double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000773 %indvars.iv.next = add i64 %indvars.iv, 1
774 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
775 %exitcond = icmp eq i32 %lftr.wideiv, %n
776 br i1 %exitcond, label %for.end, label %for.body
777
778for.end: ; preds = %for.body, %entry
779 ret void
780}
781
782declare double @llvm.nearbyint.f64(double) nounwind readnone
783
Hal Finkel171817e2013-08-07 22:49:12 +0000784;CHECK-LABEL: @round_f32(
785;CHECK: llvm.round.v4f32
786;CHECK: ret void
787define void @round_f32(i32 %n, float* noalias %y, float* noalias %x) nounwind uwtable {
788entry:
789 %cmp6 = icmp sgt i32 %n, 0
790 br i1 %cmp6, label %for.body, label %for.end
791
792for.body: ; preds = %entry, %for.body
793 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
794 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
795 %0 = load float* %arrayidx, align 4
796 %call = tail call float @llvm.round.f32(float %0) nounwind readnone
797 %arrayidx2 = getelementptr inbounds float* %x, i64 %indvars.iv
798 store float %call, float* %arrayidx2, align 4
799 %indvars.iv.next = add i64 %indvars.iv, 1
800 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
801 %exitcond = icmp eq i32 %lftr.wideiv, %n
802 br i1 %exitcond, label %for.end, label %for.body
803
804for.end: ; preds = %for.body, %entry
805 ret void
806}
807
808declare float @llvm.round.f32(float) nounwind readnone
809
810;CHECK-LABEL: @round_f64(
811;CHECK: llvm.round.v4f64
812;CHECK: ret void
813define void @round_f64(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
814entry:
815 %cmp6 = icmp sgt i32 %n, 0
816 br i1 %cmp6, label %for.body, label %for.end
817
818for.body: ; preds = %entry, %for.body
819 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
820 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
821 %0 = load double* %arrayidx, align 8
822 %call = tail call double @llvm.round.f64(double %0) nounwind readnone
823 %arrayidx2 = getelementptr inbounds double* %x, i64 %indvars.iv
824 store double %call, double* %arrayidx2, align 8
825 %indvars.iv.next = add i64 %indvars.iv, 1
826 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
827 %exitcond = icmp eq i32 %lftr.wideiv, %n
828 br i1 %exitcond, label %for.end, label %for.body
829
830for.end: ; preds = %for.body, %entry
831 ret void
832}
833
834declare double @llvm.round.f64(double) nounwind readnone
835
Stephen Linc1c7a132013-07-14 01:42:54 +0000836;CHECK-LABEL: @fma_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000837;CHECK: llvm.fma.v4f32
838;CHECK: ret void
839define void @fma_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z, float* noalias %w) nounwind uwtable {
840entry:
841 %cmp12 = icmp sgt i32 %n, 0
842 br i1 %cmp12, label %for.body, label %for.end
843
844for.body: ; preds = %entry, %for.body
845 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
846 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000847 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000848 %arrayidx2 = getelementptr inbounds float* %w, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000849 %1 = load float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000850 %arrayidx4 = getelementptr inbounds float* %z, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000851 %2 = load float* %arrayidx4, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000852 %3 = tail call float @llvm.fma.f32(float %0, float %2, float %1)
853 %arrayidx6 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000854 store float %3, float* %arrayidx6, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000855 %indvars.iv.next = add i64 %indvars.iv, 1
856 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
857 %exitcond = icmp eq i32 %lftr.wideiv, %n
858 br i1 %exitcond, label %for.end, label %for.body
859
860for.end: ; preds = %for.body, %entry
861 ret void
862}
863
864declare float @llvm.fma.f32(float, float, float) nounwind readnone
865
Stephen Linc1c7a132013-07-14 01:42:54 +0000866;CHECK-LABEL: @fma_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000867;CHECK: llvm.fma.v4f64
868;CHECK: ret void
869define void @fma_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z, double* noalias %w) nounwind uwtable {
870entry:
871 %cmp12 = icmp sgt i32 %n, 0
872 br i1 %cmp12, label %for.body, label %for.end
873
874for.body: ; preds = %entry, %for.body
875 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
876 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000877 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000878 %arrayidx2 = getelementptr inbounds double* %w, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000879 %1 = load double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000880 %arrayidx4 = getelementptr inbounds double* %z, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000881 %2 = load double* %arrayidx4, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000882 %3 = tail call double @llvm.fma.f64(double %0, double %2, double %1)
883 %arrayidx6 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000884 store double %3, double* %arrayidx6, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000885 %indvars.iv.next = add i64 %indvars.iv, 1
886 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
887 %exitcond = icmp eq i32 %lftr.wideiv, %n
888 br i1 %exitcond, label %for.end, label %for.body
889
890for.end: ; preds = %for.body, %entry
891 ret void
892}
893
894declare double @llvm.fma.f64(double, double, double) nounwind readnone
895
Stephen Linc1c7a132013-07-14 01:42:54 +0000896;CHECK-LABEL: @fmuladd_f32(
Hal Finkelb44f8902012-12-25 23:21:29 +0000897;CHECK: llvm.fmuladd.v4f32
898;CHECK: ret void
899define void @fmuladd_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z, float* noalias %w) nounwind uwtable {
900entry:
901 %cmp12 = icmp sgt i32 %n, 0
902 br i1 %cmp12, label %for.body, label %for.end
903
904for.body: ; preds = %entry, %for.body
905 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
906 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000907 %0 = load float* %arrayidx, align 4
Hal Finkelb44f8902012-12-25 23:21:29 +0000908 %arrayidx2 = getelementptr inbounds float* %w, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000909 %1 = load float* %arrayidx2, align 4
Hal Finkelb44f8902012-12-25 23:21:29 +0000910 %arrayidx4 = getelementptr inbounds float* %z, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000911 %2 = load float* %arrayidx4, align 4
Hal Finkelb44f8902012-12-25 23:21:29 +0000912 %3 = tail call float @llvm.fmuladd.f32(float %0, float %2, float %1)
913 %arrayidx6 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000914 store float %3, float* %arrayidx6, align 4
Hal Finkelb44f8902012-12-25 23:21:29 +0000915 %indvars.iv.next = add i64 %indvars.iv, 1
916 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
917 %exitcond = icmp eq i32 %lftr.wideiv, %n
918 br i1 %exitcond, label %for.end, label %for.body
919
920for.end: ; preds = %for.body, %entry
921 ret void
922}
923
924declare float @llvm.fmuladd.f32(float, float, float) nounwind readnone
925
Stephen Linc1c7a132013-07-14 01:42:54 +0000926;CHECK-LABEL: @fmuladd_f64(
Hal Finkelb44f8902012-12-25 23:21:29 +0000927;CHECK: llvm.fmuladd.v4f64
928;CHECK: ret void
929define void @fmuladd_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z, double* noalias %w) nounwind uwtable {
930entry:
931 %cmp12 = icmp sgt i32 %n, 0
932 br i1 %cmp12, label %for.body, label %for.end
933
934for.body: ; preds = %entry, %for.body
935 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
936 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000937 %0 = load double* %arrayidx, align 8
Hal Finkelb44f8902012-12-25 23:21:29 +0000938 %arrayidx2 = getelementptr inbounds double* %w, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000939 %1 = load double* %arrayidx2, align 8
Hal Finkelb44f8902012-12-25 23:21:29 +0000940 %arrayidx4 = getelementptr inbounds double* %z, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000941 %2 = load double* %arrayidx4, align 8
Hal Finkelb44f8902012-12-25 23:21:29 +0000942 %3 = tail call double @llvm.fmuladd.f64(double %0, double %2, double %1)
943 %arrayidx6 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000944 store double %3, double* %arrayidx6, align 8
Hal Finkelb44f8902012-12-25 23:21:29 +0000945 %indvars.iv.next = add i64 %indvars.iv, 1
946 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
947 %exitcond = icmp eq i32 %lftr.wideiv, %n
948 br i1 %exitcond, label %for.end, label %for.body
949
950for.end: ; preds = %for.body, %entry
951 ret void
952}
953
954declare double @llvm.fmuladd.f64(double, double, double) nounwind readnone
955
Stephen Linc1c7a132013-07-14 01:42:54 +0000956;CHECK-LABEL: @pow_f32(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000957;CHECK: llvm.pow.v4f32
958;CHECK: ret void
959define void @pow_f32(i32 %n, float* noalias %y, float* noalias %x, float* noalias %z) nounwind uwtable {
960entry:
961 %cmp9 = icmp sgt i32 %n, 0
962 br i1 %cmp9, label %for.body, label %for.end
963
964for.body: ; preds = %entry, %for.body
965 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
966 %arrayidx = getelementptr inbounds float* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000967 %0 = load float* %arrayidx, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000968 %arrayidx2 = getelementptr inbounds float* %z, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000969 %1 = load float* %arrayidx2, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000970 %call = tail call float @llvm.pow.f32(float %0, float %1) nounwind readnone
971 %arrayidx4 = getelementptr inbounds float* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000972 store float %call, float* %arrayidx4, align 4
Paul Redmond2adb13c2012-12-09 20:42:17 +0000973 %indvars.iv.next = add i64 %indvars.iv, 1
974 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
975 %exitcond = icmp eq i32 %lftr.wideiv, %n
976 br i1 %exitcond, label %for.end, label %for.body
977
978for.end: ; preds = %for.body, %entry
979 ret void
980}
981
982declare float @llvm.pow.f32(float, float) nounwind readnone
983
Stephen Linc1c7a132013-07-14 01:42:54 +0000984;CHECK-LABEL: @pow_f64(
Paul Redmond2adb13c2012-12-09 20:42:17 +0000985;CHECK: llvm.pow.v4f64
986;CHECK: ret void
987define void @pow_f64(i32 %n, double* noalias %y, double* noalias %x, double* noalias %z) nounwind uwtable {
988entry:
989 %cmp9 = icmp sgt i32 %n, 0
990 br i1 %cmp9, label %for.body, label %for.end
991
992for.body: ; preds = %entry, %for.body
993 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
994 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000995 %0 = load double* %arrayidx, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000996 %arrayidx2 = getelementptr inbounds double* %z, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +0000997 %1 = load double* %arrayidx2, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +0000998 %call = tail call double @llvm.pow.f64(double %0, double %1) nounwind readnone
999 %arrayidx4 = getelementptr inbounds double* %x, i64 %indvars.iv
Manman Ren16649b02013-05-02 18:11:35 +00001000 store double %call, double* %arrayidx4, align 8
Paul Redmond2adb13c2012-12-09 20:42:17 +00001001 %indvars.iv.next = add i64 %indvars.iv, 1
1002 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1003 %exitcond = icmp eq i32 %lftr.wideiv, %n
1004 br i1 %exitcond, label %for.end, label %for.body
1005
1006for.end: ; preds = %for.body, %entry
1007 ret void
1008}
1009
Benjamin Kramerdc145812013-02-27 15:24:19 +00001010; CHECK: fabs_libm
1011; CHECK: call <4 x float> @llvm.fabs.v4f32
1012; CHECK: ret void
1013define void @fabs_libm(float* nocapture %x) nounwind {
1014entry:
1015 br label %for.body
1016
1017for.body: ; preds = %entry, %for.body
1018 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1019 %arrayidx = getelementptr inbounds float* %x, i64 %indvars.iv
1020 %0 = load float* %arrayidx, align 4
Arnold Schwaighofer22639402013-09-23 14:54:39 +00001021 %call = tail call float @fabsf(float %0) nounwind readnone
Benjamin Kramerdc145812013-02-27 15:24:19 +00001022 store float %call, float* %arrayidx, align 4
1023 %indvars.iv.next = add i64 %indvars.iv, 1
1024 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1025 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1026 br i1 %exitcond, label %for.end, label %for.body
1027
1028for.end: ; preds = %for.body
1029 ret void
1030}
1031
Arnold Schwaighofer22639402013-09-23 14:54:39 +00001032declare float @fabsf(float) nounwind readnone
1033
Paul Redmond2adb13c2012-12-09 20:42:17 +00001034declare double @llvm.pow.f64(double, double) nounwind readnone
Nadav Rotem33711722013-09-21 00:27:05 +00001035
1036
Nadav Rotem33711722013-09-21 00:27:05 +00001037
Arnold Schwaighofer22639402013-09-23 14:54:39 +00001038; Make sure we don't replace calls to functions with standard library function
1039; signatures but defined with internal linkage.
1040
1041define internal float @roundf(float %x) nounwind readnone {
1042 ret float 0.00000000
1043}
1044; CHECK-LABEL: internal_round
1045; CHECK-NOT: load <4 x float>
1046
1047define void @internal_round(float* nocapture %x) nounwind {
1048entry:
1049 br label %for.body
1050
1051for.body: ; preds = %entry, %for.body
1052 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1053 %arrayidx = getelementptr inbounds float* %x, i64 %indvars.iv
1054 %0 = load float* %arrayidx, align 4
1055 %call = tail call float @roundf(float %0) nounwind readnone
1056 store float %call, float* %arrayidx, align 4
Nadav Rotem33711722013-09-21 00:27:05 +00001057 %indvars.iv.next = add i64 %indvars.iv, 1
1058 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
Arnold Schwaighofer22639402013-09-23 14:54:39 +00001059 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1060 br i1 %exitcond, label %for.end, label %for.body
Nadav Rotem33711722013-09-21 00:27:05 +00001061
Arnold Schwaighofer22639402013-09-23 14:54:39 +00001062for.end: ; preds = %for.body
Nadav Rotem33711722013-09-21 00:27:05 +00001063 ret void
1064}
1065
Arnold Schwaighofer22639402013-09-23 14:54:39 +00001066; Make sure we don't replace calls to functions with standard library names but
1067; different signatures.
1068
1069declare void @round(double %f)
1070
1071; CHECK-LABEL: wrong_signature
1072; CHECK-NOT: load <4 x double>
1073
1074define void @wrong_signature(double* nocapture %x) nounwind {
1075entry:
1076 br label %for.body
1077
1078for.body: ; preds = %entry, %for.body
1079 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
1080 %arrayidx = getelementptr inbounds double* %x, i64 %indvars.iv
1081 %0 = load double* %arrayidx, align 4
1082 store double %0, double* %arrayidx, align 4
1083 tail call void @round(double %0) nounwind readnone
1084 %indvars.iv.next = add i64 %indvars.iv, 1
1085 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1086 %exitcond = icmp eq i32 %lftr.wideiv, 1024
1087 br i1 %exitcond, label %for.end, label %for.body
1088
1089for.end: ; preds = %for.body
1090 ret void
1091}
1092
Karthik Bhat5ab77952014-05-30 04:31:24 +00001093declare double @llvm.powi.f64(double %Val, i32 %power) nounwind readnone
1094
1095;CHECK-LABEL: @powi_f64(
1096;CHECK: llvm.powi.v4f64
1097;CHECK: ret void
1098define void @powi_f64(i32 %n, double* noalias %y, double* noalias %x, i32 %P) nounwind uwtable {
1099entry:
1100 %cmp9 = icmp sgt i32 %n, 0
1101 br i1 %cmp9, label %for.body, label %for.end
1102
1103for.body: ; preds = %entry, %for.body
1104 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1105 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
1106 %0 = load double* %arrayidx, align 8
1107 %call = tail call double @llvm.powi.f64(double %0, i32 %P) nounwind readnone
1108 %arrayidx4 = getelementptr inbounds double* %x, i64 %indvars.iv
1109 store double %call, double* %arrayidx4, align 8
1110 %indvars.iv.next = add i64 %indvars.iv, 1
1111 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1112 %exitcond = icmp eq i32 %lftr.wideiv, %n
1113 br i1 %exitcond, label %for.end, label %for.body
1114
1115for.end: ; preds = %for.body, %entry
1116 ret void
1117}
1118
1119;CHECK-LABEL: @powi_f64_neg(
1120;CHECK-NOT: llvm.powi.v4f64
1121;CHECK: ret void
1122define void @powi_f64_neg(i32 %n, double* noalias %y, double* noalias %x) nounwind uwtable {
1123entry:
1124 %cmp9 = icmp sgt i32 %n, 0
1125 br i1 %cmp9, label %for.body, label %for.end
1126
1127for.body: ; preds = %entry, %for.body
1128 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1129 %arrayidx = getelementptr inbounds double* %y, i64 %indvars.iv
1130 %0 = load double* %arrayidx, align 8
1131 %1 = trunc i64 %indvars.iv to i32
1132 %call = tail call double @llvm.powi.f64(double %0, i32 %1) nounwind readnone
1133 %arrayidx4 = getelementptr inbounds double* %x, i64 %indvars.iv
1134 store double %call, double* %arrayidx4, align 8
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, %n
1138 br i1 %exitcond, label %for.end, label %for.body
1139
1140for.end: ; preds = %for.body, %entry
1141 ret void
1142}
1143
1144declare i64 @llvm.cttz.i64 (i64, i1) nounwind readnone
1145
1146;CHECK-LABEL: @cttz_f64(
1147;CHECK: llvm.cttz.v4i64
1148;CHECK: ret void
1149define void @cttz_f64(i32 %n, i64* noalias %y, i64* noalias %x) nounwind uwtable {
1150entry:
1151 %cmp9 = icmp sgt i32 %n, 0
1152 br i1 %cmp9, label %for.body, label %for.end
1153
1154for.body: ; preds = %entry, %for.body
1155 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1156 %arrayidx = getelementptr inbounds i64* %y, i64 %indvars.iv
1157 %0 = load i64* %arrayidx, align 8
1158 %call = tail call i64 @llvm.cttz.i64(i64 %0, i1 true) nounwind readnone
1159 %arrayidx4 = getelementptr inbounds i64* %x, i64 %indvars.iv
1160 store i64 %call, i64* %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
1165
1166for.end: ; preds = %for.body, %entry
1167 ret void
1168}
1169
1170declare i64 @llvm.ctlz.i64 (i64, i1) nounwind readnone
1171
1172;CHECK-LABEL: @ctlz_f64(
1173;CHECK: llvm.ctlz.v4i64
1174;CHECK: ret void
1175define void @ctlz_f64(i32 %n, i64* noalias %y, i64* noalias %x) nounwind uwtable {
1176entry:
1177 %cmp9 = icmp sgt i32 %n, 0
1178 br i1 %cmp9, label %for.body, label %for.end
1179
1180for.body: ; preds = %entry, %for.body
1181 %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %entry ]
1182 %arrayidx = getelementptr inbounds i64* %y, i64 %indvars.iv
1183 %0 = load i64* %arrayidx, align 8
1184 %call = tail call i64 @llvm.ctlz.i64(i64 %0, i1 true) nounwind readnone
1185 %arrayidx4 = getelementptr inbounds i64* %x, i64 %indvars.iv
1186 store i64 %call, i64* %arrayidx4, align 8
1187 %indvars.iv.next = add i64 %indvars.iv, 1
1188 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
1189 %exitcond = icmp eq i32 %lftr.wideiv, %n
1190 br i1 %exitcond, label %for.end, label %for.body
1191
1192for.end: ; preds = %for.body, %entry
1193 ret void
1194}