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