1 ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
3 ; ModuleID = 'Propagating.bc'
4 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
5 target triple = "x86_64-apple-macosx10.6.0"
8 ;; for (long int i = 0; i < 100; i++)
9 ;; for (long int j = 0; j < 100; j++) {
10 ;; A[i + 1][i + j] = i;
11 ;; *B++ = A[i][i + j];
13 define void @prop0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
15 br label %for.cond1.preheader
17 ; CHECK: da analyze - none!
18 ; CHECK: da analyze - consistent flow [1 -1]!
19 ; CHECK: da analyze - confused!
20 ; CHECK: da analyze - none!
21 ; CHECK: da analyze - confused!
22 ; CHECK: da analyze - none!
24 for.cond1.preheader: ; preds = %entry, %for.inc9
25 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
26 %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
29 for.body3: ; preds = %for.cond1.preheader, %for.body3
30 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
31 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
32 %conv = trunc i64 %i.03 to i32
33 %add = add nsw i64 %i.03, %j.02
34 %add4 = add nsw i64 %i.03, 1
35 %arrayidx5 = getelementptr inbounds [100 x i32]* %A, i64 %add4, i64 %add
36 store i32 %conv, i32* %arrayidx5, align 4
37 %add6 = add nsw i64 %i.03, %j.02
38 %arrayidx8 = getelementptr inbounds [100 x i32]* %A, i64 %i.03, i64 %add6
39 %0 = load i32* %arrayidx8, align 4
40 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
41 store i32 %0, i32* %B.addr.11, align 4
42 %inc = add nsw i64 %j.02, 1
43 %exitcond = icmp ne i64 %inc, 100
44 br i1 %exitcond, label %for.body3, label %for.inc9
46 for.inc9: ; preds = %for.body3
47 %scevgep = getelementptr i32* %B.addr.04, i64 100
48 %inc10 = add nsw i64 %i.03, 1
49 %exitcond5 = icmp ne i64 %inc10, 100
50 br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
52 for.end11: ; preds = %for.inc9
57 ;; for (long int i = 0; i < 100; i++)
58 ;; for (long int j = 0; j < 100; j++)
59 ;; for (long int k = 0; k < 100; k++) {
60 ;; A[j - i][i + 1][j + k] = i;
61 ;; *B++ = A[j - i][i][j + k];
63 define void @prop1([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
65 br label %for.cond1.preheader
67 ; CHECK: da analyze - none!
68 ; CHECK: da analyze - consistent flow [1 1 -1]!
69 ; CHECK: da analyze - confused!
70 ; CHECK: da analyze - none!
71 ; CHECK: da analyze - confused!
72 ; CHECK: da analyze - none!
74 for.cond1.preheader: ; preds = %entry, %for.inc18
75 %B.addr.06 = phi i32* [ %B, %entry ], [ %scevgep7, %for.inc18 ]
76 %i.05 = phi i64 [ 0, %entry ], [ %inc19, %for.inc18 ]
77 br label %for.cond4.preheader
79 for.cond4.preheader: ; preds = %for.cond1.preheader, %for.inc15
80 %B.addr.14 = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ]
81 %j.03 = phi i64 [ 0, %for.cond1.preheader ], [ %inc16, %for.inc15 ]
84 for.body6: ; preds = %for.cond4.preheader, %for.body6
85 %k.02 = phi i64 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ]
86 %B.addr.21 = phi i32* [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ]
87 %conv = trunc i64 %i.05 to i32
88 %add = add nsw i64 %j.03, %k.02
89 %add7 = add nsw i64 %i.05, 1
90 %sub = sub nsw i64 %j.03, %i.05
91 %arrayidx9 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %sub, i64 %add7, i64 %add
92 store i32 %conv, i32* %arrayidx9, align 4
93 %add10 = add nsw i64 %j.03, %k.02
94 %sub11 = sub nsw i64 %j.03, %i.05
95 %arrayidx14 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %sub11, i64 %i.05, i64 %add10
96 %0 = load i32* %arrayidx14, align 4
97 %incdec.ptr = getelementptr inbounds i32* %B.addr.21, i64 1
98 store i32 %0, i32* %B.addr.21, align 4
99 %inc = add nsw i64 %k.02, 1
100 %exitcond = icmp ne i64 %inc, 100
101 br i1 %exitcond, label %for.body6, label %for.inc15
103 for.inc15: ; preds = %for.body6
104 %scevgep = getelementptr i32* %B.addr.14, i64 100
105 %inc16 = add nsw i64 %j.03, 1
106 %exitcond8 = icmp ne i64 %inc16, 100
107 br i1 %exitcond8, label %for.cond4.preheader, label %for.inc18
109 for.inc18: ; preds = %for.inc15
110 %scevgep7 = getelementptr i32* %B.addr.06, i64 10000
111 %inc19 = add nsw i64 %i.05, 1
112 %exitcond9 = icmp ne i64 %inc19, 100
113 br i1 %exitcond9, label %for.cond1.preheader, label %for.end20
115 for.end20: ; preds = %for.inc18
120 ;; for (long int i = 0; i < 100; i++)
121 ;; for (long int j = 0; j < 100; j++) {
122 ;; A[i - 1][2*i] = i;
123 ;; *B++ = A[i][i + j + 110];
125 define void @prop2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
127 br label %for.cond1.preheader
129 ; CHECK: da analyze - consistent output [0 S]!
130 ; CHECK: da analyze - none!
131 ; CHECK: da analyze - confused!
132 ; CHECK: da analyze - none!
133 ; CHECK: da analyze - confused!
134 ; CHECK: da analyze - none!
136 for.cond1.preheader: ; preds = %entry, %for.inc8
137 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ]
138 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
141 for.body3: ; preds = %for.cond1.preheader, %for.body3
142 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
143 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
144 %conv = trunc i64 %i.03 to i32
145 %mul = shl nsw i64 %i.03, 1
146 %sub = add nsw i64 %i.03, -1
147 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %sub, i64 %mul
148 store i32 %conv, i32* %arrayidx4, align 4
149 %add = add nsw i64 %i.03, %j.02
150 %add5 = add nsw i64 %add, 110
151 %arrayidx7 = getelementptr inbounds [100 x i32]* %A, i64 %i.03, i64 %add5
152 %0 = load i32* %arrayidx7, align 4
153 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
154 store i32 %0, i32* %B.addr.11, align 4
155 %inc = add nsw i64 %j.02, 1
156 %exitcond = icmp ne i64 %inc, 100
157 br i1 %exitcond, label %for.body3, label %for.inc8
159 for.inc8: ; preds = %for.body3
160 %scevgep = getelementptr i32* %B.addr.04, i64 100
161 %inc9 = add nsw i64 %i.03, 1
162 %exitcond5 = icmp ne i64 %inc9, 100
163 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
165 for.end10: ; preds = %for.inc8
170 ;; for (long int i = 0; i < 100; i++)
171 ;; for (long int j = 0; j < 100; j++) {
172 ;; A[i][2*j + i] = i;
173 ;; *B++ = A[i][2*j - i + 5];
175 define void @prop3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
177 br label %for.cond1.preheader
179 ; CHECK: da analyze - none!
180 ; CHECK: da analyze - none!
181 ; CHECK: da analyze - confused!
182 ; CHECK: da analyze - none!
183 ; CHECK: da analyze - confused!
184 ; CHECK: da analyze - none!
186 for.cond1.preheader: ; preds = %entry, %for.inc9
187 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
188 %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
191 for.body3: ; preds = %for.cond1.preheader, %for.body3
192 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
193 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
194 %conv = trunc i64 %i.03 to i32
195 %mul = shl nsw i64 %j.02, 1
196 %add = add nsw i64 %mul, %i.03
197 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.03, i64 %add
198 store i32 %conv, i32* %arrayidx4, align 4
199 %mul5 = shl nsw i64 %j.02, 1
200 %sub = sub nsw i64 %mul5, %i.03
201 %add6 = add nsw i64 %sub, 5
202 %arrayidx8 = getelementptr inbounds [100 x i32]* %A, i64 %i.03, i64 %add6
203 %0 = load i32* %arrayidx8, align 4
204 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
205 store i32 %0, i32* %B.addr.11, align 4
206 %inc = add nsw i64 %j.02, 1
207 %exitcond = icmp ne i64 %inc, 100
208 br i1 %exitcond, label %for.body3, label %for.inc9
210 for.inc9: ; preds = %for.body3
211 %scevgep = getelementptr i32* %B.addr.04, i64 100
212 %inc10 = add nsw i64 %i.03, 1
213 %exitcond5 = icmp ne i64 %inc10, 100
214 br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
216 for.end11: ; preds = %for.inc9
221 ;; for (long int i = 0; i < 100; i++)
222 ;; for (long int j = 0; j < 100; j++) {
223 ;; A[i + 2][2*i + j + 1] = i;
224 ;; *B++ = A[i][2*i + j];
226 define void @prop4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
228 br label %for.cond1.preheader
230 ; CHECK: da analyze - none!
231 ; CHECK: da analyze - consistent flow [2 -3]!
232 ; CHECK: da analyze - confused!
233 ; CHECK: da analyze - none!
234 ; CHECK: da analyze - confused!
235 ; CHECK: da analyze - none!
237 for.cond1.preheader: ; preds = %entry, %for.inc11
238 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc11 ]
239 %i.03 = phi i64 [ 0, %entry ], [ %inc12, %for.inc11 ]
242 for.body3: ; preds = %for.cond1.preheader, %for.body3
243 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
244 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
245 %conv = trunc i64 %i.03 to i32
246 %mul = shl nsw i64 %i.03, 1
247 %add = add nsw i64 %mul, %j.02
248 %add4 = add nsw i64 %add, 1
249 %add5 = add nsw i64 %i.03, 2
250 %arrayidx6 = getelementptr inbounds [100 x i32]* %A, i64 %add5, i64 %add4
251 store i32 %conv, i32* %arrayidx6, align 4
252 %mul7 = shl nsw i64 %i.03, 1
253 %add8 = add nsw i64 %mul7, %j.02
254 %arrayidx10 = getelementptr inbounds [100 x i32]* %A, i64 %i.03, i64 %add8
255 %0 = load i32* %arrayidx10, align 4
256 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
257 store i32 %0, i32* %B.addr.11, align 4
258 %inc = add nsw i64 %j.02, 1
259 %exitcond = icmp ne i64 %inc, 100
260 br i1 %exitcond, label %for.body3, label %for.inc11
262 for.inc11: ; preds = %for.body3
263 %scevgep = getelementptr i32* %B.addr.04, i64 100
264 %inc12 = add nsw i64 %i.03, 1
265 %exitcond5 = icmp ne i64 %inc12, 100
266 br i1 %exitcond5, label %for.cond1.preheader, label %for.end13
268 for.end13: ; preds = %for.inc11
273 ;; for (long int i = 0; i < 100; i++)
274 ;; for (long int j = 0; j < 100; j++) {
275 ;; A[3*i - 18][22 - i][2*i + j] = i;
276 ;; *B++ = A[i][i][3*i + j];
278 define void @prop5([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
280 br label %for.cond1.preheader
282 ; CHECK: da analyze - none!
283 ; CHECK: da analyze - flow [< -16] splitable!
284 ; CHECK: da analyze - split level = 1, iteration = 11!
285 ; CHECK: da analyze - confused!
286 ; CHECK: da analyze - none!
287 ; CHECK: da analyze - confused!
288 ; CHECK: da analyze - none!
290 for.cond1.preheader: ; preds = %entry, %for.inc13
291 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc13 ]
292 %i.03 = phi i64 [ 0, %entry ], [ %inc14, %for.inc13 ]
295 for.body3: ; preds = %for.cond1.preheader, %for.body3
296 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
297 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
298 %conv = trunc i64 %i.03 to i32
299 %mul = shl nsw i64 %i.03, 1
300 %add = add nsw i64 %mul, %j.02
301 %sub = sub nsw i64 22, %i.03
302 %mul4 = mul nsw i64 %i.03, 3
303 %sub5 = add nsw i64 %mul4, -18
304 %arrayidx7 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %sub5, i64 %sub, i64 %add
305 store i32 %conv, i32* %arrayidx7, align 4
306 %mul8 = mul nsw i64 %i.03, 3
307 %add9 = add nsw i64 %mul8, %j.02
308 %arrayidx12 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %i.03, i64 %i.03, i64 %add9
309 %0 = load i32* %arrayidx12, align 4
310 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
311 store i32 %0, i32* %B.addr.11, align 4
312 %inc = add nsw i64 %j.02, 1
313 %exitcond = icmp ne i64 %inc, 100
314 br i1 %exitcond, label %for.body3, label %for.inc13
316 for.inc13: ; preds = %for.body3
317 %scevgep = getelementptr i32* %B.addr.04, i64 100
318 %inc14 = add nsw i64 %i.03, 1
319 %exitcond5 = icmp ne i64 %inc14, 100
320 br i1 %exitcond5, label %for.cond1.preheader, label %for.end15
322 for.end15: ; preds = %for.inc13
327 ;; for (long int i = 0; i < 100; i++)
328 ;; for (long int j = 0; j < 100; j++) {
329 ;; A[i + 1][4*i + j + 2] = i;
330 ;; *B++ = A[2*i][8*i + j];
332 define void @prop6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
334 br label %for.cond1.preheader
336 ; CHECK: da analyze - none!
337 ; CHECK: da analyze - flow [=> -2]!
338 ; CHECK: da analyze - confused!
339 ; CHECK: da analyze - none!
340 ; CHECK: da analyze - confused!
341 ; CHECK: da analyze - none!
343 for.cond1.preheader: ; preds = %entry, %for.inc12
344 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc12 ]
345 %i.03 = phi i64 [ 0, %entry ], [ %inc13, %for.inc12 ]
348 for.body3: ; preds = %for.cond1.preheader, %for.body3
349 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
350 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
351 %conv = trunc i64 %i.03 to i32
352 %mul = shl nsw i64 %i.03, 2
353 %add = add nsw i64 %mul, %j.02
354 %add4 = add nsw i64 %add, 2
355 %add5 = add nsw i64 %i.03, 1
356 %arrayidx6 = getelementptr inbounds [100 x i32]* %A, i64 %add5, i64 %add4
357 store i32 %conv, i32* %arrayidx6, align 4
358 %mul7 = shl nsw i64 %i.03, 3
359 %add8 = add nsw i64 %mul7, %j.02
360 %mul9 = shl nsw i64 %i.03, 1
361 %arrayidx11 = getelementptr inbounds [100 x i32]* %A, i64 %mul9, i64 %add8
362 %0 = load i32* %arrayidx11, align 4
363 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
364 store i32 %0, i32* %B.addr.11, align 4
365 %inc = add nsw i64 %j.02, 1
366 %exitcond = icmp ne i64 %inc, 100
367 br i1 %exitcond, label %for.body3, label %for.inc12
369 for.inc12: ; preds = %for.body3
370 %scevgep = getelementptr i32* %B.addr.04, i64 100
371 %inc13 = add nsw i64 %i.03, 1
372 %exitcond5 = icmp ne i64 %inc13, 100
373 br i1 %exitcond5, label %for.cond1.preheader, label %for.end14
375 for.end14: ; preds = %for.inc12
380 ;; for (long int i = 0; i < 100; i++)
381 ;; for (long int j = 0; j < 100; j++) {
382 ;; A[2*i + 4][-5*i + j + 2] = i;
383 ;; *B++ = A[-2*i + 20][5*i + j];
385 define void @prop7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
387 br label %for.cond1.preheader
389 ; CHECK: da analyze - none!
390 ; CHECK: da analyze - flow [* -38] splitable!
391 ; CHECK: da analyze - split level = 1, iteration = 4!
392 ; CHECK: da analyze - confused!
393 ; CHECK: da analyze - none!
394 ; CHECK: da analyze - confused!
395 ; CHECK: da analyze - none!
397 for.cond1.preheader: ; preds = %entry, %for.inc14
398 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc14 ]
399 %i.03 = phi i64 [ 0, %entry ], [ %inc15, %for.inc14 ]
402 for.body3: ; preds = %for.cond1.preheader, %for.body3
403 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
404 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
405 %conv = trunc i64 %i.03 to i32
406 %mul = mul nsw i64 %i.03, -5
407 %add = add nsw i64 %mul, %j.02
408 %add4 = add nsw i64 %add, 2
409 %mul5 = shl nsw i64 %i.03, 1
410 %add6 = add nsw i64 %mul5, 4
411 %arrayidx7 = getelementptr inbounds [100 x i32]* %A, i64 %add6, i64 %add4
412 store i32 %conv, i32* %arrayidx7, align 4
413 %mul8 = mul nsw i64 %i.03, 5
414 %add9 = add nsw i64 %mul8, %j.02
415 %mul10 = mul nsw i64 %i.03, -2
416 %add11 = add nsw i64 %mul10, 20
417 %arrayidx13 = getelementptr inbounds [100 x i32]* %A, i64 %add11, i64 %add9
418 %0 = load i32* %arrayidx13, align 4
419 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
420 store i32 %0, i32* %B.addr.11, align 4
421 %inc = add nsw i64 %j.02, 1
422 %exitcond = icmp ne i64 %inc, 100
423 br i1 %exitcond, label %for.body3, label %for.inc14
425 for.inc14: ; preds = %for.body3
426 %scevgep = getelementptr i32* %B.addr.04, i64 100
427 %inc15 = add nsw i64 %i.03, 1
428 %exitcond5 = icmp ne i64 %inc15, 100
429 br i1 %exitcond5, label %for.cond1.preheader, label %for.end16
431 for.end16: ; preds = %for.inc14
436 ;; for (long int i = 0; i < 100; i++)
437 ;; for (long int j = 0; j < 100; j++) {
439 ;; *B++ = A[-2*i + 4][5*i + j];
441 define void @prop8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
443 br label %for.cond1.preheader
445 ; CHECK: da analyze - consistent output [S 0]!
446 ; CHECK: da analyze - flow [p<= 2]!
447 ; CHECK: da analyze - confused!
448 ; CHECK: da analyze - none!
449 ; CHECK: da analyze - confused!
450 ; CHECK: da analyze - none!
452 for.cond1.preheader: ; preds = %entry, %for.inc10
453 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
454 %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
457 for.body3: ; preds = %for.cond1.preheader, %for.body3
458 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
459 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
460 %conv = trunc i64 %i.03 to i32
461 %add = add nsw i64 %j.02, 2
462 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 4, i64 %add
463 store i32 %conv, i32* %arrayidx4, align 4
464 %mul = mul nsw i64 %i.03, 5
465 %add5 = add nsw i64 %mul, %j.02
466 %mul6 = mul nsw i64 %i.03, -2
467 %add7 = add nsw i64 %mul6, 4
468 %arrayidx9 = getelementptr inbounds [100 x i32]* %A, i64 %add7, i64 %add5
469 %0 = load i32* %arrayidx9, align 4
470 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
471 store i32 %0, i32* %B.addr.11, align 4
472 %inc = add nsw i64 %j.02, 1
473 %exitcond = icmp ne i64 %inc, 100
474 br i1 %exitcond, label %for.body3, label %for.inc10
476 for.inc10: ; preds = %for.body3
477 %scevgep = getelementptr i32* %B.addr.04, i64 100
478 %inc11 = add nsw i64 %i.03, 1
479 %exitcond5 = icmp ne i64 %inc11, 100
480 br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
482 for.end12: ; preds = %for.inc10
487 ;; for (long int i = 0; i < 100; i++)
488 ;; for (long int j = 0; j < 100; j++) {
489 ;; A[2*i + 4][5*i + j + 2] = i;
492 define void @prop9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
494 br label %for.cond1.preheader
496 ; CHECK: da analyze - none!
497 ; CHECK: da analyze - flow [p<= 2]!
498 ; CHECK: da analyze - confused!
499 ; CHECK: da analyze - consistent input [S 0]!
500 ; CHECK: da analyze - confused!
501 ; CHECK: da analyze - none!
503 for.cond1.preheader: ; preds = %entry, %for.inc10
504 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
505 %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
508 for.body3: ; preds = %for.cond1.preheader, %for.body3
509 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
510 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
511 %conv = trunc i64 %i.03 to i32
512 %mul = mul nsw i64 %i.03, 5
513 %add = add nsw i64 %mul, %j.02
514 %add4 = add nsw i64 %add, 2
515 %mul5 = shl nsw i64 %i.03, 1
516 %add6 = add nsw i64 %mul5, 4
517 %arrayidx7 = getelementptr inbounds [100 x i32]* %A, i64 %add6, i64 %add4
518 store i32 %conv, i32* %arrayidx7, align 4
519 %arrayidx9 = getelementptr inbounds [100 x i32]* %A, i64 4, i64 %j.02
520 %0 = load i32* %arrayidx9, align 4
521 %incdec.ptr = getelementptr inbounds i32* %B.addr.11, i64 1
522 store i32 %0, i32* %B.addr.11, align 4
523 %inc = add nsw i64 %j.02, 1
524 %exitcond = icmp ne i64 %inc, 100
525 br i1 %exitcond, label %for.body3, label %for.inc10
527 for.inc10: ; preds = %for.body3
528 %scevgep = getelementptr i32* %B.addr.04, i64 100
529 %inc11 = add nsw i64 %i.03, 1
530 %exitcond5 = icmp ne i64 %inc11, 100
531 br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
533 for.end12: ; preds = %for.inc10