xref: /aosp_15_r20/external/llvm/test/Analysis/DependenceAnalysis/Propagating.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; ModuleID = 'Propagating.bc'
4*9880d681SAndroid Build Coastguard Workertarget 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"
5*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-apple-macosx10.6.0"
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
9*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
10*9880d681SAndroid Build Coastguard Worker;;      A[i + 1][i + j] = i;
11*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[i][i + j];
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Workerdefine void @prop0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
14*9880d681SAndroid Build Coastguard Workerentry:
15*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
18*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [1 -1]!
19*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
20*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
21*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
22*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc9
25*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
26*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
27*9880d681SAndroid Build Coastguard Worker  br label %for.body3
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
30*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
31*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
32*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
33*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %i.03, %j.02
34*9880d681SAndroid Build Coastguard Worker  %add4 = add nsw i64 %i.03, 1
35*9880d681SAndroid Build Coastguard Worker  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add4, i64 %add
36*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx5, align 4
37*9880d681SAndroid Build Coastguard Worker  %add6 = add nsw i64 %i.03, %j.02
38*9880d681SAndroid Build Coastguard Worker  %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6
39*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx8, align 4
40*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
41*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
42*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
43*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
44*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc9
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerfor.inc9:                                         ; preds = %for.body3
47*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
48*9880d681SAndroid Build Coastguard Worker  %inc10 = add nsw i64 %i.03, 1
49*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc10, 100
50*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Workerfor.end11:                                        ; preds = %for.inc9
53*9880d681SAndroid Build Coastguard Worker  ret void
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
58*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++)
59*9880d681SAndroid Build Coastguard Worker;;      for (long int k = 0; k < 100; k++) {
60*9880d681SAndroid Build Coastguard Worker;;        A[j - i][i + 1][j + k] = i;
61*9880d681SAndroid Build Coastguard Worker;;        *B++ = A[j - i][i][j + k];
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Workerdefine void @prop1([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
68*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [1 1 -1]!
69*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
70*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
71*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
72*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc18
75*9880d681SAndroid Build Coastguard Worker  %B.addr.06 = phi i32* [ %B, %entry ], [ %scevgep7, %for.inc18 ]
76*9880d681SAndroid Build Coastguard Worker  %i.05 = phi i64 [ 0, %entry ], [ %inc19, %for.inc18 ]
77*9880d681SAndroid Build Coastguard Worker  br label %for.cond4.preheader
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Workerfor.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc15
80*9880d681SAndroid Build Coastguard Worker  %B.addr.14 = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ]
81*9880d681SAndroid Build Coastguard Worker  %j.03 = phi i64 [ 0, %for.cond1.preheader ], [ %inc16, %for.inc15 ]
82*9880d681SAndroid Build Coastguard Worker  br label %for.body6
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerfor.body6:                                        ; preds = %for.cond4.preheader, %for.body6
85*9880d681SAndroid Build Coastguard Worker  %k.02 = phi i64 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ]
86*9880d681SAndroid Build Coastguard Worker  %B.addr.21 = phi i32* [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ]
87*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.05 to i32
88*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %j.03, %k.02
89*9880d681SAndroid Build Coastguard Worker  %add7 = add nsw i64 %i.05, 1
90*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 %j.03, %i.05
91*9880d681SAndroid Build Coastguard Worker  %arrayidx9 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub, i64 %add7, i64 %add
92*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx9, align 4
93*9880d681SAndroid Build Coastguard Worker  %add10 = add nsw i64 %j.03, %k.02
94*9880d681SAndroid Build Coastguard Worker  %sub11 = sub nsw i64 %j.03, %i.05
95*9880d681SAndroid Build Coastguard Worker  %arrayidx14 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub11, i64 %i.05, i64 %add10
96*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx14, align 4
97*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.21, i64 1
98*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.21, align 4
99*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %k.02, 1
100*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
101*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body6, label %for.inc15
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerfor.inc15:                                        ; preds = %for.body6
104*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.14, i64 100
105*9880d681SAndroid Build Coastguard Worker  %inc16 = add nsw i64 %j.03, 1
106*9880d681SAndroid Build Coastguard Worker  %exitcond8 = icmp ne i64 %inc16, 100
107*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond8, label %for.cond4.preheader, label %for.inc18
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerfor.inc18:                                        ; preds = %for.inc15
110*9880d681SAndroid Build Coastguard Worker  %scevgep7 = getelementptr i32, i32* %B.addr.06, i64 10000
111*9880d681SAndroid Build Coastguard Worker  %inc19 = add nsw i64 %i.05, 1
112*9880d681SAndroid Build Coastguard Worker  %exitcond9 = icmp ne i64 %inc19, 100
113*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond9, label %for.cond1.preheader, label %for.end20
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Workerfor.end20:                                        ; preds = %for.inc18
116*9880d681SAndroid Build Coastguard Worker  ret void
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
121*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
122*9880d681SAndroid Build Coastguard Worker;;      A[i - 1][2*i] = i;
123*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[i][i + j + 110];
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine void @prop2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent output [0 S]!
130*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
131*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
132*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
133*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
134*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc8
137*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ]
138*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
139*9880d681SAndroid Build Coastguard Worker  br label %for.body3
140*9880d681SAndroid Build Coastguard Worker
141*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
142*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
143*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
144*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
145*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i64 %i.03, 1
146*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %i.03, -1
147*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub, i64 %mul
148*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx4, align 4
149*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %i.03, %j.02
150*9880d681SAndroid Build Coastguard Worker  %add5 = add nsw i64 %add, 110
151*9880d681SAndroid Build Coastguard Worker  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add5
152*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx7, align 4
153*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
154*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
155*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
156*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
157*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc8
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerfor.inc8:                                         ; preds = %for.body3
160*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
161*9880d681SAndroid Build Coastguard Worker  %inc9 = add nsw i64 %i.03, 1
162*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc9, 100
163*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Workerfor.end10:                                        ; preds = %for.inc8
166*9880d681SAndroid Build Coastguard Worker  ret void
167*9880d681SAndroid Build Coastguard Worker}
168*9880d681SAndroid Build Coastguard Worker
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
171*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
172*9880d681SAndroid Build Coastguard Worker;;      A[i][2*j + i] = i;
173*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[i][2*j - i + 5];
174*9880d681SAndroid Build Coastguard Worker
175*9880d681SAndroid Build Coastguard Workerdefine void @prop3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
176*9880d681SAndroid Build Coastguard Workerentry:
177*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
180*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
181*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
182*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
183*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
184*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc9
187*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
188*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
189*9880d681SAndroid Build Coastguard Worker  br label %for.body3
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
192*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
193*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
194*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
195*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i64 %j.02, 1
196*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %mul, %i.03
197*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add
198*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx4, align 4
199*9880d681SAndroid Build Coastguard Worker  %mul5 = shl nsw i64 %j.02, 1
200*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 %mul5, %i.03
201*9880d681SAndroid Build Coastguard Worker  %add6 = add nsw i64 %sub, 5
202*9880d681SAndroid Build Coastguard Worker  %arrayidx8 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add6
203*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx8, align 4
204*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
205*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
206*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
207*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
208*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc9
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerfor.inc9:                                         ; preds = %for.body3
211*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
212*9880d681SAndroid Build Coastguard Worker  %inc10 = add nsw i64 %i.03, 1
213*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc10, 100
214*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
215*9880d681SAndroid Build Coastguard Worker
216*9880d681SAndroid Build Coastguard Workerfor.end11:                                        ; preds = %for.inc9
217*9880d681SAndroid Build Coastguard Worker  ret void
218*9880d681SAndroid Build Coastguard Worker}
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
222*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
223*9880d681SAndroid Build Coastguard Worker;;      A[i + 2][2*i + j + 1] = i;
224*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[i][2*i + j];
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Workerdefine void @prop4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
227*9880d681SAndroid Build Coastguard Workerentry:
228*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
229*9880d681SAndroid Build Coastguard Worker
230*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
231*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [2 -3]!
232*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
233*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
234*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
235*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc11
238*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc11 ]
239*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc12, %for.inc11 ]
240*9880d681SAndroid Build Coastguard Worker  br label %for.body3
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
243*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
244*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
245*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
246*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i64 %i.03, 1
247*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %mul, %j.02
248*9880d681SAndroid Build Coastguard Worker  %add4 = add nsw i64 %add, 1
249*9880d681SAndroid Build Coastguard Worker  %add5 = add nsw i64 %i.03, 2
250*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4
251*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx6, align 4
252*9880d681SAndroid Build Coastguard Worker  %mul7 = shl nsw i64 %i.03, 1
253*9880d681SAndroid Build Coastguard Worker  %add8 = add nsw i64 %mul7, %j.02
254*9880d681SAndroid Build Coastguard Worker  %arrayidx10 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.03, i64 %add8
255*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx10, align 4
256*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
257*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
258*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
259*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
260*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc11
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Workerfor.inc11:                                        ; preds = %for.body3
263*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
264*9880d681SAndroid Build Coastguard Worker  %inc12 = add nsw i64 %i.03, 1
265*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc12, 100
266*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end13
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Workerfor.end13:                                        ; preds = %for.inc11
269*9880d681SAndroid Build Coastguard Worker  ret void
270*9880d681SAndroid Build Coastguard Worker}
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
274*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
275*9880d681SAndroid Build Coastguard Worker;;      A[3*i - 18][22 - i][2*i + j] = i;
276*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[i][i][3*i + j];
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerdefine void @prop5([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
279*9880d681SAndroid Build Coastguard Workerentry:
280*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
281*9880d681SAndroid Build Coastguard Worker
282*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
283*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [< -16] splitable!
284*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 11!
285*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
286*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
287*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
288*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc13
291*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc13 ]
292*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc14, %for.inc13 ]
293*9880d681SAndroid Build Coastguard Worker  br label %for.body3
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
296*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
297*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
298*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
299*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i64 %i.03, 1
300*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %mul, %j.02
301*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 22, %i.03
302*9880d681SAndroid Build Coastguard Worker  %mul4 = mul nsw i64 %i.03, 3
303*9880d681SAndroid Build Coastguard Worker  %sub5 = add nsw i64 %mul4, -18
304*9880d681SAndroid Build Coastguard Worker  %arrayidx7 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub5, i64 %sub, i64 %add
305*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx7, align 4
306*9880d681SAndroid Build Coastguard Worker  %mul8 = mul nsw i64 %i.03, 3
307*9880d681SAndroid Build Coastguard Worker  %add9 = add nsw i64 %mul8, %j.02
308*9880d681SAndroid Build Coastguard Worker  %arrayidx12 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.03, i64 %i.03, i64 %add9
309*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx12, align 4
310*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
311*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
312*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
313*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
314*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc13
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Workerfor.inc13:                                        ; preds = %for.body3
317*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
318*9880d681SAndroid Build Coastguard Worker  %inc14 = add nsw i64 %i.03, 1
319*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc14, 100
320*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end15
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Workerfor.end15:                                        ; preds = %for.inc13
323*9880d681SAndroid Build Coastguard Worker  ret void
324*9880d681SAndroid Build Coastguard Worker}
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Worker
327*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
328*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
329*9880d681SAndroid Build Coastguard Worker;;      A[i + 1][4*i + j + 2] = i;
330*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[2*i][8*i + j];
331*9880d681SAndroid Build Coastguard Worker
332*9880d681SAndroid Build Coastguard Workerdefine void @prop6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
333*9880d681SAndroid Build Coastguard Workerentry:
334*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
337*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=> -2]!
338*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
339*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
340*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
341*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc12
344*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc12 ]
345*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc13, %for.inc12 ]
346*9880d681SAndroid Build Coastguard Worker  br label %for.body3
347*9880d681SAndroid Build Coastguard Worker
348*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
349*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
350*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
351*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
352*9880d681SAndroid Build Coastguard Worker  %mul = shl nsw i64 %i.03, 2
353*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %mul, %j.02
354*9880d681SAndroid Build Coastguard Worker  %add4 = add nsw i64 %add, 2
355*9880d681SAndroid Build Coastguard Worker  %add5 = add nsw i64 %i.03, 1
356*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add5, i64 %add4
357*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx6, align 4
358*9880d681SAndroid Build Coastguard Worker  %mul7 = shl nsw i64 %i.03, 3
359*9880d681SAndroid Build Coastguard Worker  %add8 = add nsw i64 %mul7, %j.02
360*9880d681SAndroid Build Coastguard Worker  %mul9 = shl nsw i64 %i.03, 1
361*9880d681SAndroid Build Coastguard Worker  %arrayidx11 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %mul9, i64 %add8
362*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx11, align 4
363*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
364*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
365*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
366*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
367*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc12
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Workerfor.inc12:                                        ; preds = %for.body3
370*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
371*9880d681SAndroid Build Coastguard Worker  %inc13 = add nsw i64 %i.03, 1
372*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc13, 100
373*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end14
374*9880d681SAndroid Build Coastguard Worker
375*9880d681SAndroid Build Coastguard Workerfor.end14:                                        ; preds = %for.inc12
376*9880d681SAndroid Build Coastguard Worker  ret void
377*9880d681SAndroid Build Coastguard Worker}
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
381*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
382*9880d681SAndroid Build Coastguard Worker;;      A[2*i + 4][-5*i + j + 2] = i;
383*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[-2*i + 20][5*i + j];
384*9880d681SAndroid Build Coastguard Worker
385*9880d681SAndroid Build Coastguard Workerdefine void @prop7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
386*9880d681SAndroid Build Coastguard Workerentry:
387*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
388*9880d681SAndroid Build Coastguard Worker
389*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
390*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [* -38] splitable!
391*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 4!
392*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
393*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
394*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
395*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc14
398*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc14 ]
399*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc15, %for.inc14 ]
400*9880d681SAndroid Build Coastguard Worker  br label %for.body3
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
403*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
404*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
405*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
406*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.03, -5
407*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %mul, %j.02
408*9880d681SAndroid Build Coastguard Worker  %add4 = add nsw i64 %add, 2
409*9880d681SAndroid Build Coastguard Worker  %mul5 = shl nsw i64 %i.03, 1
410*9880d681SAndroid Build Coastguard Worker  %add6 = add nsw i64 %mul5, 4
411*9880d681SAndroid Build Coastguard Worker  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4
412*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx7, align 4
413*9880d681SAndroid Build Coastguard Worker  %mul8 = mul nsw i64 %i.03, 5
414*9880d681SAndroid Build Coastguard Worker  %add9 = add nsw i64 %mul8, %j.02
415*9880d681SAndroid Build Coastguard Worker  %mul10 = mul nsw i64 %i.03, -2
416*9880d681SAndroid Build Coastguard Worker  %add11 = add nsw i64 %mul10, 20
417*9880d681SAndroid Build Coastguard Worker  %arrayidx13 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add11, i64 %add9
418*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx13, align 4
419*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
420*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
421*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
422*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
423*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc14
424*9880d681SAndroid Build Coastguard Worker
425*9880d681SAndroid Build Coastguard Workerfor.inc14:                                        ; preds = %for.body3
426*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
427*9880d681SAndroid Build Coastguard Worker  %inc15 = add nsw i64 %i.03, 1
428*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc15, 100
429*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end16
430*9880d681SAndroid Build Coastguard Worker
431*9880d681SAndroid Build Coastguard Workerfor.end16:                                        ; preds = %for.inc14
432*9880d681SAndroid Build Coastguard Worker  ret void
433*9880d681SAndroid Build Coastguard Worker}
434*9880d681SAndroid Build Coastguard Worker
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
437*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
438*9880d681SAndroid Build Coastguard Worker;;      A[4][j + 2] = i;
439*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[-2*i + 4][5*i + j];
440*9880d681SAndroid Build Coastguard Worker
441*9880d681SAndroid Build Coastguard Workerdefine void @prop8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
442*9880d681SAndroid Build Coastguard Workerentry:
443*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
444*9880d681SAndroid Build Coastguard Worker
445*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent output [S 0]!
446*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [p<= 2]!
447*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
448*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
449*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
450*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc10
453*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
454*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
455*9880d681SAndroid Build Coastguard Worker  br label %for.body3
456*9880d681SAndroid Build Coastguard Worker
457*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
458*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
459*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
460*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
461*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %j.02, 2
462*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %add
463*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx4, align 4
464*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.03, 5
465*9880d681SAndroid Build Coastguard Worker  %add5 = add nsw i64 %mul, %j.02
466*9880d681SAndroid Build Coastguard Worker  %mul6 = mul nsw i64 %i.03, -2
467*9880d681SAndroid Build Coastguard Worker  %add7 = add nsw i64 %mul6, 4
468*9880d681SAndroid Build Coastguard Worker  %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add7, i64 %add5
469*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx9, align 4
470*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
471*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
472*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
473*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
474*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc10
475*9880d681SAndroid Build Coastguard Worker
476*9880d681SAndroid Build Coastguard Workerfor.inc10:                                        ; preds = %for.body3
477*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
478*9880d681SAndroid Build Coastguard Worker  %inc11 = add nsw i64 %i.03, 1
479*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc11, 100
480*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
481*9880d681SAndroid Build Coastguard Worker
482*9880d681SAndroid Build Coastguard Workerfor.end12:                                        ; preds = %for.inc10
483*9880d681SAndroid Build Coastguard Worker  ret void
484*9880d681SAndroid Build Coastguard Worker}
485*9880d681SAndroid Build Coastguard Worker
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++)
488*9880d681SAndroid Build Coastguard Worker;;    for (long int j = 0; j < 100; j++) {
489*9880d681SAndroid Build Coastguard Worker;;      A[2*i + 4][5*i + j + 2] = i;
490*9880d681SAndroid Build Coastguard Worker;;      *B++ = A[4][j];
491*9880d681SAndroid Build Coastguard Worker
492*9880d681SAndroid Build Coastguard Workerdefine void @prop9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
493*9880d681SAndroid Build Coastguard Workerentry:
494*9880d681SAndroid Build Coastguard Worker  br label %for.cond1.preheader
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
497*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [p<= 2]!
498*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
499*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent input [S 0]!
500*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
501*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
502*9880d681SAndroid Build Coastguard Worker
503*9880d681SAndroid Build Coastguard Workerfor.cond1.preheader:                              ; preds = %entry, %for.inc10
504*9880d681SAndroid Build Coastguard Worker  %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc10 ]
505*9880d681SAndroid Build Coastguard Worker  %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]
506*9880d681SAndroid Build Coastguard Worker  br label %for.body3
507*9880d681SAndroid Build Coastguard Worker
508*9880d681SAndroid Build Coastguard Workerfor.body3:                                        ; preds = %for.cond1.preheader, %for.body3
509*9880d681SAndroid Build Coastguard Worker  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
510*9880d681SAndroid Build Coastguard Worker  %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
511*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.03 to i32
512*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.03, 5
513*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %mul, %j.02
514*9880d681SAndroid Build Coastguard Worker  %add4 = add nsw i64 %add, 2
515*9880d681SAndroid Build Coastguard Worker  %mul5 = shl nsw i64 %i.03, 1
516*9880d681SAndroid Build Coastguard Worker  %add6 = add nsw i64 %mul5, 4
517*9880d681SAndroid Build Coastguard Worker  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add6, i64 %add4
518*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx7, align 4
519*9880d681SAndroid Build Coastguard Worker  %arrayidx9 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 4, i64 %j.02
520*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx9, align 4
521*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
522*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.11, align 4
523*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %j.02, 1
524*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
525*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body3, label %for.inc10
526*9880d681SAndroid Build Coastguard Worker
527*9880d681SAndroid Build Coastguard Workerfor.inc10:                                        ; preds = %for.body3
528*9880d681SAndroid Build Coastguard Worker  %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
529*9880d681SAndroid Build Coastguard Worker  %inc11 = add nsw i64 %i.03, 1
530*9880d681SAndroid Build Coastguard Worker  %exitcond5 = icmp ne i64 %inc11, 100
531*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond5, label %for.cond1.preheader, label %for.end12
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Workerfor.end12:                                        ; preds = %for.inc10
534*9880d681SAndroid Build Coastguard Worker  ret void
535*9880d681SAndroid Build Coastguard Worker}
536