blob: 8865ee94016fa5e1a5342b0646ae93295590ff77 [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'Banerjee.bc'
4target 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"
5target triple = "x86_64-apple-macosx10.6.0"
6
7
8;; for (long int i = 1; i <= 10; i++)
9;; for (long int j = 1; j <= 10; j++) {
10;; A[10*i + j] = ...
11;; ... = A[10*i + j - 1];
12
13define void @banerjee0(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
14entry:
15 br label %for.cond1.preheader
16
17for.cond1.preheader: ; preds = %entry, %for.inc7
18 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
19 %i.03 = phi i64 [ 1, %entry ], [ %inc8, %for.inc7 ]
20 br label %for.body3
21
22for.body3: ; preds = %for.cond1.preheader, %for.body3
23 %j.02 = phi i64 [ 1, %for.cond1.preheader ], [ %inc, %for.body3 ]
24 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
25 %mul = mul nsw i64 %i.03, 10
26 %add = add nsw i64 %mul, %j.02
27 %arrayidx = getelementptr inbounds i64* %A, i64 %add
28 store i64 0, i64* %arrayidx, align 8
29 %mul4 = mul nsw i64 %i.03, 10
30 %add5 = add nsw i64 %mul4, %j.02
31 %sub = add nsw i64 %add5, -1
32 %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
33 %0 = load i64* %arrayidx6, align 8
34; CHECK: da analyze - flow [<= <>]!
35 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
36 store i64 %0, i64* %B.addr.11, align 8
37 %inc = add nsw i64 %j.02, 1
38 %exitcond = icmp ne i64 %inc, 11
39 br i1 %exitcond, label %for.body3, label %for.inc7
40
41for.inc7: ; preds = %for.body3
42 %scevgep = getelementptr i64* %B.addr.04, i64 10
43 %inc8 = add nsw i64 %i.03, 1
44 %exitcond5 = icmp ne i64 %inc8, 11
45 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
46
47for.end9: ; preds = %for.inc7
48 ret void
49}
50
51
52;; for (long int i = 1; i <= n; i++)
53;; for (long int j = 1; j <= m; j++) {
54;; A[10*i + j] = ...
55;; ... = A[10*i + j - 1];
56
57define void @banerjee1(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
58entry:
59 %cmp4 = icmp sgt i64 %n, 0
60 br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end9
61
62for.cond1.preheader.preheader: ; preds = %entry
63 %0 = add i64 %n, 1
64 br label %for.cond1.preheader
65
66for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc7
67 %B.addr.06 = phi i64* [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ]
68 %i.05 = phi i64 [ %inc8, %for.inc7 ], [ 1, %for.cond1.preheader.preheader ]
69 %1 = add i64 %m, 1
70 %cmp21 = icmp sgt i64 %m, 0
71 br i1 %cmp21, label %for.body3.preheader, label %for.inc7
72
73for.body3.preheader: ; preds = %for.cond1.preheader
74 br label %for.body3
75
76for.body3: ; preds = %for.body3.preheader, %for.body3
77 %j.03 = phi i64 [ %inc, %for.body3 ], [ 1, %for.body3.preheader ]
78 %B.addr.12 = phi i64* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
79 %mul = mul nsw i64 %i.05, 10
80 %add = add nsw i64 %mul, %j.03
81 %arrayidx = getelementptr inbounds i64* %A, i64 %add
82 store i64 0, i64* %arrayidx, align 8
83 %mul4 = mul nsw i64 %i.05, 10
84 %add5 = add nsw i64 %mul4, %j.03
85 %sub = add nsw i64 %add5, -1
86 %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
87 %2 = load i64* %arrayidx6, align 8
88; CHECK: da analyze - flow [* <>]!
89 %incdec.ptr = getelementptr inbounds i64* %B.addr.12, i64 1
90 store i64 %2, i64* %B.addr.12, align 8
91 %inc = add nsw i64 %j.03, 1
92 %exitcond = icmp eq i64 %inc, %1
93 br i1 %exitcond, label %for.inc7.loopexit, label %for.body3
94
95for.inc7.loopexit: ; preds = %for.body3
96 %scevgep = getelementptr i64* %B.addr.06, i64 %m
97 br label %for.inc7
98
99for.inc7: ; preds = %for.inc7.loopexit, %for.cond1.preheader
100 %B.addr.1.lcssa = phi i64* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ]
101 %inc8 = add nsw i64 %i.05, 1
102 %exitcond7 = icmp eq i64 %inc8, %0
103 br i1 %exitcond7, label %for.end9.loopexit, label %for.cond1.preheader
104
105for.end9.loopexit: ; preds = %for.inc7
106 br label %for.end9
107
108for.end9: ; preds = %for.end9.loopexit, %entry
109 ret void
110}
111
112
113;; for (long int i = 0; i < 10; i++)
114;; for (long int j = 0; j < 10; j++) {
115;; A[10*i + j] = 0;
116;; *B++ = A[10*i + j + 100];
117
118define void @banerjee2(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
119entry:
120 br label %for.cond1.preheader
121
122for.cond1.preheader: ; preds = %entry, %for.inc8
123 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
124 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
125 br label %for.body3
126
127for.body3: ; preds = %for.cond1.preheader, %for.body3
128 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
129 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
130 %mul = mul nsw i64 %i.03, 10
131 %add = add nsw i64 %mul, %j.02
132 %arrayidx = getelementptr inbounds i64* %A, i64 %add
133 store i64 0, i64* %arrayidx, align 8
134 %mul4 = mul nsw i64 %i.03, 10
135 %add5 = add nsw i64 %mul4, %j.02
136 %add6 = add nsw i64 %add5, 100
137 %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
138 %0 = load i64* %arrayidx7, align 8
139; CHECK: da analyze - none!
140 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
141 store i64 %0, i64* %B.addr.11, align 8
142 %inc = add nsw i64 %j.02, 1
143 %exitcond = icmp ne i64 %inc, 10
144 br i1 %exitcond, label %for.body3, label %for.inc8
145
146for.inc8: ; preds = %for.body3
147 %scevgep = getelementptr i64* %B.addr.04, i64 10
148 %inc9 = add nsw i64 %i.03, 1
149 %exitcond5 = icmp ne i64 %inc9, 10
150 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
151
152for.end10: ; preds = %for.inc8
153 ret void
154}
155
156
157;; for (long int i = 0; i < 10; i++)
158;; for (long int j = 0; j < 10; j++) {
159;; A[10*i + j] = ...
160;; ... = A[10*i + j + 99];
161
162define void @banerjee3(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
163entry:
164 br label %for.cond1.preheader
165
166for.cond1.preheader: ; preds = %entry, %for.inc8
167 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
168 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
169 br label %for.body3
170
171for.body3: ; preds = %for.cond1.preheader, %for.body3
172 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
173 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
174 %mul = mul nsw i64 %i.03, 10
175 %add = add nsw i64 %mul, %j.02
176 %arrayidx = getelementptr inbounds i64* %A, i64 %add
177 store i64 0, i64* %arrayidx, align 8
178 %mul4 = mul nsw i64 %i.03, 10
179 %add5 = add nsw i64 %mul4, %j.02
180 %add6 = add nsw i64 %add5, 99
181 %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
182 %0 = load i64* %arrayidx7, align 8
183; CHECK: da analyze - flow [> >]!
184 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
185 store i64 %0, i64* %B.addr.11, align 8
186 %inc = add nsw i64 %j.02, 1
187 %exitcond = icmp ne i64 %inc, 10
188 br i1 %exitcond, label %for.body3, label %for.inc8
189
190for.inc8: ; preds = %for.body3
191 %scevgep = getelementptr i64* %B.addr.04, i64 10
192 %inc9 = add nsw i64 %i.03, 1
193 %exitcond5 = icmp ne i64 %inc9, 10
194 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
195
196for.end10: ; preds = %for.inc8
197 ret void
198}
199
200
201;; for (long int i = 0; i < 10; i++)
202;; for (long int j = 0; j < 10; j++) {
203;; A[10*i + j] = ...
204;; ... = A[10*i + j - 100];
205
206define void @banerjee4(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
207entry:
208 br label %for.cond1.preheader
209
210for.cond1.preheader: ; preds = %entry, %for.inc7
211 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
212 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
213 br label %for.body3
214
215for.body3: ; preds = %for.cond1.preheader, %for.body3
216 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
217 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
218 %mul = mul nsw i64 %i.03, 10
219 %add = add nsw i64 %mul, %j.02
220 %arrayidx = getelementptr inbounds i64* %A, i64 %add
221 store i64 0, i64* %arrayidx, align 8
222 %mul4 = mul nsw i64 %i.03, 10
223 %add5 = add nsw i64 %mul4, %j.02
224 %sub = add nsw i64 %add5, -100
225 %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
226 %0 = load i64* %arrayidx6, align 8
227; CHECK: da analyze - none!
228 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
229 store i64 %0, i64* %B.addr.11, align 8
230 %inc = add nsw i64 %j.02, 1
231 %exitcond = icmp ne i64 %inc, 10
232 br i1 %exitcond, label %for.body3, label %for.inc7
233
234for.inc7: ; preds = %for.body3
235 %scevgep = getelementptr i64* %B.addr.04, i64 10
236 %inc8 = add nsw i64 %i.03, 1
237 %exitcond5 = icmp ne i64 %inc8, 10
238 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
239
240for.end9: ; preds = %for.inc7
241 ret void
242}
243
244
245;; for (long int i = 0; i < 10; i++)
246;; for (long int j = 0; j < 10; j++) {
247;; A[10*i + j] = ...
248;; ... = A[10*i + j - 99];
249
250define void @banerjee5(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
251entry:
252 br label %for.cond1.preheader
253
254for.cond1.preheader: ; preds = %entry, %for.inc7
255 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
256 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
257 br label %for.body3
258
259for.body3: ; preds = %for.cond1.preheader, %for.body3
260 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
261 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
262 %mul = mul nsw i64 %i.03, 10
263 %add = add nsw i64 %mul, %j.02
264 %arrayidx = getelementptr inbounds i64* %A, i64 %add
265 store i64 0, i64* %arrayidx, align 8
266 %mul4 = mul nsw i64 %i.03, 10
267 %add5 = add nsw i64 %mul4, %j.02
268 %sub = add nsw i64 %add5, -99
269 %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
270 %0 = load i64* %arrayidx6, align 8
271; CHECK: da analyze - flow [< <]!
272 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
273 store i64 %0, i64* %B.addr.11, align 8
274 %inc = add nsw i64 %j.02, 1
275 %exitcond = icmp ne i64 %inc, 10
276 br i1 %exitcond, label %for.body3, label %for.inc7
277
278for.inc7: ; preds = %for.body3
279 %scevgep = getelementptr i64* %B.addr.04, i64 10
280 %inc8 = add nsw i64 %i.03, 1
281 %exitcond5 = icmp ne i64 %inc8, 10
282 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
283
284for.end9: ; preds = %for.inc7
285 ret void
286}
287
288
289;; for (long int i = 0; i < 10; i++)
290;; for (long int j = 0; j < 10; j++) {
291;; A[10*i + j] = ...
292;; ... = A[10*i + j + 9];
293
294define void @banerjee6(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
295entry:
296 br label %for.cond1.preheader
297
298for.cond1.preheader: ; preds = %entry, %for.inc8
299 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
300 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
301 br label %for.body3
302
303for.body3: ; preds = %for.cond1.preheader, %for.body3
304 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
305 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
306 %mul = mul nsw i64 %i.03, 10
307 %add = add nsw i64 %mul, %j.02
308 %arrayidx = getelementptr inbounds i64* %A, i64 %add
309 store i64 0, i64* %arrayidx, align 8
310 %mul4 = mul nsw i64 %i.03, 10
311 %add5 = add nsw i64 %mul4, %j.02
312 %add6 = add nsw i64 %add5, 9
313 %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
314 %0 = load i64* %arrayidx7, align 8
315; CHECK: da analyze - flow [=> <>]!
316 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
317 store i64 %0, i64* %B.addr.11, align 8
318 %inc = add nsw i64 %j.02, 1
319 %exitcond = icmp ne i64 %inc, 10
320 br i1 %exitcond, label %for.body3, label %for.inc8
321
322for.inc8: ; preds = %for.body3
323 %scevgep = getelementptr i64* %B.addr.04, i64 10
324 %inc9 = add nsw i64 %i.03, 1
325 %exitcond5 = icmp ne i64 %inc9, 10
326 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
327
328for.end10: ; preds = %for.inc8
329 ret void
330}
331
332
333;; for (long int i = 0; i < 10; i++)
334;; for (long int j = 0; j < 10; j++) {
335;; A[10*i + j] = ...
336;; ... = A[10*i + j + 10];
337
338define void @banerjee7(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
339entry:
340 br label %for.cond1.preheader
341
342for.cond1.preheader: ; preds = %entry, %for.inc8
343 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
344 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
345 br label %for.body3
346
347for.body3: ; preds = %for.cond1.preheader, %for.body3
348 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
349 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
350 %mul = mul nsw i64 %i.03, 10
351 %add = add nsw i64 %mul, %j.02
352 %arrayidx = getelementptr inbounds i64* %A, i64 %add
353 store i64 0, i64* %arrayidx, align 8
354 %mul4 = mul nsw i64 %i.03, 10
355 %add5 = add nsw i64 %mul4, %j.02
356 %add6 = add nsw i64 %add5, 10
357 %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
358 %0 = load i64* %arrayidx7, align 8
359; CHECK: da analyze - flow [> <=]!
360 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
361 store i64 %0, i64* %B.addr.11, align 8
362 %inc = add nsw i64 %j.02, 1
363 %exitcond = icmp ne i64 %inc, 10
364 br i1 %exitcond, label %for.body3, label %for.inc8
365
366for.inc8: ; preds = %for.body3
367 %scevgep = getelementptr i64* %B.addr.04, i64 10
368 %inc9 = add nsw i64 %i.03, 1
369 %exitcond5 = icmp ne i64 %inc9, 10
370 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
371
372for.end10: ; preds = %for.inc8
373 ret void
374}
375
376
377;; for (long int i = 0; i < 10; i++)
378;; for (long int j = 0; j < 10; j++) {
379;; A[10*i + j] = ...
380;; ... = A[10*i + j + 11];
381
382define void @banerjee8(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
383entry:
384 br label %for.cond1.preheader
385
386for.cond1.preheader: ; preds = %entry, %for.inc8
387 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
388 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
389 br label %for.body3
390
391for.body3: ; preds = %for.cond1.preheader, %for.body3
392 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
393 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
394 %mul = mul nsw i64 %i.03, 10
395 %add = add nsw i64 %mul, %j.02
396 %arrayidx = getelementptr inbounds i64* %A, i64 %add
397 store i64 0, i64* %arrayidx, align 8
398 %mul4 = mul nsw i64 %i.03, 10
399 %add5 = add nsw i64 %mul4, %j.02
400 %add6 = add nsw i64 %add5, 11
401 %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
402 %0 = load i64* %arrayidx7, align 8
403; CHECK: da analyze - flow [> <>]!
404 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
405 store i64 %0, i64* %B.addr.11, align 8
406 %inc = add nsw i64 %j.02, 1
407 %exitcond = icmp ne i64 %inc, 10
408 br i1 %exitcond, label %for.body3, label %for.inc8
409
410for.inc8: ; preds = %for.body3
411 %scevgep = getelementptr i64* %B.addr.04, i64 10
412 %inc9 = add nsw i64 %i.03, 1
413 %exitcond5 = icmp ne i64 %inc9, 10
414 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
415
416for.end10: ; preds = %for.inc8
417 ret void
418}
419
420
421;; for (long int i = 0; i < 20; i++)
422;; for (long int j = 0; j < 20; j++) {
423;; A[30*i + 500*j] = ...
424;; ... = A[i - 500*j + 11];
425
426define void @banerjee9(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
427entry:
428 br label %for.cond1.preheader
429
430for.cond1.preheader: ; preds = %entry, %for.inc8
431 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
432 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
433 br label %for.body3
434
435for.body3: ; preds = %for.cond1.preheader, %for.body3
436 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
437 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
438 %mul = mul nsw i64 %i.03, 30
439 %mul4 = mul nsw i64 %j.02, 500
440 %add = add nsw i64 %mul, %mul4
441 %arrayidx = getelementptr inbounds i64* %A, i64 %add
442 store i64 0, i64* %arrayidx, align 8
443 %0 = mul i64 %j.02, -500
444 %sub = add i64 %i.03, %0
445 %add6 = add nsw i64 %sub, 11
446 %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
447 %1 = load i64* %arrayidx7, align 8
448; CHECK: da analyze - flow [<= =|<]!
449 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
450 store i64 %1, i64* %B.addr.11, align 8
451 %inc = add nsw i64 %j.02, 1
452 %exitcond = icmp ne i64 %inc, 20
453 br i1 %exitcond, label %for.body3, label %for.inc8
454
455for.inc8: ; preds = %for.body3
456 %scevgep = getelementptr i64* %B.addr.04, i64 20
457 %inc9 = add nsw i64 %i.03, 1
458 %exitcond5 = icmp ne i64 %inc9, 20
459 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
460
461for.end10: ; preds = %for.inc8
462 ret void
463}
464
465
466;; for (long int i = 0; i < 20; i++)
467;; for (long int j = 0; j < 20; j++) {
468;; A[i + 500*j] = ...
469;; ... = A[i - 500*j + 11];
470
471define void @banerjee10(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
472entry:
473 br label %for.cond1.preheader
474
475for.cond1.preheader: ; preds = %entry, %for.inc7
476 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
477 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
478 br label %for.body3
479
480for.body3: ; preds = %for.cond1.preheader, %for.body3
481 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
482 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
483 %mul = mul nsw i64 %j.02, 500
484 %add = add nsw i64 %i.03, %mul
485 %arrayidx = getelementptr inbounds i64* %A, i64 %add
486 store i64 0, i64* %arrayidx, align 8
487 %0 = mul i64 %j.02, -500
488 %sub = add i64 %i.03, %0
489 %add5 = add nsw i64 %sub, 11
490 %arrayidx6 = getelementptr inbounds i64* %A, i64 %add5
491 %1 = load i64* %arrayidx6, align 8
492; CHECK: da analyze - flow [<> =]!
493 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
494 store i64 %1, i64* %B.addr.11, align 8
495 %inc = add nsw i64 %j.02, 1
496 %exitcond = icmp ne i64 %inc, 20
497 br i1 %exitcond, label %for.body3, label %for.inc7
498
499for.inc7: ; preds = %for.body3
500 %scevgep = getelementptr i64* %B.addr.04, i64 20
501 %inc8 = add nsw i64 %i.03, 1
502 %exitcond5 = icmp ne i64 %inc8, 20
503 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
504
505for.end9: ; preds = %for.inc7
506 ret void
507}
508
509
510;; for (long int i = 0; i < 20; i++)
511;; for (long int j = 0; j < 20; j++) {
512;; A[300*i + j] = ...
513;; ... = A[250*i - j + 11];
514
515define void @banerjee11(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
516entry:
517 br label %for.cond1.preheader
518
519for.cond1.preheader: ; preds = %entry, %for.inc7
520 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
521 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
522 br label %for.body3
523
524for.body3: ; preds = %for.cond1.preheader, %for.body3
525 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
526 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
527 %mul = mul nsw i64 %i.03, 300
528 %add = add nsw i64 %mul, %j.02
529 %arrayidx = getelementptr inbounds i64* %A, i64 %add
530 store i64 0, i64* %arrayidx, align 8
531 %mul4 = mul nsw i64 %i.03, 250
532 %sub = sub nsw i64 %mul4, %j.02
533 %add5 = add nsw i64 %sub, 11
534 %arrayidx6 = getelementptr inbounds i64* %A, i64 %add5
535 %0 = load i64* %arrayidx6, align 8
536; CHECK: da analyze - flow [<= <>]!
537 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
538 store i64 %0, i64* %B.addr.11, align 8
539 %inc = add nsw i64 %j.02, 1
540 %exitcond = icmp ne i64 %inc, 20
541 br i1 %exitcond, label %for.body3, label %for.inc7
542
543for.inc7: ; preds = %for.body3
544 %scevgep = getelementptr i64* %B.addr.04, i64 20
545 %inc8 = add nsw i64 %i.03, 1
546 %exitcond5 = icmp ne i64 %inc8, 20
547 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
548
549for.end9: ; preds = %for.inc7
550 ret void
551}
552
553
554;; for (long int i = 0; i < 20; i++)
555;; for (long int j = 0; j < 20; j++) {
556;; A[100*i + j] = ...
557;; ... = A[100*i - j + 11];
558
559define void @banerjee12(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
560entry:
561 br label %for.cond1.preheader
562
563for.cond1.preheader: ; preds = %entry, %for.inc7
564 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
565 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
566 br label %for.body3
567
568for.body3: ; preds = %for.cond1.preheader, %for.body3
569 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
570 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
571 %mul = mul nsw i64 %i.03, 100
572 %add = add nsw i64 %mul, %j.02
573 %arrayidx = getelementptr inbounds i64* %A, i64 %add
574 store i64 0, i64* %arrayidx, align 8
575 %mul4 = mul nsw i64 %i.03, 100
576 %sub = sub nsw i64 %mul4, %j.02
577 %add5 = add nsw i64 %sub, 11
578 %arrayidx6 = getelementptr inbounds i64* %A, i64 %add5
579 %0 = load i64* %arrayidx6, align 8
580; CHECK: da analyze - flow [= <>]!
581 %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
582 store i64 %0, i64* %B.addr.11, align 8
583 %inc = add nsw i64 %j.02, 1
584 %exitcond = icmp ne i64 %inc, 20
585 br i1 %exitcond, label %for.body3, label %for.inc7
586
587for.inc7: ; preds = %for.body3
588 %scevgep = getelementptr i64* %B.addr.04, i64 20
589 %inc8 = add nsw i64 %i.03, 1
590 %exitcond5 = icmp ne i64 %inc8, 20
591 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
592
593for.end9: ; preds = %for.inc7
594 ret void
595}