Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Analysis / DependenceAnalysis / ExactRDIV.ll
blob4aa2458dcd8cd6d56bce1582d1d21ac9317361dd
1 ; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
2 ; RUN: | FileCheck %s
4 ; ModuleID = 'ExactRDIV.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"
9 ;;  for (long int i = 0; i < 10; i++)
10 ;;    A[4*i + 10] = i;
11 ;;  for (long int j = 0; j < 10; j++)
12 ;;    *B++ = A[2*j + 1];
14 define void @rdiv0(ptr %A, ptr %B) nounwind uwtable ssp {
15 entry:
16   br label %for.body
18 ; CHECK: da analyze - none!
19 ; CHECK: da analyze - none!
20 ; CHECK: da analyze - confused!
21 ; CHECK: da analyze - none!
22 ; CHECK: da analyze - confused!
23 ; CHECK: da analyze - none!
25 for.body:                                         ; preds = %entry, %for.body
26   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
27   %conv = trunc i64 %i.03 to i32
28   %mul = shl nsw i64 %i.03, 2
29   %add = add nsw i64 %mul, 10
30   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
31   store i32 %conv, ptr %arrayidx, align 4
32   %inc = add nsw i64 %i.03, 1
33   %exitcond5 = icmp ne i64 %inc, 10
34   br i1 %exitcond5, label %for.body, label %for.body4.preheader
36 for.body4.preheader:                              ; preds = %for.body
37   br label %for.body4
39 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
40   %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
41   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
42   %mul5 = shl nsw i64 %j.02, 1
43   %add64 = or disjoint i64 %mul5, 1
44   %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add64
45   %0 = load i32, ptr %arrayidx7, align 4
46   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
47   store i32 %0, ptr %B.addr.01, align 4
48   %inc9 = add nsw i64 %j.02, 1
49   %exitcond = icmp ne i64 %inc9, 10
50   br i1 %exitcond, label %for.body4, label %for.end10
52 for.end10:                                        ; preds = %for.body4
53   ret void
57 ;;  for (long int i = 0; i < 5; i++)
58 ;;    A[11*i - 45] = i;
59 ;;  for (long int j = 0; j < 10; j++)
60 ;;    *B++ = A[j];
62 define void @rdiv1(ptr %A, ptr %B) nounwind uwtable ssp {
63 entry:
64   br label %for.body
66 ; CHECK: da analyze - none!
67 ; CHECK: da analyze - none!
68 ; CHECK: da analyze - confused!
69 ; CHECK: da analyze - none!
70 ; CHECK: da analyze - confused!
71 ; CHECK: da analyze - none!
73 for.body:                                         ; preds = %entry, %for.body
74   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
75   %conv = trunc i64 %i.03 to i32
76   %mul = mul nsw i64 %i.03, 11
77   %sub = add nsw i64 %mul, -45
78   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
79   store i32 %conv, ptr %arrayidx, align 4
80   %inc = add nsw i64 %i.03, 1
81   %exitcond4 = icmp ne i64 %inc, 5
82   br i1 %exitcond4, label %for.body, label %for.body4.preheader
84 for.body4.preheader:                              ; preds = %for.body
85   br label %for.body4
87 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
88   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
89   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
90   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
91   %0 = load i32, ptr %arrayidx5, align 4
92   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
93   store i32 %0, ptr %B.addr.01, align 4
94   %inc7 = add nsw i64 %j.02, 1
95   %exitcond = icmp ne i64 %inc7, 10
96   br i1 %exitcond, label %for.body4, label %for.end8
98 for.end8:                                         ; preds = %for.body4
99   ret void
103 ;;  for (long int i = 0; i <= 5; i++)
104 ;;    A[11*i - 45] = i;
105 ;;  for (long int j = 0; j < 10; j++)
106 ;;    *B++ = A[j];
108 define void @rdiv2(ptr %A, ptr %B) nounwind uwtable ssp {
109 entry:
110   br label %for.body
112 ; CHECK: da analyze - none!
113 ; CHECK: da analyze - none!
114 ; CHECK: da analyze - confused!
115 ; CHECK: da analyze - none!
116 ; CHECK: da analyze - confused!
117 ; CHECK: da analyze - none!
119 for.body:                                         ; preds = %entry, %for.body
120   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
121   %conv = trunc i64 %i.03 to i32
122   %mul = mul nsw i64 %i.03, 11
123   %sub = add nsw i64 %mul, -45
124   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
125   store i32 %conv, ptr %arrayidx, align 4
126   %inc = add nsw i64 %i.03, 1
127   %exitcond4 = icmp ne i64 %inc, 6
128   br i1 %exitcond4, label %for.body, label %for.body4.preheader
130 for.body4.preheader:                              ; preds = %for.body
131   br label %for.body4
133 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
134   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
135   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
136   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
137   %0 = load i32, ptr %arrayidx5, align 4
138   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
139   store i32 %0, ptr %B.addr.01, align 4
140   %inc7 = add nsw i64 %j.02, 1
141   %exitcond = icmp ne i64 %inc7, 10
142   br i1 %exitcond, label %for.body4, label %for.end8
144 for.end8:                                         ; preds = %for.body4
145   ret void
149 ;;  for (long int i = 0; i < 5; i++)
150 ;;    A[11*i - 45] = i;
151 ;;  for (long int j = 0; j <= 10; j++)
152 ;;    *B++ = A[j];
154 define void @rdiv3(ptr %A, ptr %B) nounwind uwtable ssp {
155 entry:
156   br label %for.body
158 ; CHECK: da analyze - none!
159 ; CHECK: da analyze - none!
160 ; CHECK: da analyze - confused!
161 ; CHECK: da analyze - none!
162 ; CHECK: da analyze - confused!
163 ; CHECK: da analyze - none!
165 for.body:                                         ; preds = %entry, %for.body
166   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
167   %conv = trunc i64 %i.03 to i32
168   %mul = mul nsw i64 %i.03, 11
169   %sub = add nsw i64 %mul, -45
170   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
171   store i32 %conv, ptr %arrayidx, align 4
172   %inc = add nsw i64 %i.03, 1
173   %exitcond4 = icmp ne i64 %inc, 5
174   br i1 %exitcond4, label %for.body, label %for.body4.preheader
176 for.body4.preheader:                              ; preds = %for.body
177   br label %for.body4
179 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
180   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
181   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
182   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
183   %0 = load i32, ptr %arrayidx5, align 4
184   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
185   store i32 %0, ptr %B.addr.01, align 4
186   %inc7 = add nsw i64 %j.02, 1
187   %exitcond = icmp ne i64 %inc7, 11
188   br i1 %exitcond, label %for.body4, label %for.end8
190 for.end8:                                         ; preds = %for.body4
191   ret void
195 ;;  for (long int i = 0; i <= 5; i++)
196 ;;    A[11*i - 45] = i;
197 ;;  for (long int j = 0; j <= 10; j++)
198 ;;    *B++ = A[j];
200 define void @rdiv4(ptr %A, ptr %B) nounwind uwtable ssp {
201 entry:
202   br label %for.body
204 ; CHECK: da analyze - none!
205 ; CHECK: da analyze - flow [|<]!
206 ; CHECK: da analyze - confused!
207 ; CHECK: da analyze - none!
208 ; CHECK: da analyze - confused!
209 ; CHECK: da analyze - none!
211 for.body:                                         ; preds = %entry, %for.body
212   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
213   %conv = trunc i64 %i.03 to i32
214   %mul = mul nsw i64 %i.03, 11
215   %sub = add nsw i64 %mul, -45
216   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
217   store i32 %conv, ptr %arrayidx, align 4
218   %inc = add nsw i64 %i.03, 1
219   %exitcond4 = icmp ne i64 %inc, 6
220   br i1 %exitcond4, label %for.body, label %for.body4.preheader
222 for.body4.preheader:                              ; preds = %for.body
223   br label %for.body4
225 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
226   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
227   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
228   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %j.02
229   %0 = load i32, ptr %arrayidx5, align 4
230   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
231   store i32 %0, ptr %B.addr.01, align 4
232   %inc7 = add nsw i64 %j.02, 1
233   %exitcond = icmp ne i64 %inc7, 11
234   br i1 %exitcond, label %for.body4, label %for.end8
236 for.end8:                                         ; preds = %for.body4
237   ret void
241 ;;  for (long int i = 0; i < 5; i++)
242 ;;    A[-11*i + 45] = i;
243 ;;  for (long int j = 0; j < 10; j++)
244 ;;    *B++ = A[-j];
246 define void @rdiv5(ptr %A, ptr %B) nounwind uwtable ssp {
247 entry:
248   br label %for.body
250 ; CHECK: da analyze - none!
251 ; CHECK: da analyze - none!
252 ; CHECK: da analyze - confused!
253 ; CHECK: da analyze - none!
254 ; CHECK: da analyze - confused!
255 ; CHECK: da analyze - none!
257 for.body:                                         ; preds = %entry, %for.body
258   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
259   %conv = trunc i64 %i.03 to i32
260   %mul = mul nsw i64 %i.03, -11
261   %add = add nsw i64 %mul, 45
262   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
263   store i32 %conv, ptr %arrayidx, align 4
264   %inc = add nsw i64 %i.03, 1
265   %exitcond4 = icmp ne i64 %inc, 5
266   br i1 %exitcond4, label %for.body, label %for.body4.preheader
268 for.body4.preheader:                              ; preds = %for.body
269   br label %for.body4
271 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
272   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
273   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
274   %sub = sub nsw i64 0, %j.02
275   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
276   %0 = load i32, ptr %arrayidx5, align 4
277   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
278   store i32 %0, ptr %B.addr.01, align 4
279   %inc7 = add nsw i64 %j.02, 1
280   %exitcond = icmp ne i64 %inc7, 10
281   br i1 %exitcond, label %for.body4, label %for.end8
283 for.end8:                                         ; preds = %for.body4
284   ret void
288 ;;  for (long int i = 0; i <= 5; i++)
289 ;;    A[-11*i + 45] = i;
290 ;;  for (long int j = 0; j < 10; j++)
291 ;;    *B++ = A[-j];
293 define void @rdiv6(ptr %A, ptr %B) nounwind uwtable ssp {
294 entry:
295   br label %for.body
297 ; CHECK: da analyze - none!
298 ; CHECK: da analyze - none!
299 ; CHECK: da analyze - confused!
300 ; CHECK: da analyze - none!
301 ; CHECK: da analyze - confused!
302 ; CHECK: da analyze - none!
304 for.body:                                         ; preds = %entry, %for.body
305   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
306   %conv = trunc i64 %i.03 to i32
307   %mul = mul nsw i64 %i.03, -11
308   %add = add nsw i64 %mul, 45
309   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
310   store i32 %conv, ptr %arrayidx, align 4
311   %inc = add nsw i64 %i.03, 1
312   %exitcond4 = icmp ne i64 %inc, 6
313   br i1 %exitcond4, label %for.body, label %for.body4.preheader
315 for.body4.preheader:                              ; preds = %for.body
316   br label %for.body4
318 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
319   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
320   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
321   %sub = sub nsw i64 0, %j.02
322   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
323   %0 = load i32, ptr %arrayidx5, align 4
324   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
325   store i32 %0, ptr %B.addr.01, align 4
326   %inc7 = add nsw i64 %j.02, 1
327   %exitcond = icmp ne i64 %inc7, 10
328   br i1 %exitcond, label %for.body4, label %for.end8
330 for.end8:                                         ; preds = %for.body4
331   ret void
335 ;;  for (long int i = 0; i < 5; i++)
336 ;;    A[-11*i + 45] = i;
337 ;;  for (long int j = 0; j <= 10; j++)
338 ;;    *B++ = A[-j];
340 define void @rdiv7(ptr %A, ptr %B) nounwind uwtable ssp {
341 entry:
342   br label %for.body
344 ; CHECK: da analyze - none!
345 ; CHECK: da analyze - none!
346 ; CHECK: da analyze - confused!
347 ; CHECK: da analyze - none!
348 ; CHECK: da analyze - confused!
349 ; CHECK: da analyze - none!
351 for.body:                                         ; preds = %entry, %for.body
352   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
353   %conv = trunc i64 %i.03 to i32
354   %mul = mul nsw i64 %i.03, -11
355   %add = add nsw i64 %mul, 45
356   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
357   store i32 %conv, ptr %arrayidx, align 4
358   %inc = add nsw i64 %i.03, 1
359   %exitcond4 = icmp ne i64 %inc, 5
360   br i1 %exitcond4, label %for.body, label %for.body4.preheader
362 for.body4.preheader:                              ; preds = %for.body
363   br label %for.body4
365 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
366   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
367   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
368   %sub = sub nsw i64 0, %j.02
369   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
370   %0 = load i32, ptr %arrayidx5, align 4
371   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
372   store i32 %0, ptr %B.addr.01, align 4
373   %inc7 = add nsw i64 %j.02, 1
374   %exitcond = icmp ne i64 %inc7, 11
375   br i1 %exitcond, label %for.body4, label %for.end8
377 for.end8:                                         ; preds = %for.body4
378   ret void
382 ;;  for (long int i = 0; i <= 5; i++)
383 ;;    A[-11*i + 45] = i;
384 ;;  for (long int j = 0; j <= 10; j++)
385 ;;    *B++ = A[-j];
387 define void @rdiv8(ptr %A, ptr %B) nounwind uwtable ssp {
388 entry:
389   br label %for.body
391 ; CHECK: da analyze - none!
392 ; CHECK: da analyze - flow [|<]!
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.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
400   %conv = trunc i64 %i.03 to i32
401   %mul = mul nsw i64 %i.03, -11
402   %add = add nsw i64 %mul, 45
403   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add
404   store i32 %conv, ptr %arrayidx, align 4
405   %inc = add nsw i64 %i.03, 1
406   %exitcond4 = icmp ne i64 %inc, 6
407   br i1 %exitcond4, label %for.body, label %for.body4.preheader
409 for.body4.preheader:                              ; preds = %for.body
410   br label %for.body4
412 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
413   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
414   %B.addr.01 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
415   %sub = sub nsw i64 0, %j.02
416   %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %sub
417   %0 = load i32, ptr %arrayidx5, align 4
418   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1
419   store i32 %0, ptr %B.addr.01, align 4
420   %inc7 = add nsw i64 %j.02, 1
421   %exitcond = icmp ne i64 %inc7, 11
422   br i1 %exitcond, label %for.body4, label %for.end8
424 for.end8:                                         ; preds = %for.body4
425   ret void
429 ;;  for (long int i = 0; i < 5; i++)
430 ;;    for (long int j = 0; j < 10; j++) {
431 ;;      A[11*i - j] = i;
432 ;;      *B++ = A[45];
434 define void @rdiv9(ptr %A, ptr %B) nounwind uwtable ssp {
435 entry:
436   br label %for.cond1.preheader
438 ; CHECK: da analyze - none!
439 ; CHECK: da analyze - none!
440 ; CHECK: da analyze - confused!
441 ; CHECK: da analyze - consistent input [S S]!
442 ; CHECK: da analyze - confused!
443 ; CHECK: da analyze - none!
445 for.cond1.preheader:                              ; preds = %entry, %for.inc5
446   %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
447   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
448   br label %for.body3
450 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
451   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
452   %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
453   %conv = trunc i64 %i.03 to i32
454   %mul = mul nsw i64 %i.03, 11
455   %sub = sub nsw i64 %mul, %j.02
456   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
457   store i32 %conv, ptr %arrayidx, align 4
458   %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
459   %0 = load i32, ptr %arrayidx4, align 4
460   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
461   store i32 %0, ptr %B.addr.11, align 4
462   %inc = add nsw i64 %j.02, 1
463   %exitcond = icmp ne i64 %inc, 10
464   br i1 %exitcond, label %for.body3, label %for.inc5
466 for.inc5:                                         ; preds = %for.body3
467   %scevgep = getelementptr i32, ptr %B.addr.04, i64 10
468   %inc6 = add nsw i64 %i.03, 1
469   %exitcond5 = icmp ne i64 %inc6, 5
470   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
472 for.end7:                                         ; preds = %for.inc5
473   ret void
478 ;;  for (long int i = 0; i <= 5; i++)
479 ;;    for (long int j = 0; j < 10; j++) {
480 ;;      A[11*i - j] = i;
481 ;;      *B++ = A[45];
483 define void @rdiv10(ptr %A, ptr %B) nounwind uwtable ssp {
484 entry:
485   br label %for.cond1.preheader
487 ; CHECK: da analyze - none!
488 ; CHECK: da analyze - none!
489 ; CHECK: da analyze - confused!
490 ; CHECK: da analyze - consistent input [S S]!
491 ; CHECK: da analyze - confused!
492 ; CHECK: da analyze - none!
494 for.cond1.preheader:                              ; preds = %entry, %for.inc5
495   %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
496   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
497   br label %for.body3
499 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
500   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
501   %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
502   %conv = trunc i64 %i.03 to i32
503   %mul = mul nsw i64 %i.03, 11
504   %sub = sub nsw i64 %mul, %j.02
505   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
506   store i32 %conv, ptr %arrayidx, align 4
507   %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
508   %0 = load i32, ptr %arrayidx4, align 4
509   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
510   store i32 %0, ptr %B.addr.11, align 4
511   %inc = add nsw i64 %j.02, 1
512   %exitcond = icmp ne i64 %inc, 10
513   br i1 %exitcond, label %for.body3, label %for.inc5
515 for.inc5:                                         ; preds = %for.body3
516   %scevgep = getelementptr i32, ptr %B.addr.04, i64 10
517   %inc6 = add nsw i64 %i.03, 1
518   %exitcond5 = icmp ne i64 %inc6, 6
519   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
521 for.end7:                                         ; preds = %for.inc5
522   ret void
526 ;;  for (long int i = 0; i < 5; i++)
527 ;;    for (long int j = 0; j <= 10; j++) {
528 ;;      A[11*i - j] = i;
529 ;;      *B++ = A[45];
531 define void @rdiv11(ptr %A, ptr %B) nounwind uwtable ssp {
532 entry:
533   br label %for.cond1.preheader
535 ; CHECK: da analyze - none!
536 ; CHECK: da analyze - none!
537 ; CHECK: da analyze - confused!
538 ; CHECK: da analyze - consistent input [S S]!
539 ; CHECK: da analyze - confused!
540 ; CHECK: da analyze - none!
542 for.cond1.preheader:                              ; preds = %entry, %for.inc5
543   %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
544   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
545   br label %for.body3
547 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
548   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
549   %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
550   %conv = trunc i64 %i.03 to i32
551   %mul = mul nsw i64 %i.03, 11
552   %sub = sub nsw i64 %mul, %j.02
553   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
554   store i32 %conv, ptr %arrayidx, align 4
555   %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
556   %0 = load i32, ptr %arrayidx4, align 4
557   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
558   store i32 %0, ptr %B.addr.11, align 4
559   %inc = add nsw i64 %j.02, 1
560   %exitcond = icmp ne i64 %inc, 11
561   br i1 %exitcond, label %for.body3, label %for.inc5
563 for.inc5:                                         ; preds = %for.body3
564   %scevgep = getelementptr i32, ptr %B.addr.04, i64 11
565   %inc6 = add nsw i64 %i.03, 1
566   %exitcond5 = icmp ne i64 %inc6, 5
567   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
569 for.end7:                                         ; preds = %for.inc5
570   ret void
574 ;;  for (long int i = 0; i <= 5; i++)
575 ;;    for (long int j = 0; j <= 10; j++) {
576 ;;      A[11*i - j] = i;
577 ;;      *B++ = A[45];
579 define void @rdiv12(ptr %A, ptr %B) nounwind uwtable ssp {
580 entry:
581   br label %for.cond1.preheader
583 ; CHECK: da analyze - none!
584 ; CHECK: da analyze - flow [* *|<]!
585 ; CHECK: da analyze - confused!
586 ; CHECK: da analyze - consistent input [S S]!
587 ; CHECK: da analyze - confused!
588 ; CHECK: da analyze - none!
590 for.cond1.preheader:                              ; preds = %entry, %for.inc5
591   %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc5 ]
592   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
593   br label %for.body3
595 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
596   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
597   %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
598   %conv = trunc i64 %i.03 to i32
599   %mul = mul nsw i64 %i.03, 11
600   %sub = sub nsw i64 %mul, %j.02
601   %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub
602   store i32 %conv, ptr %arrayidx, align 4
603   %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 45
604   %0 = load i32, ptr %arrayidx4, align 4
605   %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1
606   store i32 %0, ptr %B.addr.11, align 4
607   %inc = add nsw i64 %j.02, 1
608   %exitcond = icmp ne i64 %inc, 11
609   br i1 %exitcond, label %for.body3, label %for.inc5
611 for.inc5:                                         ; preds = %for.body3
612   %scevgep = getelementptr i32, ptr %B.addr.04, i64 11
613   %inc6 = add nsw i64 %i.03, 1
614   %exitcond5 = icmp ne i64 %inc6, 6
615   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
617 for.end7:                                         ; preds = %for.inc5
618   ret void