1 ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
3 ; ModuleID = 'Coupled.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 < 50; i++) {
10 ;; *B++ = A[i + 10][i + 9];
12 define void @couple0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
16 ; CHECK: da analyze - none!
17 ; CHECK: da analyze - none!
18 ; CHECK: da analyze - confused!
19 ; CHECK: da analyze - none!
20 ; CHECK: da analyze - confused!
21 ; CHECK: da analyze - none!
23 for.body: ; preds = %entry, %for.body
24 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
25 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
26 %conv = trunc i64 %i.02 to i32
27 %arrayidx1 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
28 store i32 %conv, i32* %arrayidx1, align 4
29 %add = add nsw i64 %i.02, 9
30 %add2 = add nsw i64 %i.02, 10
31 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %add2, i64 %add
32 %0 = load i32* %arrayidx4, align 4
33 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
34 store i32 %0, i32* %B.addr.01, align 4
35 %inc = add nsw i64 %i.02, 1
36 %exitcond = icmp ne i64 %inc, 50
37 br i1 %exitcond, label %for.body, label %for.end
39 for.end: ; preds = %for.body
44 ;; for (long int i = 0; i < 50; i++) {
46 ;; *B++ = A[i + 9][i + 9];
48 define void @couple1([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
52 ; CHECK: da analyze - none!
53 ; CHECK: da analyze - consistent flow [-9]!
54 ; CHECK: da analyze - confused!
55 ; CHECK: da analyze - none!
56 ; CHECK: da analyze - confused!
57 ; CHECK: da analyze - none!
59 for.body: ; preds = %entry, %for.body
60 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
61 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
62 %conv = trunc i64 %i.02 to i32
63 %arrayidx1 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
64 store i32 %conv, i32* %arrayidx1, align 4
65 %add = add nsw i64 %i.02, 9
66 %add2 = add nsw i64 %i.02, 9
67 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %add2, i64 %add
68 %0 = load i32* %arrayidx4, align 4
69 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
70 store i32 %0, i32* %B.addr.01, align 4
71 %inc = add nsw i64 %i.02, 1
72 %exitcond = icmp ne i64 %inc, 50
73 br i1 %exitcond, label %for.body, label %for.end
75 for.end: ; preds = %for.body
80 ;; for (long int i = 0; i < 50; i++) {
81 ;; A[3*i - 6][3*i - 6] = i;
84 define void @couple2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
88 ; CHECK: da analyze - none!
89 ; CHECK: da analyze - flow [*|<]!
90 ; CHECK: da analyze - confused!
91 ; CHECK: da analyze - none!
92 ; CHECK: da analyze - confused!
93 ; CHECK: da analyze - none!
95 for.body: ; preds = %entry, %for.body
96 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
97 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
98 %conv = trunc i64 %i.02 to i32
99 %mul = mul nsw i64 %i.02, 3
100 %sub = add nsw i64 %mul, -6
101 %mul1 = mul nsw i64 %i.02, 3
102 %sub2 = add nsw i64 %mul1, -6
103 %arrayidx3 = getelementptr inbounds [100 x i32]* %A, i64 %sub2, i64 %sub
104 store i32 %conv, i32* %arrayidx3, align 4
105 %arrayidx5 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
106 %0 = load i32* %arrayidx5, align 4
107 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
108 store i32 %0, i32* %B.addr.01, align 4
109 %inc = add nsw i64 %i.02, 1
110 %exitcond = icmp ne i64 %inc, 50
111 br i1 %exitcond, label %for.body, label %for.end
113 for.end: ; preds = %for.body
118 ;; for (long int i = 0; i < 50; i++) {
119 ;; A[3*i - 6][3*i - 5] = i;
122 define void @couple3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
126 ; CHECK: da analyze - none!
127 ; CHECK: da analyze - none!
128 ; CHECK: da analyze - confused!
129 ; CHECK: da analyze - none!
130 ; CHECK: da analyze - confused!
131 ; CHECK: da analyze - none!
133 for.body: ; preds = %entry, %for.body
134 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
135 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
136 %conv = trunc i64 %i.02 to i32
137 %mul = mul nsw i64 %i.02, 3
138 %sub = add nsw i64 %mul, -5
139 %mul1 = mul nsw i64 %i.02, 3
140 %sub2 = add nsw i64 %mul1, -6
141 %arrayidx3 = getelementptr inbounds [100 x i32]* %A, i64 %sub2, i64 %sub
142 store i32 %conv, i32* %arrayidx3, align 4
143 %arrayidx5 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
144 %0 = load i32* %arrayidx5, align 4
145 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
146 store i32 %0, i32* %B.addr.01, align 4
147 %inc = add nsw i64 %i.02, 1
148 %exitcond = icmp ne i64 %inc, 50
149 br i1 %exitcond, label %for.body, label %for.end
151 for.end: ; preds = %for.body
156 ;; for (long int i = 0; i < 50; i++) {
157 ;; A[3*i - 6][3*i - n] = i;
160 define void @couple4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
164 ; CHECK: da analyze - none!
165 ; CHECK: da analyze - flow [*|<]!
166 ; CHECK: da analyze - confused!
167 ; CHECK: da analyze - none!
168 ; CHECK: da analyze - confused!
169 ; CHECK: da analyze - none!
171 for.body: ; preds = %entry, %for.body
172 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
173 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
174 %conv = trunc i64 %i.02 to i32
175 %mul = mul nsw i64 %i.02, 3
176 %conv1 = sext i32 %n to i64
177 %sub = sub nsw i64 %mul, %conv1
178 %mul2 = mul nsw i64 %i.02, 3
179 %sub3 = add nsw i64 %mul2, -6
180 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %sub3, i64 %sub
181 store i32 %conv, i32* %arrayidx4, align 4
182 %arrayidx6 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
183 %0 = load i32* %arrayidx6, align 4
184 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
185 store i32 %0, i32* %B.addr.01, align 4
186 %inc = add nsw i64 %i.02, 1
187 %exitcond = icmp ne i64 %inc, 50
188 br i1 %exitcond, label %for.body, label %for.end
190 for.end: ; preds = %for.body
195 ;; for (long int i = 0; i < 50; i++) {
196 ;; A[3*i - n + 1][3*i - n] = i;
199 define void @couple5([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
203 ; CHECK: da analyze - none!
204 ; CHECK: da analyze - none!
205 ; CHECK: da analyze - confused!
206 ; CHECK: da analyze - none!
207 ; CHECK: da analyze - confused!
208 ; CHECK: da analyze - none!
210 for.body: ; preds = %entry, %for.body
211 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
212 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
213 %conv = trunc i64 %i.02 to i32
214 %mul = mul nsw i64 %i.02, 3
215 %conv1 = sext i32 %n to i64
216 %sub = sub nsw i64 %mul, %conv1
217 %mul2 = mul nsw i64 %i.02, 3
218 %conv3 = sext i32 %n to i64
219 %sub4 = sub nsw i64 %mul2, %conv3
220 %add = add nsw i64 %sub4, 1
221 %arrayidx5 = getelementptr inbounds [100 x i32]* %A, i64 %add, i64 %sub
222 store i32 %conv, i32* %arrayidx5, align 4
223 %arrayidx7 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
224 %0 = load i32* %arrayidx7, align 4
225 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
226 store i32 %0, i32* %B.addr.01, align 4
227 %inc = add nsw i64 %i.02, 1
228 %exitcond = icmp ne i64 %inc, 50
229 br i1 %exitcond, label %for.body, label %for.end
231 for.end: ; preds = %for.body
236 ;; for (long int i = 0; i < 50; i++) {
237 ;; A[i][3*i - 6] = i;
240 define void @couple6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
244 ; CHECK: da analyze - none!
245 ; CHECK: da analyze - flow [=|<]!
246 ; CHECK: da analyze - confused!
247 ; CHECK: da analyze - none!
248 ; CHECK: da analyze - confused!
249 ; CHECK: da analyze - none!
251 for.body: ; preds = %entry, %for.body
252 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
253 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
254 %conv = trunc i64 %i.02 to i32
255 %mul = mul nsw i64 %i.02, 3
256 %sub = add nsw i64 %mul, -6
257 %arrayidx1 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %sub
258 store i32 %conv, i32* %arrayidx1, align 4
259 %arrayidx3 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
260 %0 = load i32* %arrayidx3, align 4
261 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
262 store i32 %0, i32* %B.addr.01, align 4
263 %inc = add nsw i64 %i.02, 1
264 %exitcond = icmp ne i64 %inc, 50
265 br i1 %exitcond, label %for.body, label %for.end
267 for.end: ; preds = %for.body
272 ;; for (long int i = 0; i < 50; i++) {
273 ;; A[i][3*i - 5] = i;
276 define void @couple7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
280 ; CHECK: da analyze - none!
281 ; CHECK: da analyze - none!
282 ; CHECK: da analyze - confused!
283 ; CHECK: da analyze - none!
284 ; CHECK: da analyze - confused!
285 ; CHECK: da analyze - none!
287 for.body: ; preds = %entry, %for.body
288 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
289 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
290 %conv = trunc i64 %i.02 to i32
291 %mul = mul nsw i64 %i.02, 3
292 %sub = add nsw i64 %mul, -5
293 %arrayidx1 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %sub
294 store i32 %conv, i32* %arrayidx1, align 4
295 %arrayidx3 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
296 %0 = load i32* %arrayidx3, align 4
297 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
298 store i32 %0, i32* %B.addr.01, align 4
299 %inc = add nsw i64 %i.02, 1
300 %exitcond = icmp ne i64 %inc, 50
301 br i1 %exitcond, label %for.body, label %for.end
303 for.end: ; preds = %for.body
308 ;; for (long int i = 0; i <= 15; i++) {
309 ;; A[3*i - 18][3 - i] = i;
312 define void @couple8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
316 ; CHECK: da analyze - none!
317 ; CHECK: da analyze - none!
318 ; CHECK: da analyze - confused!
319 ; CHECK: da analyze - none!
320 ; CHECK: da analyze - confused!
321 ; CHECK: da analyze - none!
323 for.body: ; preds = %entry, %for.body
324 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
325 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
326 %conv = trunc i64 %i.02 to i32
327 %sub = sub nsw i64 3, %i.02
328 %mul = mul nsw i64 %i.02, 3
329 %sub1 = add nsw i64 %mul, -18
330 %arrayidx2 = getelementptr inbounds [100 x i32]* %A, i64 %sub1, i64 %sub
331 store i32 %conv, i32* %arrayidx2, align 4
332 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
333 %0 = load i32* %arrayidx4, align 4
334 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
335 store i32 %0, i32* %B.addr.01, align 4
336 %inc = add nsw i64 %i.02, 1
337 %exitcond = icmp ne i64 %inc, 16
338 br i1 %exitcond, label %for.body, label %for.end
340 for.end: ; preds = %for.body
345 ;; for (long int i = 0; i <= 15; i++) {
346 ;; A[3*i - 18][2 - i] = i;
349 define void @couple9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
353 ; CHECK: da analyze - none!
354 ; CHECK: da analyze - none!
355 ; CHECK: da analyze - confused!
356 ; CHECK: da analyze - none!
357 ; CHECK: da analyze - confused!
358 ; CHECK: da analyze - none!
360 for.body: ; preds = %entry, %for.body
361 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
362 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
363 %conv = trunc i64 %i.02 to i32
364 %sub = sub nsw i64 2, %i.02
365 %mul = mul nsw i64 %i.02, 3
366 %sub1 = add nsw i64 %mul, -18
367 %arrayidx2 = getelementptr inbounds [100 x i32]* %A, i64 %sub1, i64 %sub
368 store i32 %conv, i32* %arrayidx2, align 4
369 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
370 %0 = load i32* %arrayidx4, align 4
371 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
372 store i32 %0, i32* %B.addr.01, align 4
373 %inc = add nsw i64 %i.02, 1
374 %exitcond = icmp ne i64 %inc, 16
375 br i1 %exitcond, label %for.body, label %for.end
377 for.end: ; preds = %for.body
382 ;; for (long int i = 0; i <= 15; i++) {
383 ;; A[3*i - 18][6 - i] = i;
386 define void @couple10([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
390 ; CHECK: da analyze - none!
391 ; CHECK: da analyze - flow [>] splitable!
392 ; CHECK: da analyze - split level = 1, iteration = 3!
393 ; CHECK: da analyze - confused!
394 ; CHECK: da analyze - none!
395 ; CHECK: da analyze - confused!
396 ; CHECK: da analyze - none!
398 for.body: ; preds = %entry, %for.body
399 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
400 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
401 %conv = trunc i64 %i.02 to i32
402 %sub = sub nsw i64 6, %i.02
403 %mul = mul nsw i64 %i.02, 3
404 %sub1 = add nsw i64 %mul, -18
405 %arrayidx2 = getelementptr inbounds [100 x i32]* %A, i64 %sub1, i64 %sub
406 store i32 %conv, i32* %arrayidx2, align 4
407 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
408 %0 = load i32* %arrayidx4, align 4
409 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
410 store i32 %0, i32* %B.addr.01, align 4
411 %inc = add nsw i64 %i.02, 1
412 %exitcond = icmp ne i64 %inc, 16
413 br i1 %exitcond, label %for.body, label %for.end
415 for.end: ; preds = %for.body
420 ;; for (long int i = 0; i <= 15; i++) {
421 ;; A[3*i - 18][18 - i] = i;
424 define void @couple11([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
428 ; CHECK: da analyze - none!
429 ; CHECK: da analyze - flow [=|<] splitable!
430 ; CHECK: da analyze - split level = 1, iteration = 9!
431 ; CHECK: da analyze - confused!
432 ; CHECK: da analyze - none!
433 ; CHECK: da analyze - confused!
434 ; CHECK: da analyze - none!
436 for.body: ; preds = %entry, %for.body
437 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
438 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
439 %conv = trunc i64 %i.02 to i32
440 %sub = sub nsw i64 18, %i.02
441 %mul = mul nsw i64 %i.02, 3
442 %sub1 = add nsw i64 %mul, -18
443 %arrayidx2 = getelementptr inbounds [100 x i32]* %A, i64 %sub1, i64 %sub
444 store i32 %conv, i32* %arrayidx2, align 4
445 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
446 %0 = load i32* %arrayidx4, align 4
447 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
448 store i32 %0, i32* %B.addr.01, align 4
449 %inc = add nsw i64 %i.02, 1
450 %exitcond = icmp ne i64 %inc, 16
451 br i1 %exitcond, label %for.body, label %for.end
453 for.end: ; preds = %for.body
458 ;; for (long int i = 0; i <= 12; i++) {
459 ;; A[3*i - 18][22 - i] = i;
462 define void @couple12([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
466 ; CHECK: da analyze - none!
467 ; CHECK: da analyze - flow [<] splitable!
468 ; CHECK: da analyze - split level = 1, iteration = 11!
469 ; CHECK: da analyze - confused!
470 ; CHECK: da analyze - none!
471 ; CHECK: da analyze - confused!
472 ; CHECK: da analyze - none!
474 for.body: ; preds = %entry, %for.body
475 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
476 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
477 %conv = trunc i64 %i.02 to i32
478 %sub = sub nsw i64 22, %i.02
479 %mul = mul nsw i64 %i.02, 3
480 %sub1 = add nsw i64 %mul, -18
481 %arrayidx2 = getelementptr inbounds [100 x i32]* %A, i64 %sub1, i64 %sub
482 store i32 %conv, i32* %arrayidx2, align 4
483 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
484 %0 = load i32* %arrayidx4, align 4
485 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
486 store i32 %0, i32* %B.addr.01, align 4
487 %inc = add nsw i64 %i.02, 1
488 %exitcond = icmp ne i64 %inc, 13
489 br i1 %exitcond, label %for.body, label %for.end
491 for.end: ; preds = %for.body
496 ;; for (long int i = 0; i < 12; i++) {
497 ;; A[3*i - 18][22 - i] = i;
500 define void @couple13([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
504 ; CHECK: da analyze - none!
505 ; CHECK: da analyze - none!
506 ; CHECK: da analyze - confused!
507 ; CHECK: da analyze - none!
508 ; CHECK: da analyze - confused!
509 ; CHECK: da analyze - none!
511 for.body: ; preds = %entry, %for.body
512 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
513 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
514 %conv = trunc i64 %i.02 to i32
515 %sub = sub nsw i64 22, %i.02
516 %mul = mul nsw i64 %i.02, 3
517 %sub1 = add nsw i64 %mul, -18
518 %arrayidx2 = getelementptr inbounds [100 x i32]* %A, i64 %sub1, i64 %sub
519 store i32 %conv, i32* %arrayidx2, align 4
520 %arrayidx4 = getelementptr inbounds [100 x i32]* %A, i64 %i.02, i64 %i.02
521 %0 = load i32* %arrayidx4, align 4
522 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
523 store i32 %0, i32* %B.addr.01, align 4
524 %inc = add nsw i64 %i.02, 1
525 %exitcond = icmp ne i64 %inc, 12
526 br i1 %exitcond, label %for.body, label %for.end
528 for.end: ; preds = %for.body
532 ;; for (long int i = 0; i < 100; i++) {
533 ;; A[3*i - 18][18 - i][i] = i;
534 ;; *B++ = A[i][i][i];
536 define void @couple14([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
540 ; CHECK: da analyze - none!
541 ; CHECK: da analyze - flow [=|<] splitable!
542 ; CHECK: da analyze - split level = 1, iteration = 9!
543 ; CHECK: da analyze - confused!
544 ; CHECK: da analyze - none!
545 ; CHECK: da analyze - confused!
546 ; CHECK: da analyze - none!
548 for.body: ; preds = %entry, %for.body
549 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
550 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
551 %conv = trunc i64 %i.02 to i32
552 %sub = sub nsw i64 18, %i.02
553 %mul = mul nsw i64 %i.02, 3
554 %sub1 = add nsw i64 %mul, -18
555 %arrayidx3 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
556 store i32 %conv, i32* %arrayidx3, align 4
557 %arrayidx6 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
558 %0 = load i32* %arrayidx6, align 4
559 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
560 store i32 %0, i32* %B.addr.01, align 4
561 %inc = add nsw i64 %i.02, 1
562 %exitcond = icmp ne i64 %inc, 100
563 br i1 %exitcond, label %for.body, label %for.end
565 for.end: ; preds = %for.body
570 ;; for (long int i = 0; i < 100; i++) {
571 ;; A[3*i - 18][22 - i][i] = i;
572 ;; *B++ = A[i][i][i];
574 define void @couple15([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
578 ; CHECK: da analyze - none!
579 ; CHECK: da analyze - none!
580 ; CHECK: da analyze - confused!
581 ; CHECK: da analyze - none!
582 ; CHECK: da analyze - confused!
583 ; CHECK: da analyze - none!
585 for.body: ; preds = %entry, %for.body
586 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
587 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
588 %conv = trunc i64 %i.02 to i32
589 %sub = sub nsw i64 22, %i.02
590 %mul = mul nsw i64 %i.02, 3
591 %sub1 = add nsw i64 %mul, -18
592 %arrayidx3 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
593 store i32 %conv, i32* %arrayidx3, align 4
594 %arrayidx6 = getelementptr inbounds [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
595 %0 = load i32* %arrayidx6, align 4
596 %incdec.ptr = getelementptr inbounds i32* %B.addr.01, i64 1
597 store i32 %0, i32* %B.addr.01, align 4
598 %inc = add nsw i64 %i.02, 1
599 %exitcond = icmp ne i64 %inc, 100
600 br i1 %exitcond, label %for.body, label %for.end
602 for.end: ; preds = %for.body