[ARM] Better OR's for MVE compares
[llvm-core.git] / test / Analysis / DependenceAnalysis / ExactRDIV.ll
blob44b399cb191bf467036fab8b4cd6721caee7e44e
1 ; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
2 ; RUN: | FileCheck %s
3 ; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
5 ; ModuleID = 'ExactRDIV.bc'
6 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"
7 target triple = "x86_64-apple-macosx10.6.0"
10 ;;  for (long int i = 0; i < 10; i++)
11 ;;    A[4*i + 10] = i;
12 ;;  for (long int j = 0; j < 10; j++)
13 ;;    *B++ = A[2*j + 1];
15 define void @rdiv0(i32* %A, i32* %B) nounwind uwtable ssp {
16 entry:
17   br label %for.body
19 ; CHECK: da analyze - none!
20 ; CHECK: da analyze - none!
21 ; CHECK: da analyze - confused!
22 ; CHECK: da analyze - none!
23 ; CHECK: da analyze - confused!
24 ; CHECK: da analyze - none!
26 for.body:                                         ; preds = %entry, %for.body
27   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
28   %conv = trunc i64 %i.03 to i32
29   %mul = shl nsw i64 %i.03, 2
30   %add = add nsw i64 %mul, 10
31   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
32   store i32 %conv, i32* %arrayidx, align 4
33   %inc = add nsw i64 %i.03, 1
34   %exitcond5 = icmp ne i64 %inc, 10
35   br i1 %exitcond5, label %for.body, label %for.body4.preheader
37 for.body4.preheader:                              ; preds = %for.body
38   br label %for.body4
40 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
41   %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
42   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
43   %mul5 = shl nsw i64 %j.02, 1
44   %add64 = or i64 %mul5, 1
45   %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add64
46   %0 = load i32, i32* %arrayidx7, align 4
47   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
48   store i32 %0, i32* %B.addr.01, align 4
49   %inc9 = add nsw i64 %j.02, 1
50   %exitcond = icmp ne i64 %inc9, 10
51   br i1 %exitcond, label %for.body4, label %for.end10
53 for.end10:                                        ; preds = %for.body4
54   ret void
58 ;;  for (long int i = 0; i < 5; i++)
59 ;;    A[11*i - 45] = i;
60 ;;  for (long int j = 0; j < 10; j++)
61 ;;    *B++ = A[j];
63 define void @rdiv1(i32* %A, i32* %B) nounwind uwtable ssp {
64 entry:
65   br label %for.body
67 ; CHECK: da analyze - none!
68 ; CHECK: da analyze - none!
69 ; CHECK: da analyze - confused!
70 ; CHECK: da analyze - none!
71 ; CHECK: da analyze - confused!
72 ; CHECK: da analyze - none!
74 for.body:                                         ; preds = %entry, %for.body
75   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
76   %conv = trunc i64 %i.03 to i32
77   %mul = mul nsw i64 %i.03, 11
78   %sub = add nsw i64 %mul, -45
79   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
80   store i32 %conv, i32* %arrayidx, align 4
81   %inc = add nsw i64 %i.03, 1
82   %exitcond4 = icmp ne i64 %inc, 5
83   br i1 %exitcond4, label %for.body, label %for.body4.preheader
85 for.body4.preheader:                              ; preds = %for.body
86   br label %for.body4
88 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
89   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
90   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
91   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
92   %0 = load i32, i32* %arrayidx5, align 4
93   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
94   store i32 %0, i32* %B.addr.01, align 4
95   %inc7 = add nsw i64 %j.02, 1
96   %exitcond = icmp ne i64 %inc7, 10
97   br i1 %exitcond, label %for.body4, label %for.end8
99 for.end8:                                         ; preds = %for.body4
100   ret void
104 ;;  for (long int i = 0; i <= 5; i++)
105 ;;    A[11*i - 45] = i;
106 ;;  for (long int j = 0; j < 10; j++)
107 ;;    *B++ = A[j];
109 define void @rdiv2(i32* %A, i32* %B) nounwind uwtable ssp {
110 entry:
111   br label %for.body
113 ; CHECK: da analyze - none!
114 ; CHECK: da analyze - none!
115 ; CHECK: da analyze - confused!
116 ; CHECK: da analyze - none!
117 ; CHECK: da analyze - confused!
118 ; CHECK: da analyze - none!
120 for.body:                                         ; preds = %entry, %for.body
121   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
122   %conv = trunc i64 %i.03 to i32
123   %mul = mul nsw i64 %i.03, 11
124   %sub = add nsw i64 %mul, -45
125   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
126   store i32 %conv, i32* %arrayidx, align 4
127   %inc = add nsw i64 %i.03, 1
128   %exitcond4 = icmp ne i64 %inc, 6
129   br i1 %exitcond4, label %for.body, label %for.body4.preheader
131 for.body4.preheader:                              ; preds = %for.body
132   br label %for.body4
134 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
135   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
136   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
137   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
138   %0 = load i32, i32* %arrayidx5, align 4
139   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
140   store i32 %0, i32* %B.addr.01, align 4
141   %inc7 = add nsw i64 %j.02, 1
142   %exitcond = icmp ne i64 %inc7, 10
143   br i1 %exitcond, label %for.body4, label %for.end8
145 for.end8:                                         ; preds = %for.body4
146   ret void
150 ;;  for (long int i = 0; i < 5; i++)
151 ;;    A[11*i - 45] = i;
152 ;;  for (long int j = 0; j <= 10; j++)
153 ;;    *B++ = A[j];
155 define void @rdiv3(i32* %A, i32* %B) nounwind uwtable ssp {
156 entry:
157   br label %for.body
159 ; CHECK: da analyze - none!
160 ; CHECK: da analyze - none!
161 ; CHECK: da analyze - confused!
162 ; CHECK: da analyze - none!
163 ; CHECK: da analyze - confused!
164 ; CHECK: da analyze - none!
166 for.body:                                         ; preds = %entry, %for.body
167   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
168   %conv = trunc i64 %i.03 to i32
169   %mul = mul nsw i64 %i.03, 11
170   %sub = add nsw i64 %mul, -45
171   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
172   store i32 %conv, i32* %arrayidx, align 4
173   %inc = add nsw i64 %i.03, 1
174   %exitcond4 = icmp ne i64 %inc, 5
175   br i1 %exitcond4, label %for.body, label %for.body4.preheader
177 for.body4.preheader:                              ; preds = %for.body
178   br label %for.body4
180 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
181   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
182   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
183   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
184   %0 = load i32, i32* %arrayidx5, align 4
185   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
186   store i32 %0, i32* %B.addr.01, align 4
187   %inc7 = add nsw i64 %j.02, 1
188   %exitcond = icmp ne i64 %inc7, 11
189   br i1 %exitcond, label %for.body4, label %for.end8
191 for.end8:                                         ; preds = %for.body4
192   ret void
196 ;;  for (long int i = 0; i <= 5; i++)
197 ;;    A[11*i - 45] = i;
198 ;;  for (long int j = 0; j <= 10; j++)
199 ;;    *B++ = A[j];
201 define void @rdiv4(i32* %A, i32* %B) nounwind uwtable ssp {
202 entry:
203   br label %for.body
205 ; CHECK: da analyze - none!
206 ; CHECK: da analyze - flow [|<]!
207 ; CHECK: da analyze - confused!
208 ; CHECK: da analyze - none!
209 ; CHECK: da analyze - confused!
210 ; CHECK: da analyze - none!
212 for.body:                                         ; preds = %entry, %for.body
213   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
214   %conv = trunc i64 %i.03 to i32
215   %mul = mul nsw i64 %i.03, 11
216   %sub = add nsw i64 %mul, -45
217   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
218   store i32 %conv, i32* %arrayidx, align 4
219   %inc = add nsw i64 %i.03, 1
220   %exitcond4 = icmp ne i64 %inc, 6
221   br i1 %exitcond4, label %for.body, label %for.body4.preheader
223 for.body4.preheader:                              ; preds = %for.body
224   br label %for.body4
226 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
227   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
228   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
229   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
230   %0 = load i32, i32* %arrayidx5, align 4
231   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
232   store i32 %0, i32* %B.addr.01, align 4
233   %inc7 = add nsw i64 %j.02, 1
234   %exitcond = icmp ne i64 %inc7, 11
235   br i1 %exitcond, label %for.body4, label %for.end8
237 for.end8:                                         ; preds = %for.body4
238   ret void
242 ;;  for (long int i = 0; i < 5; i++)
243 ;;    A[-11*i + 45] = i;
244 ;;  for (long int j = 0; j < 10; j++)
245 ;;    *B++ = A[-j];
247 define void @rdiv5(i32* %A, i32* %B) nounwind uwtable ssp {
248 entry:
249   br label %for.body
251 ; CHECK: da analyze - none!
252 ; CHECK: da analyze - none!
253 ; CHECK: da analyze - confused!
254 ; CHECK: da analyze - none!
255 ; CHECK: da analyze - confused!
256 ; CHECK: da analyze - none!
258 for.body:                                         ; preds = %entry, %for.body
259   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
260   %conv = trunc i64 %i.03 to i32
261   %mul = mul nsw i64 %i.03, -11
262   %add = add nsw i64 %mul, 45
263   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
264   store i32 %conv, i32* %arrayidx, align 4
265   %inc = add nsw i64 %i.03, 1
266   %exitcond4 = icmp ne i64 %inc, 5
267   br i1 %exitcond4, label %for.body, label %for.body4.preheader
269 for.body4.preheader:                              ; preds = %for.body
270   br label %for.body4
272 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
273   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
274   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
275   %sub = sub nsw i64 0, %j.02
276   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
277   %0 = load i32, i32* %arrayidx5, align 4
278   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
279   store i32 %0, i32* %B.addr.01, align 4
280   %inc7 = add nsw i64 %j.02, 1
281   %exitcond = icmp ne i64 %inc7, 10
282   br i1 %exitcond, label %for.body4, label %for.end8
284 for.end8:                                         ; preds = %for.body4
285   ret void
289 ;;  for (long int i = 0; i <= 5; i++)
290 ;;    A[-11*i + 45] = i;
291 ;;  for (long int j = 0; j < 10; j++)
292 ;;    *B++ = A[-j];
294 define void @rdiv6(i32* %A, i32* %B) nounwind uwtable ssp {
295 entry:
296   br label %for.body
298 ; CHECK: da analyze - none!
299 ; CHECK: da analyze - none!
300 ; CHECK: da analyze - confused!
301 ; CHECK: da analyze - none!
302 ; CHECK: da analyze - confused!
303 ; CHECK: da analyze - none!
305 for.body:                                         ; preds = %entry, %for.body
306   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
307   %conv = trunc i64 %i.03 to i32
308   %mul = mul nsw i64 %i.03, -11
309   %add = add nsw i64 %mul, 45
310   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
311   store i32 %conv, i32* %arrayidx, align 4
312   %inc = add nsw i64 %i.03, 1
313   %exitcond4 = icmp ne i64 %inc, 6
314   br i1 %exitcond4, label %for.body, label %for.body4.preheader
316 for.body4.preheader:                              ; preds = %for.body
317   br label %for.body4
319 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
320   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
321   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
322   %sub = sub nsw i64 0, %j.02
323   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
324   %0 = load i32, i32* %arrayidx5, align 4
325   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
326   store i32 %0, i32* %B.addr.01, align 4
327   %inc7 = add nsw i64 %j.02, 1
328   %exitcond = icmp ne i64 %inc7, 10
329   br i1 %exitcond, label %for.body4, label %for.end8
331 for.end8:                                         ; preds = %for.body4
332   ret void
336 ;;  for (long int i = 0; i < 5; i++)
337 ;;    A[-11*i + 45] = i;
338 ;;  for (long int j = 0; j <= 10; j++)
339 ;;    *B++ = A[-j];
341 define void @rdiv7(i32* %A, i32* %B) nounwind uwtable ssp {
342 entry:
343   br label %for.body
345 ; CHECK: da analyze - none!
346 ; CHECK: da analyze - none!
347 ; CHECK: da analyze - confused!
348 ; CHECK: da analyze - none!
349 ; CHECK: da analyze - confused!
350 ; CHECK: da analyze - none!
352 for.body:                                         ; preds = %entry, %for.body
353   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
354   %conv = trunc i64 %i.03 to i32
355   %mul = mul nsw i64 %i.03, -11
356   %add = add nsw i64 %mul, 45
357   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
358   store i32 %conv, i32* %arrayidx, align 4
359   %inc = add nsw i64 %i.03, 1
360   %exitcond4 = icmp ne i64 %inc, 5
361   br i1 %exitcond4, label %for.body, label %for.body4.preheader
363 for.body4.preheader:                              ; preds = %for.body
364   br label %for.body4
366 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
367   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
368   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
369   %sub = sub nsw i64 0, %j.02
370   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
371   %0 = load i32, i32* %arrayidx5, align 4
372   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
373   store i32 %0, i32* %B.addr.01, align 4
374   %inc7 = add nsw i64 %j.02, 1
375   %exitcond = icmp ne i64 %inc7, 11
376   br i1 %exitcond, label %for.body4, label %for.end8
378 for.end8:                                         ; preds = %for.body4
379   ret void
383 ;;  for (long int i = 0; i <= 5; i++)
384 ;;    A[-11*i + 45] = i;
385 ;;  for (long int j = 0; j <= 10; j++)
386 ;;    *B++ = A[-j];
388 define void @rdiv8(i32* %A, i32* %B) nounwind uwtable ssp {
389 entry:
390   br label %for.body
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 for.body:                                         ; preds = %entry, %for.body
400   %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
401   %conv = trunc i64 %i.03 to i32
402   %mul = mul nsw i64 %i.03, -11
403   %add = add nsw i64 %mul, 45
404   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
405   store i32 %conv, i32* %arrayidx, align 4
406   %inc = add nsw i64 %i.03, 1
407   %exitcond4 = icmp ne i64 %inc, 6
408   br i1 %exitcond4, label %for.body, label %for.body4.preheader
410 for.body4.preheader:                              ; preds = %for.body
411   br label %for.body4
413 for.body4:                                        ; preds = %for.body4.preheader, %for.body4
414   %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
415   %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
416   %sub = sub nsw i64 0, %j.02
417   %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
418   %0 = load i32, i32* %arrayidx5, align 4
419   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
420   store i32 %0, i32* %B.addr.01, align 4
421   %inc7 = add nsw i64 %j.02, 1
422   %exitcond = icmp ne i64 %inc7, 11
423   br i1 %exitcond, label %for.body4, label %for.end8
425 for.end8:                                         ; preds = %for.body4
426   ret void
430 ;;  for (long int i = 0; i < 5; i++)
431 ;;    for (long int j = 0; j < 10; j++) {
432 ;;      A[11*i - j] = i;
433 ;;      *B++ = A[45];
435 define void @rdiv9(i32* %A, i32* %B) nounwind uwtable ssp {
436 entry:
437   br label %for.cond1.preheader
439 ; CHECK: da analyze - none!
440 ; CHECK: da analyze - none!
441 ; CHECK: da analyze - confused!
442 ; CHECK: da analyze - consistent input [S S]!
443 ; CHECK: da analyze - confused!
444 ; CHECK: da analyze - none!
446 for.cond1.preheader:                              ; preds = %entry, %for.inc5
447   %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
448   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
449   br label %for.body3
451 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
452   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
453   %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
454   %conv = trunc i64 %i.03 to i32
455   %mul = mul nsw i64 %i.03, 11
456   %sub = sub nsw i64 %mul, %j.02
457   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
458   store i32 %conv, i32* %arrayidx, align 4
459   %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
460   %0 = load i32, i32* %arrayidx4, align 4
461   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
462   store i32 %0, i32* %B.addr.11, align 4
463   %inc = add nsw i64 %j.02, 1
464   %exitcond = icmp ne i64 %inc, 10
465   br i1 %exitcond, label %for.body3, label %for.inc5
467 for.inc5:                                         ; preds = %for.body3
468   %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
469   %inc6 = add nsw i64 %i.03, 1
470   %exitcond5 = icmp ne i64 %inc6, 5
471   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
473 for.end7:                                         ; preds = %for.inc5
474   ret void
479 ;;  for (long int i = 0; i <= 5; i++)
480 ;;    for (long int j = 0; j < 10; j++) {
481 ;;      A[11*i - j] = i;
482 ;;      *B++ = A[45];
484 define void @rdiv10(i32* %A, i32* %B) nounwind uwtable ssp {
485 entry:
486   br label %for.cond1.preheader
488 ; CHECK: da analyze - none!
489 ; CHECK: da analyze - none!
490 ; CHECK: da analyze - confused!
491 ; CHECK: da analyze - consistent input [S S]!
492 ; CHECK: da analyze - confused!
493 ; CHECK: da analyze - none!
495 for.cond1.preheader:                              ; preds = %entry, %for.inc5
496   %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
497   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
498   br label %for.body3
500 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
501   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
502   %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
503   %conv = trunc i64 %i.03 to i32
504   %mul = mul nsw i64 %i.03, 11
505   %sub = sub nsw i64 %mul, %j.02
506   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
507   store i32 %conv, i32* %arrayidx, align 4
508   %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
509   %0 = load i32, i32* %arrayidx4, align 4
510   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
511   store i32 %0, i32* %B.addr.11, align 4
512   %inc = add nsw i64 %j.02, 1
513   %exitcond = icmp ne i64 %inc, 10
514   br i1 %exitcond, label %for.body3, label %for.inc5
516 for.inc5:                                         ; preds = %for.body3
517   %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
518   %inc6 = add nsw i64 %i.03, 1
519   %exitcond5 = icmp ne i64 %inc6, 6
520   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
522 for.end7:                                         ; preds = %for.inc5
523   ret void
527 ;;  for (long int i = 0; i < 5; i++)
528 ;;    for (long int j = 0; j <= 10; j++) {
529 ;;      A[11*i - j] = i;
530 ;;      *B++ = A[45];
532 define void @rdiv11(i32* %A, i32* %B) nounwind uwtable ssp {
533 entry:
534   br label %for.cond1.preheader
536 ; CHECK: da analyze - none!
537 ; CHECK: da analyze - none!
538 ; CHECK: da analyze - confused!
539 ; CHECK: da analyze - consistent input [S S]!
540 ; CHECK: da analyze - confused!
541 ; CHECK: da analyze - none!
543 for.cond1.preheader:                              ; preds = %entry, %for.inc5
544   %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
545   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
546   br label %for.body3
548 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
549   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
550   %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
551   %conv = trunc i64 %i.03 to i32
552   %mul = mul nsw i64 %i.03, 11
553   %sub = sub nsw i64 %mul, %j.02
554   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
555   store i32 %conv, i32* %arrayidx, align 4
556   %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
557   %0 = load i32, i32* %arrayidx4, align 4
558   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
559   store i32 %0, i32* %B.addr.11, align 4
560   %inc = add nsw i64 %j.02, 1
561   %exitcond = icmp ne i64 %inc, 11
562   br i1 %exitcond, label %for.body3, label %for.inc5
564 for.inc5:                                         ; preds = %for.body3
565   %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
566   %inc6 = add nsw i64 %i.03, 1
567   %exitcond5 = icmp ne i64 %inc6, 5
568   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
570 for.end7:                                         ; preds = %for.inc5
571   ret void
575 ;;  for (long int i = 0; i <= 5; i++)
576 ;;    for (long int j = 0; j <= 10; j++) {
577 ;;      A[11*i - j] = i;
578 ;;      *B++ = A[45];
580 define void @rdiv12(i32* %A, i32* %B) nounwind uwtable ssp {
581 entry:
582   br label %for.cond1.preheader
584 ; CHECK: da analyze - none!
585 ; CHECK: da analyze - flow [* *|<]!
586 ; CHECK: da analyze - confused!
587 ; CHECK: da analyze - consistent input [S S]!
588 ; CHECK: da analyze - confused!
589 ; CHECK: da analyze - none!
591 for.cond1.preheader:                              ; preds = %entry, %for.inc5
592   %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
593   %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
594   br label %for.body3
596 for.body3:                                        ; preds = %for.cond1.preheader, %for.body3
597   %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
598   %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
599   %conv = trunc i64 %i.03 to i32
600   %mul = mul nsw i64 %i.03, 11
601   %sub = sub nsw i64 %mul, %j.02
602   %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
603   store i32 %conv, i32* %arrayidx, align 4
604   %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
605   %0 = load i32, i32* %arrayidx4, align 4
606   %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
607   store i32 %0, i32* %B.addr.11, align 4
608   %inc = add nsw i64 %j.02, 1
609   %exitcond = icmp ne i64 %inc, 11
610   br i1 %exitcond, label %for.body3, label %for.inc5
612 for.inc5:                                         ; preds = %for.body3
613   %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
614   %inc6 = add nsw i64 %i.03, 1
615   %exitcond5 = icmp ne i64 %inc6, 6
616   br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
618 for.end7:                                         ; preds = %for.inc5
619   ret void