1
; RUN: llc < %s -march=x86 | not grep cmov
3
; LSR should be able to eliminate the max computations by
4
; making the loops use slt/ult comparisons instead of ne comparisons.
6
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
7
target triple = "i386-apple-darwin9"
9
define void @foo(i8* %r, i32 %s, i32 %w, i32 %x, i8* %j, i32 %d) nounwind {
11
%0 = mul i32 %x, %w ; <i32> [#uses=2]
12
%1 = mul i32 %x, %w ; <i32> [#uses=1]
13
%2 = sdiv i32 %1, 4 ; <i32> [#uses=1]
14
%.sum2 = add i32 %2, %0 ; <i32> [#uses=2]
15
%cond = icmp eq i32 %d, 1 ; <i1> [#uses=1]
16
br i1 %cond, label %bb29, label %bb10.preheader
18
bb10.preheader: ; preds = %entry
19
%3 = icmp sgt i32 %x, 0 ; <i1> [#uses=1]
20
br i1 %3, label %bb.nph9, label %bb18.loopexit
22
bb.nph7: ; preds = %bb7.preheader
23
%4 = mul i32 %y.08, %w ; <i32> [#uses=1]
24
%5 = mul i32 %y.08, %s ; <i32> [#uses=1]
25
%6 = add i32 %5, 1 ; <i32> [#uses=1]
26
%tmp8 = icmp sgt i32 1, %w ; <i1> [#uses=1]
27
%smax9 = select i1 %tmp8, i32 1, i32 %w ; <i32> [#uses=1]
30
bb6: ; preds = %bb7, %bb.nph7
31
%x.06 = phi i32 [ 0, %bb.nph7 ], [ %indvar.next7, %bb7 ] ; <i32> [#uses=3]
32
%7 = add i32 %x.06, %4 ; <i32> [#uses=1]
33
%8 = shl i32 %x.06, 1 ; <i32> [#uses=1]
34
%9 = add i32 %6, %8 ; <i32> [#uses=1]
35
%10 = getelementptr i8* %r, i32 %9 ; <i8*> [#uses=1]
36
%11 = load i8* %10, align 1 ; <i8> [#uses=1]
37
%12 = getelementptr i8* %j, i32 %7 ; <i8*> [#uses=1]
38
store i8 %11, i8* %12, align 1
42
%indvar.next7 = add i32 %x.06, 1 ; <i32> [#uses=2]
43
%exitcond10 = icmp ne i32 %indvar.next7, %smax9 ; <i1> [#uses=1]
44
br i1 %exitcond10, label %bb6, label %bb7.bb9_crit_edge
46
bb7.bb9_crit_edge: ; preds = %bb7
49
bb9: ; preds = %bb7.preheader, %bb7.bb9_crit_edge
53
%indvar.next11 = add i32 %y.08, 1 ; <i32> [#uses=2]
54
%exitcond12 = icmp ne i32 %indvar.next11, %x ; <i1> [#uses=1]
55
br i1 %exitcond12, label %bb7.preheader, label %bb10.bb18.loopexit_crit_edge
57
bb10.bb18.loopexit_crit_edge: ; preds = %bb10
58
br label %bb10.bb18.loopexit_crit_edge.split
60
bb10.bb18.loopexit_crit_edge.split: ; preds = %bb.nph9, %bb10.bb18.loopexit_crit_edge
61
br label %bb18.loopexit
63
bb.nph9: ; preds = %bb10.preheader
64
%13 = icmp sgt i32 %w, 0 ; <i1> [#uses=1]
65
br i1 %13, label %bb.nph9.split, label %bb10.bb18.loopexit_crit_edge.split
67
bb.nph9.split: ; preds = %bb.nph9
68
br label %bb7.preheader
70
bb7.preheader: ; preds = %bb.nph9.split, %bb10
71
%y.08 = phi i32 [ 0, %bb.nph9.split ], [ %indvar.next11, %bb10 ] ; <i32> [#uses=3]
72
br i1 true, label %bb.nph7, label %bb9
74
bb.nph5: ; preds = %bb18.loopexit
75
%14 = sdiv i32 %w, 2 ; <i32> [#uses=1]
76
%15 = icmp slt i32 %w, 2 ; <i1> [#uses=1]
77
%16 = sdiv i32 %x, 2 ; <i32> [#uses=2]
78
br i1 %15, label %bb18.bb20_crit_edge.split, label %bb.nph5.split
80
bb.nph5.split: ; preds = %bb.nph5
81
%tmp2 = icmp sgt i32 1, %16 ; <i1> [#uses=1]
82
%smax3 = select i1 %tmp2, i32 1, i32 %16 ; <i32> [#uses=1]
85
bb13: ; preds = %bb18, %bb.nph5.split
86
%y.14 = phi i32 [ 0, %bb.nph5.split ], [ %indvar.next1, %bb18 ] ; <i32> [#uses=4]
87
%17 = mul i32 %14, %y.14 ; <i32> [#uses=2]
88
%18 = shl i32 %y.14, 1 ; <i32> [#uses=1]
89
%19 = srem i32 %y.14, 2 ; <i32> [#uses=1]
90
%20 = add i32 %19, %18 ; <i32> [#uses=1]
91
%21 = mul i32 %20, %s ; <i32> [#uses=2]
92
br i1 true, label %bb.nph3, label %bb17
94
bb.nph3: ; preds = %bb13
95
%22 = add i32 %17, %0 ; <i32> [#uses=1]
96
%23 = add i32 %17, %.sum2 ; <i32> [#uses=1]
97
%24 = sdiv i32 %w, 2 ; <i32> [#uses=2]
98
%tmp = icmp sgt i32 1, %24 ; <i1> [#uses=1]
99
%smax = select i1 %tmp, i32 1, i32 %24 ; <i32> [#uses=1]
102
bb14: ; preds = %bb15, %bb.nph3
103
%x.12 = phi i32 [ 0, %bb.nph3 ], [ %indvar.next, %bb15 ] ; <i32> [#uses=5]
104
%25 = shl i32 %x.12, 2 ; <i32> [#uses=1]
105
%26 = add i32 %25, %21 ; <i32> [#uses=1]
106
%27 = getelementptr i8* %r, i32 %26 ; <i8*> [#uses=1]
107
%28 = load i8* %27, align 1 ; <i8> [#uses=1]
108
%.sum = add i32 %22, %x.12 ; <i32> [#uses=1]
109
%29 = getelementptr i8* %j, i32 %.sum ; <i8*> [#uses=1]
110
store i8 %28, i8* %29, align 1
111
%30 = shl i32 %x.12, 2 ; <i32> [#uses=1]
112
%31 = or i32 %30, 2 ; <i32> [#uses=1]
113
%32 = add i32 %31, %21 ; <i32> [#uses=1]
114
%33 = getelementptr i8* %r, i32 %32 ; <i8*> [#uses=1]
115
%34 = load i8* %33, align 1 ; <i8> [#uses=1]
116
%.sum6 = add i32 %23, %x.12 ; <i32> [#uses=1]
117
%35 = getelementptr i8* %j, i32 %.sum6 ; <i8*> [#uses=1]
118
store i8 %34, i8* %35, align 1
121
bb15: ; preds = %bb14
122
%indvar.next = add i32 %x.12, 1 ; <i32> [#uses=2]
123
%exitcond = icmp ne i32 %indvar.next, %smax ; <i1> [#uses=1]
124
br i1 %exitcond, label %bb14, label %bb15.bb17_crit_edge
126
bb15.bb17_crit_edge: ; preds = %bb15
129
bb17: ; preds = %bb15.bb17_crit_edge, %bb13
132
bb18.loopexit: ; preds = %bb10.bb18.loopexit_crit_edge.split, %bb10.preheader
133
%36 = icmp slt i32 %x, 2 ; <i1> [#uses=1]
134
br i1 %36, label %bb20, label %bb.nph5
136
bb18: ; preds = %bb17
137
%indvar.next1 = add i32 %y.14, 1 ; <i32> [#uses=2]
138
%exitcond4 = icmp ne i32 %indvar.next1, %smax3 ; <i1> [#uses=1]
139
br i1 %exitcond4, label %bb13, label %bb18.bb20_crit_edge
141
bb18.bb20_crit_edge: ; preds = %bb18
142
br label %bb18.bb20_crit_edge.split
144
bb18.bb20_crit_edge.split: ; preds = %bb18.bb20_crit_edge, %bb.nph5
147
bb20: ; preds = %bb18.bb20_crit_edge.split, %bb18.loopexit
148
switch i32 %d, label %return [
153
bb22: ; preds = %bb20
154
%37 = mul i32 %x, %w ; <i32> [#uses=1]
155
%38 = sdiv i32 %37, 4 ; <i32> [#uses=1]
156
%.sum3 = add i32 %38, %.sum2 ; <i32> [#uses=2]
157
%39 = add i32 %x, 15 ; <i32> [#uses=1]
158
%40 = and i32 %39, -16 ; <i32> [#uses=1]
159
%41 = add i32 %w, 15 ; <i32> [#uses=1]
160
%42 = and i32 %41, -16 ; <i32> [#uses=1]
161
%43 = mul i32 %40, %s ; <i32> [#uses=1]
162
%44 = icmp sgt i32 %x, 0 ; <i1> [#uses=1]
163
br i1 %44, label %bb.nph, label %bb26
165
bb.nph: ; preds = %bb22
168
bb23: ; preds = %bb24, %bb.nph
169
%y.21 = phi i32 [ 0, %bb.nph ], [ %indvar.next5, %bb24 ] ; <i32> [#uses=3]
170
%45 = mul i32 %y.21, %42 ; <i32> [#uses=1]
171
%.sum1 = add i32 %45, %43 ; <i32> [#uses=1]
172
%46 = getelementptr i8* %r, i32 %.sum1 ; <i8*> [#uses=1]
173
%47 = mul i32 %y.21, %w ; <i32> [#uses=1]
174
%.sum5 = add i32 %47, %.sum3 ; <i32> [#uses=1]
175
%48 = getelementptr i8* %j, i32 %.sum5 ; <i8*> [#uses=1]
176
tail call void @llvm.memcpy.i32(i8* %48, i8* %46, i32 %w, i32 1)
179
bb24: ; preds = %bb23
180
%indvar.next5 = add i32 %y.21, 1 ; <i32> [#uses=2]
181
%exitcond6 = icmp ne i32 %indvar.next5, %x ; <i1> [#uses=1]
182
br i1 %exitcond6, label %bb23, label %bb24.bb26_crit_edge
184
bb24.bb26_crit_edge: ; preds = %bb24
187
bb26: ; preds = %bb24.bb26_crit_edge, %bb22
188
%49 = mul i32 %x, %w ; <i32> [#uses=1]
189
%.sum4 = add i32 %.sum3, %49 ; <i32> [#uses=1]
190
%50 = getelementptr i8* %j, i32 %.sum4 ; <i8*> [#uses=1]
191
%51 = mul i32 %x, %w ; <i32> [#uses=1]
192
%52 = sdiv i32 %51, 2 ; <i32> [#uses=1]
193
tail call void @llvm.memset.i32(i8* %50, i8 -128, i32 %52, i32 1)
196
bb29: ; preds = %bb20, %entry
197
%53 = add i32 %w, 15 ; <i32> [#uses=1]
198
%54 = and i32 %53, -16 ; <i32> [#uses=1]
199
%55 = icmp sgt i32 %x, 0 ; <i1> [#uses=1]
200
br i1 %55, label %bb.nph11, label %bb33
202
bb.nph11: ; preds = %bb29
205
bb30: ; preds = %bb31, %bb.nph11
206
%y.310 = phi i32 [ 0, %bb.nph11 ], [ %indvar.next13, %bb31 ] ; <i32> [#uses=3]
207
%56 = mul i32 %y.310, %54 ; <i32> [#uses=1]
208
%57 = getelementptr i8* %r, i32 %56 ; <i8*> [#uses=1]
209
%58 = mul i32 %y.310, %w ; <i32> [#uses=1]
210
%59 = getelementptr i8* %j, i32 %58 ; <i8*> [#uses=1]
211
tail call void @llvm.memcpy.i32(i8* %59, i8* %57, i32 %w, i32 1)
214
bb31: ; preds = %bb30
215
%indvar.next13 = add i32 %y.310, 1 ; <i32> [#uses=2]
216
%exitcond14 = icmp ne i32 %indvar.next13, %x ; <i1> [#uses=1]
217
br i1 %exitcond14, label %bb30, label %bb31.bb33_crit_edge
219
bb31.bb33_crit_edge: ; preds = %bb31
222
bb33: ; preds = %bb31.bb33_crit_edge, %bb29
223
%60 = mul i32 %x, %w ; <i32> [#uses=1]
224
%61 = getelementptr i8* %j, i32 %60 ; <i8*> [#uses=1]
225
%62 = mul i32 %x, %w ; <i32> [#uses=1]
226
%63 = sdiv i32 %62, 2 ; <i32> [#uses=1]
227
tail call void @llvm.memset.i32(i8* %61, i8 -128, i32 %63, i32 1)
230
return: ; preds = %bb20
234
define void @bar(i8* %r, i32 %s, i32 %w, i32 %x, i8* %j, i32 %d) nounwind {
236
%0 = mul i32 %x, %w ; <i32> [#uses=2]
237
%1 = mul i32 %x, %w ; <i32> [#uses=1]
238
%2 = udiv i32 %1, 4 ; <i32> [#uses=1]
239
%.sum2 = add i32 %2, %0 ; <i32> [#uses=2]
240
%cond = icmp eq i32 %d, 1 ; <i1> [#uses=1]
241
br i1 %cond, label %bb29, label %bb10.preheader
243
bb10.preheader: ; preds = %entry
244
%3 = icmp ne i32 %x, 0 ; <i1> [#uses=1]
245
br i1 %3, label %bb.nph9, label %bb18.loopexit
247
bb.nph7: ; preds = %bb7.preheader
248
%4 = mul i32 %y.08, %w ; <i32> [#uses=1]
249
%5 = mul i32 %y.08, %s ; <i32> [#uses=1]
250
%6 = add i32 %5, 1 ; <i32> [#uses=1]
251
%tmp8 = icmp ugt i32 1, %w ; <i1> [#uses=1]
252
%smax9 = select i1 %tmp8, i32 1, i32 %w ; <i32> [#uses=1]
255
bb6: ; preds = %bb7, %bb.nph7
256
%x.06 = phi i32 [ 0, %bb.nph7 ], [ %indvar.next7, %bb7 ] ; <i32> [#uses=3]
257
%7 = add i32 %x.06, %4 ; <i32> [#uses=1]
258
%8 = shl i32 %x.06, 1 ; <i32> [#uses=1]
259
%9 = add i32 %6, %8 ; <i32> [#uses=1]
260
%10 = getelementptr i8* %r, i32 %9 ; <i8*> [#uses=1]
261
%11 = load i8* %10, align 1 ; <i8> [#uses=1]
262
%12 = getelementptr i8* %j, i32 %7 ; <i8*> [#uses=1]
263
store i8 %11, i8* %12, align 1
267
%indvar.next7 = add i32 %x.06, 1 ; <i32> [#uses=2]
268
%exitcond10 = icmp ne i32 %indvar.next7, %smax9 ; <i1> [#uses=1]
269
br i1 %exitcond10, label %bb6, label %bb7.bb9_crit_edge
271
bb7.bb9_crit_edge: ; preds = %bb7
274
bb9: ; preds = %bb7.preheader, %bb7.bb9_crit_edge
278
%indvar.next11 = add i32 %y.08, 1 ; <i32> [#uses=2]
279
%exitcond12 = icmp ne i32 %indvar.next11, %x ; <i1> [#uses=1]
280
br i1 %exitcond12, label %bb7.preheader, label %bb10.bb18.loopexit_crit_edge
282
bb10.bb18.loopexit_crit_edge: ; preds = %bb10
283
br label %bb10.bb18.loopexit_crit_edge.split
285
bb10.bb18.loopexit_crit_edge.split: ; preds = %bb.nph9, %bb10.bb18.loopexit_crit_edge
286
br label %bb18.loopexit
288
bb.nph9: ; preds = %bb10.preheader
289
%13 = icmp ugt i32 %w, 0 ; <i1> [#uses=1]
290
br i1 %13, label %bb.nph9.split, label %bb10.bb18.loopexit_crit_edge.split
292
bb.nph9.split: ; preds = %bb.nph9
293
br label %bb7.preheader
295
bb7.preheader: ; preds = %bb.nph9.split, %bb10
296
%y.08 = phi i32 [ 0, %bb.nph9.split ], [ %indvar.next11, %bb10 ] ; <i32> [#uses=3]
297
br i1 true, label %bb.nph7, label %bb9
299
bb.nph5: ; preds = %bb18.loopexit
300
%14 = udiv i32 %w, 2 ; <i32> [#uses=1]
301
%15 = icmp ult i32 %w, 2 ; <i1> [#uses=1]
302
%16 = udiv i32 %x, 2 ; <i32> [#uses=2]
303
br i1 %15, label %bb18.bb20_crit_edge.split, label %bb.nph5.split
305
bb.nph5.split: ; preds = %bb.nph5
306
%tmp2 = icmp ugt i32 1, %16 ; <i1> [#uses=1]
307
%smax3 = select i1 %tmp2, i32 1, i32 %16 ; <i32> [#uses=1]
310
bb13: ; preds = %bb18, %bb.nph5.split
311
%y.14 = phi i32 [ 0, %bb.nph5.split ], [ %indvar.next1, %bb18 ] ; <i32> [#uses=4]
312
%17 = mul i32 %14, %y.14 ; <i32> [#uses=2]
313
%18 = shl i32 %y.14, 1 ; <i32> [#uses=1]
314
%19 = urem i32 %y.14, 2 ; <i32> [#uses=1]
315
%20 = add i32 %19, %18 ; <i32> [#uses=1]
316
%21 = mul i32 %20, %s ; <i32> [#uses=2]
317
br i1 true, label %bb.nph3, label %bb17
319
bb.nph3: ; preds = %bb13
320
%22 = add i32 %17, %0 ; <i32> [#uses=1]
321
%23 = add i32 %17, %.sum2 ; <i32> [#uses=1]
322
%24 = udiv i32 %w, 2 ; <i32> [#uses=2]
323
%tmp = icmp ugt i32 1, %24 ; <i1> [#uses=1]
324
%smax = select i1 %tmp, i32 1, i32 %24 ; <i32> [#uses=1]
327
bb14: ; preds = %bb15, %bb.nph3
328
%x.12 = phi i32 [ 0, %bb.nph3 ], [ %indvar.next, %bb15 ] ; <i32> [#uses=5]
329
%25 = shl i32 %x.12, 2 ; <i32> [#uses=1]
330
%26 = add i32 %25, %21 ; <i32> [#uses=1]
331
%27 = getelementptr i8* %r, i32 %26 ; <i8*> [#uses=1]
332
%28 = load i8* %27, align 1 ; <i8> [#uses=1]
333
%.sum = add i32 %22, %x.12 ; <i32> [#uses=1]
334
%29 = getelementptr i8* %j, i32 %.sum ; <i8*> [#uses=1]
335
store i8 %28, i8* %29, align 1
336
%30 = shl i32 %x.12, 2 ; <i32> [#uses=1]
337
%31 = or i32 %30, 2 ; <i32> [#uses=1]
338
%32 = add i32 %31, %21 ; <i32> [#uses=1]
339
%33 = getelementptr i8* %r, i32 %32 ; <i8*> [#uses=1]
340
%34 = load i8* %33, align 1 ; <i8> [#uses=1]
341
%.sum6 = add i32 %23, %x.12 ; <i32> [#uses=1]
342
%35 = getelementptr i8* %j, i32 %.sum6 ; <i8*> [#uses=1]
343
store i8 %34, i8* %35, align 1
346
bb15: ; preds = %bb14
347
%indvar.next = add i32 %x.12, 1 ; <i32> [#uses=2]
348
%exitcond = icmp ne i32 %indvar.next, %smax ; <i1> [#uses=1]
349
br i1 %exitcond, label %bb14, label %bb15.bb17_crit_edge
351
bb15.bb17_crit_edge: ; preds = %bb15
354
bb17: ; preds = %bb15.bb17_crit_edge, %bb13
357
bb18.loopexit: ; preds = %bb10.bb18.loopexit_crit_edge.split, %bb10.preheader
358
%36 = icmp ult i32 %x, 2 ; <i1> [#uses=1]
359
br i1 %36, label %bb20, label %bb.nph5
361
bb18: ; preds = %bb17
362
%indvar.next1 = add i32 %y.14, 1 ; <i32> [#uses=2]
363
%exitcond4 = icmp ne i32 %indvar.next1, %smax3 ; <i1> [#uses=1]
364
br i1 %exitcond4, label %bb13, label %bb18.bb20_crit_edge
366
bb18.bb20_crit_edge: ; preds = %bb18
367
br label %bb18.bb20_crit_edge.split
369
bb18.bb20_crit_edge.split: ; preds = %bb18.bb20_crit_edge, %bb.nph5
372
bb20: ; preds = %bb18.bb20_crit_edge.split, %bb18.loopexit
373
switch i32 %d, label %return [
378
bb22: ; preds = %bb20
379
%37 = mul i32 %x, %w ; <i32> [#uses=1]
380
%38 = udiv i32 %37, 4 ; <i32> [#uses=1]
381
%.sum3 = add i32 %38, %.sum2 ; <i32> [#uses=2]
382
%39 = add i32 %x, 15 ; <i32> [#uses=1]
383
%40 = and i32 %39, -16 ; <i32> [#uses=1]
384
%41 = add i32 %w, 15 ; <i32> [#uses=1]
385
%42 = and i32 %41, -16 ; <i32> [#uses=1]
386
%43 = mul i32 %40, %s ; <i32> [#uses=1]
387
%44 = icmp ugt i32 %x, 0 ; <i1> [#uses=1]
388
br i1 %44, label %bb.nph, label %bb26
390
bb.nph: ; preds = %bb22
393
bb23: ; preds = %bb24, %bb.nph
394
%y.21 = phi i32 [ 0, %bb.nph ], [ %indvar.next5, %bb24 ] ; <i32> [#uses=3]
395
%45 = mul i32 %y.21, %42 ; <i32> [#uses=1]
396
%.sum1 = add i32 %45, %43 ; <i32> [#uses=1]
397
%46 = getelementptr i8* %r, i32 %.sum1 ; <i8*> [#uses=1]
398
%47 = mul i32 %y.21, %w ; <i32> [#uses=1]
399
%.sum5 = add i32 %47, %.sum3 ; <i32> [#uses=1]
400
%48 = getelementptr i8* %j, i32 %.sum5 ; <i8*> [#uses=1]
401
tail call void @llvm.memcpy.i32(i8* %48, i8* %46, i32 %w, i32 1)
404
bb24: ; preds = %bb23
405
%indvar.next5 = add i32 %y.21, 1 ; <i32> [#uses=2]
406
%exitcond6 = icmp ne i32 %indvar.next5, %x ; <i1> [#uses=1]
407
br i1 %exitcond6, label %bb23, label %bb24.bb26_crit_edge
409
bb24.bb26_crit_edge: ; preds = %bb24
412
bb26: ; preds = %bb24.bb26_crit_edge, %bb22
413
%49 = mul i32 %x, %w ; <i32> [#uses=1]
414
%.sum4 = add i32 %.sum3, %49 ; <i32> [#uses=1]
415
%50 = getelementptr i8* %j, i32 %.sum4 ; <i8*> [#uses=1]
416
%51 = mul i32 %x, %w ; <i32> [#uses=1]
417
%52 = udiv i32 %51, 2 ; <i32> [#uses=1]
418
tail call void @llvm.memset.i32(i8* %50, i8 -128, i32 %52, i32 1)
421
bb29: ; preds = %bb20, %entry
422
%53 = add i32 %w, 15 ; <i32> [#uses=1]
423
%54 = and i32 %53, -16 ; <i32> [#uses=1]
424
%55 = icmp ugt i32 %x, 0 ; <i1> [#uses=1]
425
br i1 %55, label %bb.nph11, label %bb33
427
bb.nph11: ; preds = %bb29
430
bb30: ; preds = %bb31, %bb.nph11
431
%y.310 = phi i32 [ 0, %bb.nph11 ], [ %indvar.next13, %bb31 ] ; <i32> [#uses=3]
432
%56 = mul i32 %y.310, %54 ; <i32> [#uses=1]
433
%57 = getelementptr i8* %r, i32 %56 ; <i8*> [#uses=1]
434
%58 = mul i32 %y.310, %w ; <i32> [#uses=1]
435
%59 = getelementptr i8* %j, i32 %58 ; <i8*> [#uses=1]
436
tail call void @llvm.memcpy.i32(i8* %59, i8* %57, i32 %w, i32 1)
439
bb31: ; preds = %bb30
440
%indvar.next13 = add i32 %y.310, 1 ; <i32> [#uses=2]
441
%exitcond14 = icmp ne i32 %indvar.next13, %x ; <i1> [#uses=1]
442
br i1 %exitcond14, label %bb30, label %bb31.bb33_crit_edge
444
bb31.bb33_crit_edge: ; preds = %bb31
447
bb33: ; preds = %bb31.bb33_crit_edge, %bb29
448
%60 = mul i32 %x, %w ; <i32> [#uses=1]
449
%61 = getelementptr i8* %j, i32 %60 ; <i8*> [#uses=1]
450
%62 = mul i32 %x, %w ; <i32> [#uses=1]
451
%63 = udiv i32 %62, 2 ; <i32> [#uses=1]
452
tail call void @llvm.memset.i32(i8* %61, i8 -128, i32 %63, i32 1)
455
return: ; preds = %bb20
459
declare void @llvm.memcpy.i32(i8*, i8*, i32, i32) nounwind
461
declare void @llvm.memset.i32(i8*, i8, i32, i32) nounwind