1 ; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
3 ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
5 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"
6 target triple = "x86_64-apple-macosx10.6.0"
9 ;; for (long int i = 0; i < 100; i++)
10 ;; for (long int j = 0; j < 100; j++) {
11 ;; A[i + 1][i + j] = i;
12 ;; *B++ = A[i][i + j];
14 define void @prop0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
16 br label %for.cond1.preheader
19 ; CHECK: da analyze - none!
20 ; CHECK: da analyze - flow [< >]!
21 ; CHECK: da analyze - confused!
22 ; CHECK: da analyze - none!
23 ; CHECK: da analyze - confused!
24 ; CHECK: da analyze - none!
26 for.cond1.preheader: ; preds = %entry, %for.inc9
27 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
28 %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
31 for.body3: ; preds = %for.cond1.preheader, %for.body3
32 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
33 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
34 %conv = trunc i64 %i.03 to i32
35 %add = add nsw i64 %i.03, %j.02
36 %add4 = add nsw i64 %i.03, 1
37 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add4, i64 %add
38 store i32 %conv, i32* %arrayidx5, align 4
39 %add6 = add nsw i64 %i.03, %j.02
40 %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6
41 %0 = load i32, i32* %arrayidx8, align 4
42 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
43 store i32 %0, i32* %B.addr.11, align 4
44 %inc = add nsw i64 %j.02, 1
45 %exitcond = icmp ne i64 %inc, 100
46 br i1 %exitcond, label %for.body3, label %for.inc9
48 for.inc9: ; preds = %for.body3
49 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
50 %inc10 = add nsw i64 %i.03, 1
51 %exitcond5 = icmp ne i64 %inc10, 100
52 br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
54 for.end11: ; preds = %for.inc9
59 ;; for (long int i = 0; i < 100; i++)
60 ;; for (long int j = 0; j < 100; j++)
61 ;; for (long int k = 0; k < 100; k++) {
62 ;; A[j - i][i + 1][j + k] = i;
63 ;; *B++ = A[j - i][i][j + k];
65 define void @prop1([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
67 br label %for.cond1.preheader
70 ; CHECK: da analyze - output [* * *]!
71 ; CHECK: da analyze - flow [<> <> *]!
72 ; CHECK: da analyze - confused!
73 ; CHECK: da analyze - input [* * *]!
74 ; CHECK: da analyze - confused!
75 ; CHECK: da analyze - none!
77 for.cond1.preheader: ; preds = %entry, %for.inc18
78 %B.addr.06 = phi i32* [ %B, %entry ], [ %scevgep7, %for.inc18 ]
79 %i.05 = phi i64 [ 0, %entry ], [ %inc19, %for.inc18 ]
80 br label %for.cond4.preheader
82 for.cond4.preheader: ; preds = %for.cond1.preheader, %for.inc15
83 %B.addr.14 = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ]
84 %j.03 = phi i64 [ 0, %for.cond1.preheader ], [ %inc16, %for.inc15 ]
87 for.body6: ; preds = %for.cond4.preheader, %for.body6
88 %k.02 = phi i64 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ]
89 %B.addr.21 = phi i32* [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ]
90 %conv = trunc i64 %i.05 to i32
91 %add = add nsw i64 %j.03, %k.02
92 %add7 = add nsw i64 %i.05, 1
93 %sub = sub nsw i64 %j.03, %i.05
94 %arrayidx9 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub, i64 %add7, i64 %add
95 store i32 %conv, i32* %arrayidx9, align 4
96 %add10 = add nsw i64 %j.03, %k.02
97 %sub11 = sub nsw i64 %j.03, %i.05
98 %arrayidx14 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub11, i64 %i.05, i64 %add10
99 %0 = load i32, i32* %arrayidx14, align 4
100 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.21, i64 1
101 store i32 %0, i32* %B.addr.21, align 4
102 %inc = add nsw i64 %k.02, 1
103 %exitcond = icmp ne i64 %inc, 100
104 br i1 %exitcond, label %for.body6, label %for.inc15
106 for.inc15: ; preds = %for.body6
107 %scevgep = getelementptr i32, i32* %B.addr.14, i64 100
108 %inc16 = add nsw i64 %j.03, 1
109 %exitcond8 = icmp ne i64 %inc16, 100
110 br i1 %exitcond8, label %for.cond4.preheader, label %for.inc18
112 for.inc18: ; preds = %for.inc15
113 %scevgep7 = getelementptr i32, i32* %B.addr.06, i64 10000
114 %inc19 = add nsw i64 %i.05, 1
115 %exitcond9 = icmp ne i64 %inc19, 100
116 br i1 %exitcond9, label %for.cond1.preheader, label %for.end20
118 for.end20: ; preds = %for.inc18
123 ;; for (long int i = 0; i < 100; i++)
124 ;; for (long int j = 0; j < 100; j++) {
125 ;; A[i - 1][2*i] = i;
126 ;; *B++ = A[i][i + j + 110];
128 define void @prop2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
130 br label %for.cond1.preheader
133 ; CHECK: da analyze - consistent output [0 S]!
134 ; CHECK: da analyze - flow [> *]!
135 ; CHECK: da analyze - confused!
136 ; CHECK: da analyze - none!
137 ; CHECK: da analyze - confused!
138 ; CHECK: da analyze - none!
140 for.cond1.preheader: ; preds = %entry, %for.inc8
141 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ]
142 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
145 for.body3: ; preds = %for.cond1.preheader, %for.body3
146 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
147 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
148 %conv = trunc i64 %i.03 to i32
149 %mul = shl nsw i64 %i.03, 1
150 %sub = add nsw i64 %i.03, -1
151 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub, i64 %mul
152 store i32 %conv, i32* %arrayidx4, align 4
153 %add = add nsw i64 %i.03, %j.02
154 %add5 = add nsw i64 %add, 110
155 %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add5
156 %0 = load i32, i32* %arrayidx7, align 4
157 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
158 store i32 %0, i32* %B.addr.11, align 4
159 %inc = add nsw i64 %j.02, 1
160 %exitcond = icmp ne i64 %inc, 100
161 br i1 %exitcond, label %for.body3, label %for.inc8
163 for.inc8: ; preds = %for.body3
164 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
165 %inc9 = add nsw i64 %i.03, 1
166 %exitcond5 = icmp ne i64 %inc9, 100
167 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
169 for.end10: ; preds = %for.inc8
174 ;; for (long int i = 0; i < 100; i++)
175 ;; for (long int j = 0; j < 100; j++) {
176 ;; A[i][2*j + i] = i;
177 ;; *B++ = A[i][2*j - i + 5];
179 define void @prop3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
181 br label %for.cond1.preheader
184 ; CHECK: da analyze - output [* *]!
185 ; CHECK: da analyze - flow [<> *]!
186 ; CHECK: da analyze - confused!
187 ; CHECK: da analyze - input [* *]!
188 ; CHECK: da analyze - confused!
189 ; CHECK: da analyze - none!
191 for.cond1.preheader: ; preds = %entry, %for.inc9
192 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
193 %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
196 for.body3: ; preds = %for.cond1.preheader, %for.body3
197 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
198 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
199 %conv = trunc i64 %i.03 to i32
200 %mul = shl nsw i64 %j.02, 1
201 %add = add nsw i64 %mul, %i.03
202 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add
203 store i32 %conv, i32* %arrayidx4, align 4
204 %mul5 = shl nsw i64 %j.02, 1
205 %sub = sub nsw i64 %mul5, %i.03
206 %add6 = add nsw i64 %sub, 5
207 %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6
208 %0 = load i32, i32* %arrayidx8, align 4
209 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
210 store i32 %0, i32* %B.addr.11, align 4
211 %inc = add nsw i64 %j.02, 1
212 %exitcond = icmp ne i64 %inc, 100
213 br i1 %exitcond, label %for.body3, label %for.inc9
215 for.inc9: ; preds = %for.body3
216 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
217 %inc10 = add nsw i64 %i.03, 1
218 %exitcond5 = icmp ne i64 %inc10, 100
219 br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
221 for.end11: ; preds = %for.inc9
226 ;; for (long int i = 0; i < 100; i++)
227 ;; for (long int j = 0; j < 100; j++) {
228 ;; A[i + 2][2*i + j + 1] = i;
229 ;; *B++ = A[i][2*i + j];
231 define void @prop4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
233 br label %for.cond1.preheader
236 ; CHECK: da analyze - none!
237 ; CHECK: da analyze - flow [< <>]!
238 ; CHECK: da analyze - confused!
239 ; CHECK: da analyze - none!
240 ; CHECK: da analyze - confused!
241 ; CHECK: da analyze - none!
243 for.cond1.preheader: ; preds = %entry, %for.inc11
244 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc11 ]
245 %i.03 = phi i64 [ 0, %entry ], [ %inc12, %for.inc11 ]
248 for.body3: ; preds = %for.cond1.preheader, %for.body3
249 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
250 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
251 %conv = trunc i64 %i.03 to i32
252 %mul = shl nsw i64 %i.03, 1
253 %add = add nsw i64 %mul, %j.02
254 %add4 = add nsw i64 %add, 1
255 %add5 = add nsw i64 %i.03, 2
256 %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4
257 store i32 %conv, i32* %arrayidx6, align 4
258 %mul7 = shl nsw i64 %i.03, 1
259 %add8 = add nsw i64 %mul7, %j.02
260 %arrayidx10 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add8
261 %0 = load i32, i32* %arrayidx10, align 4
262 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
263 store i32 %0, i32* %B.addr.11, align 4
264 %inc = add nsw i64 %j.02, 1
265 %exitcond = icmp ne i64 %inc, 100
266 br i1 %exitcond, label %for.body3, label %for.inc11
268 for.inc11: ; preds = %for.body3
269 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
270 %inc12 = add nsw i64 %i.03, 1
271 %exitcond5 = icmp ne i64 %inc12, 100
272 br i1 %exitcond5, label %for.cond1.preheader, label %for.end13
274 for.end13: ; preds = %for.inc11
279 ;; for (long int i = 0; i < 100; i++)
280 ;; for (long int j = 0; j < 100; j++) {
281 ;; A[3*i - 18][22 - i][2*i + j] = i;
282 ;; *B++ = A[i][i][3*i + j];
284 define void @prop5([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
286 br label %for.cond1.preheader
289 ; CHECK: da analyze - none!
290 ; CHECK: da analyze - flow [* *|<]!
291 ; CHECK: da analyze - confused!
292 ; CHECK: da analyze - none!
293 ; CHECK: da analyze - confused!
294 ; CHECK: da analyze - none!
296 for.cond1.preheader: ; preds = %entry, %for.inc13
297 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc13 ]
298 %i.03 = phi i64 [ 0, %entry ], [ %inc14, %for.inc13 ]
301 for.body3: ; preds = %for.cond1.preheader, %for.body3
302 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
303 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
304 %conv = trunc i64 %i.03 to i32
305 %mul = shl nsw i64 %i.03, 1
306 %add = add nsw i64 %mul, %j.02
307 %sub = sub nsw i64 22, %i.03
308 %mul4 = mul nsw i64 %i.03, 3
309 %sub5 = add nsw i64 %mul4, -18
310 %arrayidx7 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub5, i64 %sub, i64 %add
311 store i32 %conv, i32* %arrayidx7, align 4
312 %mul8 = mul nsw i64 %i.03, 3
313 %add9 = add nsw i64 %mul8, %j.02
314 %arrayidx12 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.03, i64 %i.03, i64 %add9
315 %0 = load i32, i32* %arrayidx12, align 4
316 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
317 store i32 %0, i32* %B.addr.11, align 4
318 %inc = add nsw i64 %j.02, 1
319 %exitcond = icmp ne i64 %inc, 100
320 br i1 %exitcond, label %for.body3, label %for.inc13
322 for.inc13: ; preds = %for.body3
323 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
324 %inc14 = add nsw i64 %i.03, 1
325 %exitcond5 = icmp ne i64 %inc14, 100
326 br i1 %exitcond5, label %for.cond1.preheader, label %for.end15
328 for.end15: ; preds = %for.inc13
333 ;; for (long int i = 0; i < 100; i++)
334 ;; for (long int j = 0; j < 100; j++) {
335 ;; A[i + 1][4*i + j + 2] = i;
336 ;; *B++ = A[2*i][8*i + j];
338 define void @prop6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
340 br label %for.cond1.preheader
343 ; CHECK: da analyze - none!
344 ; CHECK: da analyze - flow [=> <>]!
345 ; CHECK: da analyze - confused!
346 ; CHECK: da analyze - none!
347 ; CHECK: da analyze - confused!
348 ; CHECK: da analyze - none!
350 for.cond1.preheader: ; preds = %entry, %for.inc12
351 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc12 ]
352 %i.03 = phi i64 [ 0, %entry ], [ %inc13, %for.inc12 ]
355 for.body3: ; preds = %for.cond1.preheader, %for.body3
356 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
357 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
358 %conv = trunc i64 %i.03 to i32
359 %mul = shl nsw i64 %i.03, 2
360 %add = add nsw i64 %mul, %j.02
361 %add4 = add nsw i64 %add, 2
362 %add5 = add nsw i64 %i.03, 1
363 %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4
364 store i32 %conv, i32* %arrayidx6, align 4
365 %mul7 = shl nsw i64 %i.03, 3
366 %add8 = add nsw i64 %mul7, %j.02
367 %mul9 = shl nsw i64 %i.03, 1
368 %arrayidx11 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %mul9, i64 %add8
369 %0 = load i32, i32* %arrayidx11, align 4
370 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
371 store i32 %0, i32* %B.addr.11, align 4
372 %inc = add nsw i64 %j.02, 1
373 %exitcond = icmp ne i64 %inc, 100
374 br i1 %exitcond, label %for.body3, label %for.inc12
376 for.inc12: ; preds = %for.body3
377 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
378 %inc13 = add nsw i64 %i.03, 1
379 %exitcond5 = icmp ne i64 %inc13, 100
380 br i1 %exitcond5, label %for.cond1.preheader, label %for.end14
382 for.end14: ; preds = %for.inc12
387 ;; for (long int i = 0; i < 100; i++)
388 ;; for (long int j = 0; j < 100; j++) {
389 ;; A[2*i + 4][-5*i + j + 2] = i;
390 ;; *B++ = A[-2*i + 20][5*i + j];
392 define void @prop7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
394 br label %for.cond1.preheader
397 ; CHECK: da analyze - none!
398 ; CHECK: da analyze - flow [* <>]!
399 ; CHECK: da analyze - confused!
400 ; CHECK: da analyze - none!
401 ; CHECK: da analyze - confused!
402 ; CHECK: da analyze - none!
404 for.cond1.preheader: ; preds = %entry, %for.inc14
405 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc14 ]
406 %i.03 = phi i64 [ 0, %entry ], [ %inc15, %for.inc14 ]
409 for.body3: ; preds = %for.cond1.preheader, %for.body3
410 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
411 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
412 %conv = trunc i64 %i.03 to i32
413 %mul = mul nsw i64 %i.03, -5
414 %add = add nsw i64 %mul, %j.02
415 %add4 = add nsw i64 %add, 2
416 %mul5 = shl nsw i64 %i.03, 1
417 %add6 = add nsw i64 %mul5, 4
418 %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4
419 store i32 %conv, i32* %arrayidx7, align 4
420 %mul8 = mul nsw i64 %i.03, 5
421 %add9 = add nsw i64 %mul8, %j.02
422 %mul10 = mul nsw i64 %i.03, -2
423 %add11 = add nsw i64 %mul10, 20
424 %arrayidx13 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add11, i64 %add9
425 %0 = load i32, i32* %arrayidx13, align 4
426 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
427 store i32 %0, i32* %B.addr.11, align 4
428 %inc = add nsw i64 %j.02, 1
429 %exitcond = icmp ne i64 %inc, 100
430 br i1 %exitcond, label %for.body3, label %for.inc14
432 for.inc14: ; preds = %for.body3
433 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
434 %inc15 = add nsw i64 %i.03, 1
435 %exitcond5 = icmp ne i64 %inc15, 100
436 br i1 %exitcond5, label %for.cond1.preheader, label %for.end16
438 for.end16: ; preds = %for.inc14
443 ;; for (long int i = 0; i < 100; i++)
444 ;; for (long int j = 0; j < 100; j++) {
446 ;; *B++ = A[-2*i + 4][5*i + j];
448 define void @prop8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
450 br label %for.cond1.preheader
453 ; CHECK: da analyze - consistent output [S 0]!
454 ; CHECK: da analyze - flow [=> <]!
455 ; CHECK: da analyze - confused!
456 ; CHECK: da analyze - none!
457 ; CHECK: da analyze - confused!
458 ; CHECK: da analyze - none!
460 for.cond1.preheader: ; preds = %entry, %for.inc10
461 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
462 %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
465 for.body3: ; preds = %for.cond1.preheader, %for.body3
466 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
467 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
468 %conv = trunc i64 %i.03 to i32
469 %add = add nsw i64 %j.02, 2
470 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %add
471 store i32 %conv, i32* %arrayidx4, align 4
472 %mul = mul nsw i64 %i.03, 5
473 %add5 = add nsw i64 %mul, %j.02
474 %mul6 = mul nsw i64 %i.03, -2
475 %add7 = add nsw i64 %mul6, 4
476 %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add7, i64 %add5
477 %0 = load i32, i32* %arrayidx9, align 4
478 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
479 store i32 %0, i32* %B.addr.11, align 4
480 %inc = add nsw i64 %j.02, 1
481 %exitcond = icmp ne i64 %inc, 100
482 br i1 %exitcond, label %for.body3, label %for.inc10
484 for.inc10: ; preds = %for.body3
485 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
486 %inc11 = add nsw i64 %i.03, 1
487 %exitcond5 = icmp ne i64 %inc11, 100
488 br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
490 for.end12: ; preds = %for.inc10
495 ;; for (long int i = 0; i < 100; i++)
496 ;; for (long int j = 0; j < 100; j++) {
497 ;; A[2*i + 4][5*i + j + 2] = i;
500 define void @prop9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
502 br label %for.cond1.preheader
505 ; CHECK: da analyze - none!
506 ; CHECK: da analyze - flow [<= <]!
507 ; CHECK: da analyze - confused!
508 ; CHECK: da analyze - consistent input [S 0]!
509 ; CHECK: da analyze - confused!
510 ; CHECK: da analyze - none!
512 for.cond1.preheader: ; preds = %entry, %for.inc10
513 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
514 %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
517 for.body3: ; preds = %for.cond1.preheader, %for.body3
518 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
519 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
520 %conv = trunc i64 %i.03 to i32
521 %mul = mul nsw i64 %i.03, 5
522 %add = add nsw i64 %mul, %j.02
523 %add4 = add nsw i64 %add, 2
524 %mul5 = shl nsw i64 %i.03, 1
525 %add6 = add nsw i64 %mul5, 4
526 %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4
527 store i32 %conv, i32* %arrayidx7, align 4
528 %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %j.02
529 %0 = load i32, i32* %arrayidx9, align 4
530 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
531 store i32 %0, i32* %B.addr.11, align 4
532 %inc = add nsw i64 %j.02, 1
533 %exitcond = icmp ne i64 %inc, 100
534 br i1 %exitcond, label %for.body3, label %for.inc10
536 for.inc10: ; preds = %for.body3
537 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
538 %inc11 = add nsw i64 %i.03, 1
539 %exitcond5 = icmp ne i64 %inc11, 100
540 br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
542 for.end12: ; preds = %for.inc10