[x86] Make the 'x86-64' cpu, what I see as and many use as the generic
[oota-llvm.git] / test / Analysis / DependenceAnalysis / Banerjee.ll
1 ; RUN: opt < %s -analyze -basicaa -da -da-delinearize=false | FileCheck %s
2 ; RUN: opt < %s -analyze -basicaa -da -da-delinearize | FileCheck %s -check-prefix=DELIN
3
4 ; ModuleID = 'Banerjee.bc'
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"
7
8
9 ;;  for (long int i = 1; i <= 10; i++)
10 ;;    for (long int j = 1; j <= 10; j++) {
11 ;;      A[10*i + j] = 0;
12 ;;      *B++ = A[10*i + j - 1];
13
14 define void @banerjee0(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
15 entry:
16   br label %for.cond1.preheader
17 ; CHECK: 'Dependence Analysis' for function 'banerjee0':
18 ; CHECK: da analyze - none!
19 ; CHECK: da analyze - flow [<= <>]!
20 ; CHECK: da analyze - confused!
21 ; CHECK: da analyze - none!
22 ; CHECK: da analyze - confused!
23 ; CHECK: da analyze - none!
24
25 ; DELIN: 'Dependence Analysis' for function 'banerjee0':
26 ; DELIN: da analyze - none!
27 ; DELIN: da analyze - consistent flow [0 1]!
28 ; DELIN: da analyze - confused!
29 ; DELIN: da analyze - none!
30 ; DELIN: da analyze - confused!
31 ; DELIN: da analyze - none!
32
33 for.cond1.preheader:                              ; preds = %entry, %for.inc7
34   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
35   %i.03 = phi i64 [ 1, %entry ], [ %inc8, %for.inc7 ]
36   br label %for.body3
37
38 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
39   %j.02 = phi i64 [ 1, %for.cond1.preheader ], [ %inc, %for.body3 ]
40   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
41   %mul = mul nsw i64 %i.03, 10
42   %add = add nsw i64 %mul, %j.02
43   %arrayidx = getelementptr inbounds i64* %A, i64 %add
44   store i64 0, i64* %arrayidx, align 8
45   %mul4 = mul nsw i64 %i.03, 10
46   %add5 = add nsw i64 %mul4, %j.02
47   %sub = add nsw i64 %add5, -1
48   %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
49   %0 = load i64* %arrayidx6, align 8
50   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
51   store i64 %0, i64* %B.addr.11, align 8
52   %inc = add nsw i64 %j.02, 1
53   %exitcond = icmp ne i64 %inc, 11
54   br i1 %exitcond, label %for.body3, label %for.inc7
55
56 for.inc7:                                         ; preds = %for.body3
57   %scevgep = getelementptr i64* %B.addr.04, i64 10
58   %inc8 = add nsw i64 %i.03, 1
59   %exitcond5 = icmp ne i64 %inc8, 11
60   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
61
62 for.end9:                                         ; preds = %for.inc7
63   ret void
64 }
65
66
67 ;;  for (long int i = 1; i <= n; i++)
68 ;;    for (long int j = 1; j <= m; j++) {
69 ;;      A[10*i + j] = 0;
70 ;;      *B++ = A[10*i + j - 1];
71
72 define void @banerjee1(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
73 entry:
74   %cmp4 = icmp sgt i64 %n, 0
75   br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end9
76
77 ; CHECK: 'Dependence Analysis' for function 'banerjee1':
78 ; CHECK: da analyze - output [* *]!
79 ; CHECK: da analyze - flow [* <>]!
80 ; CHECK: da analyze - confused!
81 ; CHECK: da analyze - input [* *]!
82 ; CHECK: da analyze - confused!
83 ; CHECK: da analyze - output [* *]!
84
85 ; DELIN: 'Dependence Analysis' for function 'banerjee1':
86 ; DELIN: da analyze - none
87 ; DELIN: da analyze - consistent flow [0 1]!
88 ; DELIN: da analyze - confused!
89 ; DELIN: da analyze - none
90 ; DELIN: da analyze - confused!
91 ; DELIN: da analyze - output [* *]!
92
93 for.cond1.preheader.preheader:                    ; preds = %entry
94   %0 = add i64 %n, 1
95   br label %for.cond1.preheader
96
97 for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc7
98   %B.addr.06 = phi i64* [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ]
99   %i.05 = phi i64 [ %inc8, %for.inc7 ], [ 1, %for.cond1.preheader.preheader ]
100   %1 = add i64 %m, 1
101   %cmp21 = icmp sgt i64 %m, 0
102   br i1 %cmp21, label %for.body3.preheader, label %for.inc7
103
104 for.body3.preheader:                              ; preds = %for.cond1.preheader
105   br label %for.body3
106
107 for.body3:                                        ; preds = %for.body3.preheader, %for.body3
108   %j.03 = phi i64 [ %inc, %for.body3 ], [ 1, %for.body3.preheader ]
109   %B.addr.12 = phi i64* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
110   %mul = mul nsw i64 %i.05, 10
111   %add = add nsw i64 %mul, %j.03
112   %arrayidx = getelementptr inbounds i64* %A, i64 %add
113   store i64 0, i64* %arrayidx, align 8
114   %mul4 = mul nsw i64 %i.05, 10
115   %add5 = add nsw i64 %mul4, %j.03
116   %sub = add nsw i64 %add5, -1
117   %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
118   %2 = load i64* %arrayidx6, align 8
119   %incdec.ptr = getelementptr inbounds i64* %B.addr.12, i64 1
120   store i64 %2, i64* %B.addr.12, align 8
121   %inc = add nsw i64 %j.03, 1
122   %exitcond = icmp eq i64 %inc, %1
123   br i1 %exitcond, label %for.inc7.loopexit, label %for.body3
124
125 for.inc7.loopexit:                                ; preds = %for.body3
126   %scevgep = getelementptr i64* %B.addr.06, i64 %m
127   br label %for.inc7
128
129 for.inc7:                                         ; preds = %for.inc7.loopexit, %for.cond1.preheader
130   %B.addr.1.lcssa = phi i64* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ]
131   %inc8 = add nsw i64 %i.05, 1
132   %exitcond7 = icmp eq i64 %inc8, %0
133   br i1 %exitcond7, label %for.end9.loopexit, label %for.cond1.preheader
134
135 for.end9.loopexit:                                ; preds = %for.inc7
136   br label %for.end9
137
138 for.end9:                                         ; preds = %for.end9.loopexit, %entry
139   ret void
140 }
141
142
143 ;;  for (long int i = 0; i < 10; i++)
144 ;;    for (long int j = 0; j < 10; j++) {
145 ;;      A[10*i + j] = 0;
146 ;;      *B++ = A[10*i + j + 100];
147
148 define void @banerjee2(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
149 entry:
150   br label %for.cond1.preheader
151
152 ; CHECK: 'Dependence Analysis' for function 'banerjee2':
153 ; CHECK: da analyze - none!
154 ; CHECK: da analyze - none!
155 ; CHECK: da analyze - confused!
156 ; CHECK: da analyze - none!
157 ; CHECK: da analyze - confused!
158 ; CHECK: da analyze - none!
159
160 ; DELIN: 'Dependence Analysis' for function 'banerjee2':
161 ; DELIN: da analyze - none!
162 ; DELIN: da analyze - none!
163 ; DELIN: da analyze - confused!
164 ; DELIN: da analyze - none!
165 ; DELIN: da analyze - confused!
166 ; DELIN: da analyze - none!
167
168 for.cond1.preheader:                              ; preds = %entry, %for.inc8
169   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
170   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
171   br label %for.body3
172
173 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
174   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
175   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
176   %mul = mul nsw i64 %i.03, 10
177   %add = add nsw i64 %mul, %j.02
178   %arrayidx = getelementptr inbounds i64* %A, i64 %add
179   store i64 0, i64* %arrayidx, align 8
180   %mul4 = mul nsw i64 %i.03, 10
181   %add5 = add nsw i64 %mul4, %j.02
182   %add6 = add nsw i64 %add5, 100
183   %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
184   %0 = load i64* %arrayidx7, align 8
185   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
186   store i64 %0, i64* %B.addr.11, align 8
187   %inc = add nsw i64 %j.02, 1
188   %exitcond = icmp ne i64 %inc, 10
189   br i1 %exitcond, label %for.body3, label %for.inc8
190
191 for.inc8:                                         ; preds = %for.body3
192   %scevgep = getelementptr i64* %B.addr.04, i64 10
193   %inc9 = add nsw i64 %i.03, 1
194   %exitcond5 = icmp ne i64 %inc9, 10
195   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
196
197 for.end10:                                        ; preds = %for.inc8
198   ret void
199 }
200
201
202 ;;  for (long int i = 0; i < 10; i++)
203 ;;    for (long int j = 0; j < 10; j++) {
204 ;;      A[10*i + j] = 0;
205 ;;      *B++ = A[10*i + j + 99];
206
207 define void @banerjee3(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
208 entry:
209   br label %for.cond1.preheader
210
211 ; CHECK: 'Dependence Analysis' for function 'banerjee3':
212 ; CHECK: da analyze - none!
213 ; CHECK: da analyze - flow [> >]!
214 ; CHECK: da analyze - confused!
215 ; CHECK: da analyze - none!
216 ; CHECK: da analyze - confused!
217 ; CHECK: da analyze - none!
218
219 ; DELIN: 'Dependence Analysis' for function 'banerjee3':
220 ; DELIN: da analyze - none!
221 ; DELIN: da analyze - consistent flow [-9 -9]!
222 ; DELIN: da analyze - confused!
223 ; DELIN: da analyze - none!
224 ; DELIN: da analyze - confused!
225 ; DELIN: da analyze - none!
226
227 for.cond1.preheader:                              ; preds = %entry, %for.inc8
228   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
229   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
230   br label %for.body3
231
232 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
233   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
234   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
235   %mul = mul nsw i64 %i.03, 10
236   %add = add nsw i64 %mul, %j.02
237   %arrayidx = getelementptr inbounds i64* %A, i64 %add
238   store i64 0, i64* %arrayidx, align 8
239   %mul4 = mul nsw i64 %i.03, 10
240   %add5 = add nsw i64 %mul4, %j.02
241   %add6 = add nsw i64 %add5, 99
242   %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
243   %0 = load i64* %arrayidx7, align 8
244   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
245   store i64 %0, i64* %B.addr.11, align 8
246   %inc = add nsw i64 %j.02, 1
247   %exitcond = icmp ne i64 %inc, 10
248   br i1 %exitcond, label %for.body3, label %for.inc8
249
250 for.inc8:                                         ; preds = %for.body3
251   %scevgep = getelementptr i64* %B.addr.04, i64 10
252   %inc9 = add nsw i64 %i.03, 1
253   %exitcond5 = icmp ne i64 %inc9, 10
254   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
255
256 for.end10:                                        ; preds = %for.inc8
257   ret void
258 }
259
260
261 ;;  for (long int i = 0; i < 10; i++)
262 ;;    for (long int j = 0; j < 10; j++) {
263 ;;      A[10*i + j] = 0;
264 ;;      *B++ = A[10*i + j - 100];
265
266 define void @banerjee4(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
267 entry:
268   br label %for.cond1.preheader
269
270 ; CHECK: 'Dependence Analysis' for function 'banerjee4':
271 ; CHECK: da analyze - none!
272 ; CHECK: da analyze - none!
273 ; CHECK: da analyze - confused!
274 ; CHECK: da analyze - none!
275 ; CHECK: da analyze - confused!
276 ; CHECK: da analyze - none!
277
278 ; DELIN: 'Dependence Analysis' for function 'banerjee4':
279 ; DELIN: da analyze - none!
280 ; DELIN: da analyze - none!
281 ; DELIN: da analyze - confused!
282 ; DELIN: da analyze - none!
283 ; DELIN: da analyze - confused!
284 ; DELIN: da analyze - none!
285
286 for.cond1.preheader:                              ; preds = %entry, %for.inc7
287   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
288   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
289   br label %for.body3
290
291 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
292   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
293   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
294   %mul = mul nsw i64 %i.03, 10
295   %add = add nsw i64 %mul, %j.02
296   %arrayidx = getelementptr inbounds i64* %A, i64 %add
297   store i64 0, i64* %arrayidx, align 8
298   %mul4 = mul nsw i64 %i.03, 10
299   %add5 = add nsw i64 %mul4, %j.02
300   %sub = add nsw i64 %add5, -100
301   %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
302   %0 = load i64* %arrayidx6, align 8
303   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
304   store i64 %0, i64* %B.addr.11, align 8
305   %inc = add nsw i64 %j.02, 1
306   %exitcond = icmp ne i64 %inc, 10
307   br i1 %exitcond, label %for.body3, label %for.inc7
308
309 for.inc7:                                         ; preds = %for.body3
310   %scevgep = getelementptr i64* %B.addr.04, i64 10
311   %inc8 = add nsw i64 %i.03, 1
312   %exitcond5 = icmp ne i64 %inc8, 10
313   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
314
315 for.end9:                                         ; preds = %for.inc7
316   ret void
317 }
318
319
320 ;;  for (long int i = 0; i < 10; i++)
321 ;;    for (long int j = 0; j < 10; j++) {
322 ;;      A[10*i + j] = 0;
323 ;;      *B++ = A[10*i + j - 99];
324
325 define void @banerjee5(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
326 entry:
327   br label %for.cond1.preheader
328
329 ; CHECK: 'Dependence Analysis' for function 'banerjee5':
330 ; CHECK: da analyze - none!
331 ; CHECK: da analyze - flow [< <]!
332 ; CHECK: da analyze - confused!
333 ; CHECK: da analyze - none!
334 ; CHECK: da analyze - confused!
335 ; CHECK: da analyze - none!
336
337 ; DELIN: 'Dependence Analysis' for function 'banerjee5':
338 ; DELIN: da analyze - none!
339 ; DELIN: da analyze - consistent flow [9 9]!
340 ; DELIN: da analyze - confused!
341 ; DELIN: da analyze - none!
342 ; DELIN: da analyze - confused!
343 ; DELIN: da analyze - none!
344
345 for.cond1.preheader:                              ; preds = %entry, %for.inc7
346   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
347   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
348   br label %for.body3
349
350 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
351   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
352   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
353   %mul = mul nsw i64 %i.03, 10
354   %add = add nsw i64 %mul, %j.02
355   %arrayidx = getelementptr inbounds i64* %A, i64 %add
356   store i64 0, i64* %arrayidx, align 8
357   %mul4 = mul nsw i64 %i.03, 10
358   %add5 = add nsw i64 %mul4, %j.02
359   %sub = add nsw i64 %add5, -99
360   %arrayidx6 = getelementptr inbounds i64* %A, i64 %sub
361   %0 = load i64* %arrayidx6, align 8
362   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
363   store i64 %0, i64* %B.addr.11, align 8
364   %inc = add nsw i64 %j.02, 1
365   %exitcond = icmp ne i64 %inc, 10
366   br i1 %exitcond, label %for.body3, label %for.inc7
367
368 for.inc7:                                         ; preds = %for.body3
369   %scevgep = getelementptr i64* %B.addr.04, i64 10
370   %inc8 = add nsw i64 %i.03, 1
371   %exitcond5 = icmp ne i64 %inc8, 10
372   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
373
374 for.end9:                                         ; preds = %for.inc7
375   ret void
376 }
377
378
379 ;;  for (long int i = 0; i < 10; i++)
380 ;;    for (long int j = 0; j < 10; j++) {
381 ;;      A[10*i + j] = 0;
382 ;;      *B++ = A[10*i + j + 9];
383
384 define void @banerjee6(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
385 entry:
386   br label %for.cond1.preheader
387
388 ; CHECK: 'Dependence Analysis' for function 'banerjee6':
389 ; CHECK: da analyze - none!
390 ; CHECK: da analyze - flow [=> <>]!
391 ; CHECK: da analyze - confused!
392 ; CHECK: da analyze - none!
393 ; CHECK: da analyze - confused!
394 ; CHECK: da analyze - none!
395
396 ; DELIN: 'Dependence Analysis' for function 'banerjee6':
397 ; DELIN: da analyze - none!
398 ; DELIN: da analyze - consistent flow [0 -9]!
399 ; DELIN: da analyze - confused!
400 ; DELIN: da analyze - none!
401 ; DELIN: da analyze - confused!
402 ; DELIN: da analyze - none!
403
404 for.cond1.preheader:                              ; preds = %entry, %for.inc8
405   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
406   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
407   br label %for.body3
408
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 i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
412   %mul = mul nsw i64 %i.03, 10
413   %add = add nsw i64 %mul, %j.02
414   %arrayidx = getelementptr inbounds i64* %A, i64 %add
415   store i64 0, i64* %arrayidx, align 8
416   %mul4 = mul nsw i64 %i.03, 10
417   %add5 = add nsw i64 %mul4, %j.02
418   %add6 = add nsw i64 %add5, 9
419   %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
420   %0 = load i64* %arrayidx7, align 8
421   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
422   store i64 %0, i64* %B.addr.11, align 8
423   %inc = add nsw i64 %j.02, 1
424   %exitcond = icmp ne i64 %inc, 10
425   br i1 %exitcond, label %for.body3, label %for.inc8
426
427 for.inc8:                                         ; preds = %for.body3
428   %scevgep = getelementptr i64* %B.addr.04, i64 10
429   %inc9 = add nsw i64 %i.03, 1
430   %exitcond5 = icmp ne i64 %inc9, 10
431   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
432
433 for.end10:                                        ; preds = %for.inc8
434   ret void
435 }
436
437
438 ;;  for (long int i = 0; i < 10; i++)
439 ;;    for (long int j = 0; j < 10; j++) {
440 ;;      A[10*i + j] = 0;
441 ;;      *B++ = A[10*i + j + 10];
442
443 define void @banerjee7(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
444 entry:
445   br label %for.cond1.preheader
446
447 ; CHECK: 'Dependence Analysis' for function 'banerjee7':
448 ; CHECK: da analyze - none!
449 ; CHECK: da analyze - flow [> <=]!
450 ; CHECK: da analyze - confused!
451 ; CHECK: da analyze - none!
452 ; CHECK: da analyze - confused!
453 ; CHECK: da analyze - none!
454
455 ; DELIN: 'Dependence Analysis' for function 'banerjee7':
456 ; DELIN: da analyze - none!
457 ; DELIN: da analyze - consistent flow [-1 0]!
458 ; DELIN: da analyze - confused!
459 ; DELIN: da analyze - none!
460 ; DELIN: da analyze - confused!
461 ; DELIN: da analyze - none!
462
463 for.cond1.preheader:                              ; preds = %entry, %for.inc8
464   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
465   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
466   br label %for.body3
467
468 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
469   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
470   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
471   %mul = mul nsw i64 %i.03, 10
472   %add = add nsw i64 %mul, %j.02
473   %arrayidx = getelementptr inbounds i64* %A, i64 %add
474   store i64 0, i64* %arrayidx, align 8
475   %mul4 = mul nsw i64 %i.03, 10
476   %add5 = add nsw i64 %mul4, %j.02
477   %add6 = add nsw i64 %add5, 10
478   %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
479   %0 = load i64* %arrayidx7, align 8
480   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
481   store i64 %0, i64* %B.addr.11, align 8
482   %inc = add nsw i64 %j.02, 1
483   %exitcond = icmp ne i64 %inc, 10
484   br i1 %exitcond, label %for.body3, label %for.inc8
485
486 for.inc8:                                         ; preds = %for.body3
487   %scevgep = getelementptr i64* %B.addr.04, i64 10
488   %inc9 = add nsw i64 %i.03, 1
489   %exitcond5 = icmp ne i64 %inc9, 10
490   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
491
492 for.end10:                                        ; preds = %for.inc8
493   ret void
494 }
495
496
497 ;;  for (long int i = 0; i < 10; i++)
498 ;;    for (long int j = 0; j < 10; j++) {
499 ;;      A[10*i + j] = 0;
500 ;;      *B++ = A[10*i + j + 11];
501
502 define void @banerjee8(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
503 entry:
504   br label %for.cond1.preheader
505
506 ; CHECK: 'Dependence Analysis' for function 'banerjee8':
507 ; CHECK: da analyze - none!
508 ; CHECK: da analyze - flow [> <>]!
509 ; CHECK: da analyze - confused!
510 ; CHECK: da analyze - none!
511 ; CHECK: da analyze - confused!
512 ; CHECK: da analyze - none!
513
514 ; DELIN: 'Dependence Analysis' for function 'banerjee8':
515 ; DELIN: da analyze - none!
516 ; DELIN: da analyze - consistent flow [-1 -1]!
517 ; DELIN: da analyze - confused!
518 ; DELIN: da analyze - none!
519 ; DELIN: da analyze - confused!
520 ; DELIN: da analyze - none!
521
522 for.cond1.preheader:                              ; preds = %entry, %for.inc8
523   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
524   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
525   br label %for.body3
526
527 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
528   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
529   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
530   %mul = mul nsw i64 %i.03, 10
531   %add = add nsw i64 %mul, %j.02
532   %arrayidx = getelementptr inbounds i64* %A, i64 %add
533   store i64 0, i64* %arrayidx, align 8
534   %mul4 = mul nsw i64 %i.03, 10
535   %add5 = add nsw i64 %mul4, %j.02
536   %add6 = add nsw i64 %add5, 11
537   %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
538   %0 = load i64* %arrayidx7, align 8
539   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
540   store i64 %0, i64* %B.addr.11, align 8
541   %inc = add nsw i64 %j.02, 1
542   %exitcond = icmp ne i64 %inc, 10
543   br i1 %exitcond, label %for.body3, label %for.inc8
544
545 for.inc8:                                         ; preds = %for.body3
546   %scevgep = getelementptr i64* %B.addr.04, i64 10
547   %inc9 = add nsw i64 %i.03, 1
548   %exitcond5 = icmp ne i64 %inc9, 10
549   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
550
551 for.end10:                                        ; preds = %for.inc8
552   ret void
553 }
554
555
556 ;;  for (long int i = 0; i < 20; i++)
557 ;;    for (long int j = 0; j < 20; j++) {
558 ;;      A[30*i + 500*j] = 0;
559 ;;      *B++ = A[i - 500*j + 11];
560
561 define void @banerjee9(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
562 entry:
563   br label %for.cond1.preheader
564
565 ; CHECK: 'Dependence Analysis' for function 'banerjee9':
566 ; CHECK: da analyze - output [* *]!
567 ; CHECK: da analyze - flow [<= =|<]!
568 ; CHECK: da analyze - confused!
569 ; CHECK: da analyze - none!
570 ; CHECK: da analyze - confused!
571 ; CHECK: da analyze - none!
572
573 ; DELIN: 'Dependence Analysis' for function 'banerjee9':
574 ; DELIN: da analyze - none!
575 ; DELIN: da analyze - flow [<= =|<]!
576 ; DELIN: da analyze - confused!
577 ; DELIN: da analyze - none!
578 ; DELIN: da analyze - confused!
579 ; DELIN: da analyze - none!
580
581 for.cond1.preheader:                              ; preds = %entry, %for.inc8
582   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ]
583   %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
584   br label %for.body3
585
586 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
587   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
588   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
589   %mul = mul nsw i64 %i.03, 30
590   %mul4 = mul nsw i64 %j.02, 500
591   %add = add nsw i64 %mul, %mul4
592   %arrayidx = getelementptr inbounds i64* %A, i64 %add
593   store i64 0, i64* %arrayidx, align 8
594   %0 = mul i64 %j.02, -500
595   %sub = add i64 %i.03, %0
596   %add6 = add nsw i64 %sub, 11
597   %arrayidx7 = getelementptr inbounds i64* %A, i64 %add6
598   %1 = load i64* %arrayidx7, align 8
599   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
600   store i64 %1, i64* %B.addr.11, align 8
601   %inc = add nsw i64 %j.02, 1
602   %exitcond = icmp ne i64 %inc, 20
603   br i1 %exitcond, label %for.body3, label %for.inc8
604
605 for.inc8:                                         ; preds = %for.body3
606   %scevgep = getelementptr i64* %B.addr.04, i64 20
607   %inc9 = add nsw i64 %i.03, 1
608   %exitcond5 = icmp ne i64 %inc9, 20
609   br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
610
611 for.end10:                                        ; preds = %for.inc8
612   ret void
613 }
614
615
616 ;;  for (long int i = 0; i < 20; i++)
617 ;;    for (long int j = 0; j < 20; j++) {
618 ;;      A[i + 500*j] = 0;
619 ;;      *B++ = A[i - 500*j + 11];
620
621 define void @banerjee10(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
622 entry:
623   br label %for.cond1.preheader
624
625 ; CHECK: 'Dependence Analysis' for function 'banerjee10':
626 ; CHECK: da analyze - none!
627 ; CHECK: da analyze - flow [<> =]!
628 ; CHECK: da analyze - confused!
629 ; CHECK: da analyze - none!
630 ; CHECK: da analyze - confused!
631 ; CHECK: da analyze - none!
632
633 ; DELIN: 'Dependence Analysis' for function 'banerjee10':
634 ; DELIN: da analyze - none!
635 ; DELIN: da analyze - flow [<> =]!
636 ; DELIN: da analyze - confused!
637 ; DELIN: da analyze - none!
638 ; DELIN: da analyze - confused!
639 ; DELIN: da analyze - none!
640
641 for.cond1.preheader:                              ; preds = %entry, %for.inc7
642   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
643   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
644   br label %for.body3
645
646 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
647   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
648   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
649   %mul = mul nsw i64 %j.02, 500
650   %add = add nsw i64 %i.03, %mul
651   %arrayidx = getelementptr inbounds i64* %A, i64 %add
652   store i64 0, i64* %arrayidx, align 8
653   %0 = mul i64 %j.02, -500
654   %sub = add i64 %i.03, %0
655   %add5 = add nsw i64 %sub, 11
656   %arrayidx6 = getelementptr inbounds i64* %A, i64 %add5
657   %1 = load i64* %arrayidx6, align 8
658   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
659   store i64 %1, i64* %B.addr.11, align 8
660   %inc = add nsw i64 %j.02, 1
661   %exitcond = icmp ne i64 %inc, 20
662   br i1 %exitcond, label %for.body3, label %for.inc7
663
664 for.inc7:                                         ; preds = %for.body3
665   %scevgep = getelementptr i64* %B.addr.04, i64 20
666   %inc8 = add nsw i64 %i.03, 1
667   %exitcond5 = icmp ne i64 %inc8, 20
668   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
669
670 for.end9:                                         ; preds = %for.inc7
671   ret void
672 }
673
674
675 ;;  for (long int i = 0; i < 20; i++)
676 ;;    for (long int j = 0; j < 20; j++) {
677 ;;      A[300*i + j] = 0;
678 ;;      *B++ = A[250*i - j + 11];
679
680 define void @banerjee11(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
681 entry:
682   br label %for.cond1.preheader
683
684 ; CHECK: 'Dependence Analysis' for function 'banerjee11':
685 ; CHECK: da analyze - none!
686 ; CHECK: da analyze - flow [<= <>]!
687 ; CHECK: da analyze - confused!
688 ; CHECK: da analyze - none!
689 ; CHECK: da analyze - confused!
690 ; CHECK: da analyze - none!
691
692 ; DELIN: 'Dependence Analysis' for function 'banerjee11':
693 ; DELIN: da analyze - none!
694 ; DELIN: da analyze - flow [<= <>]!
695 ; DELIN: da analyze - confused!
696 ; DELIN: da analyze - none!
697 ; DELIN: da analyze - confused!
698 ; DELIN: da analyze - none!
699
700 for.cond1.preheader:                              ; preds = %entry, %for.inc7
701   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
702   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
703   br label %for.body3
704
705 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
706   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
707   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
708   %mul = mul nsw i64 %i.03, 300
709   %add = add nsw i64 %mul, %j.02
710   %arrayidx = getelementptr inbounds i64* %A, i64 %add
711   store i64 0, i64* %arrayidx, align 8
712   %mul4 = mul nsw i64 %i.03, 250
713   %sub = sub nsw i64 %mul4, %j.02
714   %add5 = add nsw i64 %sub, 11
715   %arrayidx6 = getelementptr inbounds i64* %A, i64 %add5
716   %0 = load i64* %arrayidx6, align 8
717   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
718   store i64 %0, i64* %B.addr.11, align 8
719   %inc = add nsw i64 %j.02, 1
720   %exitcond = icmp ne i64 %inc, 20
721   br i1 %exitcond, label %for.body3, label %for.inc7
722
723 for.inc7:                                         ; preds = %for.body3
724   %scevgep = getelementptr i64* %B.addr.04, i64 20
725   %inc8 = add nsw i64 %i.03, 1
726   %exitcond5 = icmp ne i64 %inc8, 20
727   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
728
729 for.end9:                                         ; preds = %for.inc7
730   ret void
731 }
732
733
734 ;;  for (long int i = 0; i < 20; i++)
735 ;;    for (long int j = 0; j < 20; j++) {
736 ;;      A[100*i + j] = 0;
737 ;;      *B++ = A[100*i - j + 11];
738
739 define void @banerjee12(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp {
740 entry:
741   br label %for.cond1.preheader
742
743 ; CHECK: 'Dependence Analysis' for function 'banerjee12':
744 ; CHECK: da analyze - none!
745 ; CHECK: da analyze - flow [= <>]!
746 ; CHECK: da analyze - confused!
747 ; CHECK: da analyze - none!
748 ; CHECK: da analyze - confused!
749 ; CHECK: da analyze - none!
750
751 ; DELIN: 'Dependence Analysis' for function 'banerjee12':
752 ; DELIN: da analyze - none!
753 ; DELIN: da analyze - consistent flow [0 -11]!
754 ; DELIN: da analyze - confused!
755 ; DELIN: da analyze - none!
756 ; DELIN: da analyze - confused!
757 ; DELIN: da analyze - none!
758
759 for.cond1.preheader:                              ; preds = %entry, %for.inc7
760   %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ]
761   %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
762   br label %for.body3
763
764 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
765   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
766   %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
767   %mul = mul nsw i64 %i.03, 100
768   %add = add nsw i64 %mul, %j.02
769   %arrayidx = getelementptr inbounds i64* %A, i64 %add
770   store i64 0, i64* %arrayidx, align 8
771   %mul4 = mul nsw i64 %i.03, 100
772   %sub = sub nsw i64 %mul4, %j.02
773   %add5 = add nsw i64 %sub, 11
774   %arrayidx6 = getelementptr inbounds i64* %A, i64 %add5
775   %0 = load i64* %arrayidx6, align 8
776   %incdec.ptr = getelementptr inbounds i64* %B.addr.11, i64 1
777   store i64 %0, i64* %B.addr.11, align 8
778   %inc = add nsw i64 %j.02, 1
779   %exitcond = icmp ne i64 %inc, 20
780   br i1 %exitcond, label %for.body3, label %for.inc7
781
782 for.inc7:                                         ; preds = %for.body3
783   %scevgep = getelementptr i64* %B.addr.04, i64 20
784   %inc8 = add nsw i64 %i.03, 1
785   %exitcond5 = icmp ne i64 %inc8, 20
786   br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
787
788 for.end9:                                         ; preds = %for.inc7
789   ret void
790 }