xref: /aosp_15_r20/external/llvm/test/Analysis/DependenceAnalysis/Coupled.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 = 'Coupled.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 < 50; i++) {
9*9880d681SAndroid Build Coastguard Worker;;    A[i][i] = i;
10*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 10][i + 9];
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine void @couple0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  br label %for.body
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
17*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
18*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
19*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
20*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
21*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
24*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
25*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
26*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
27*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
28*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx1, align 4
29*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %i.02, 9
30*9880d681SAndroid Build Coastguard Worker  %add2 = add nsw i64 %i.02, 10
31*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
32*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
33*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
34*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
35*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
36*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
37*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
40*9880d681SAndroid Build Coastguard Worker  ret void
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
45*9880d681SAndroid Build Coastguard Worker;;    A[i][i] = i;
46*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 9][i + 9];
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine void @couple1([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
49*9880d681SAndroid Build Coastguard Workerentry:
50*9880d681SAndroid Build Coastguard Worker  br label %for.body
51*9880d681SAndroid Build Coastguard Worker
52*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
53*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - consistent flow [-9]!
54*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
55*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
56*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
57*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
60*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
61*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
62*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
63*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
64*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx1, align 4
65*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %i.02, 9
66*9880d681SAndroid Build Coastguard Worker  %add2 = add nsw i64 %i.02, 9
67*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
68*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
69*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
70*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
71*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
72*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
73*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
76*9880d681SAndroid Build Coastguard Worker  ret void
77*9880d681SAndroid Build Coastguard Worker}
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
81*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 6][3*i - 6] = i;
82*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Workerdefine void @couple2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
85*9880d681SAndroid Build Coastguard Workerentry:
86*9880d681SAndroid Build Coastguard Worker  br label %for.body
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
89*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [*|<]!
90*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
91*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
92*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
93*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
96*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
97*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
98*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
99*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
100*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %mul, -6
101*9880d681SAndroid Build Coastguard Worker  %mul1 = mul nsw i64 %i.02, 3
102*9880d681SAndroid Build Coastguard Worker  %sub2 = add nsw i64 %mul1, -6
103*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
104*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx3, align 4
105*9880d681SAndroid Build Coastguard Worker  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
106*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx5, align 4
107*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
108*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
109*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
110*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
111*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
114*9880d681SAndroid Build Coastguard Worker  ret void
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
119*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 6][3*i - 5] = i;
120*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine void @couple3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
123*9880d681SAndroid Build Coastguard Workerentry:
124*9880d681SAndroid Build Coastguard Worker  br label %for.body
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
127*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
128*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
129*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
130*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
131*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
134*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
135*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
136*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
137*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
138*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %mul, -5
139*9880d681SAndroid Build Coastguard Worker  %mul1 = mul nsw i64 %i.02, 3
140*9880d681SAndroid Build Coastguard Worker  %sub2 = add nsw i64 %mul1, -6
141*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
142*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx3, align 4
143*9880d681SAndroid Build Coastguard Worker  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
144*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx5, align 4
145*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
146*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
147*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
148*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
149*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
152*9880d681SAndroid Build Coastguard Worker  ret void
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
157*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 6][3*i - n] = i;
158*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerdefine void @couple4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
161*9880d681SAndroid Build Coastguard Workerentry:
162*9880d681SAndroid Build Coastguard Worker  br label %for.body
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
165*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [*|<]!
166*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
167*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
168*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
169*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
172*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
173*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
174*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
175*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
176*9880d681SAndroid Build Coastguard Worker  %conv1 = sext i32 %n to i64
177*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 %mul, %conv1
178*9880d681SAndroid Build Coastguard Worker  %mul2 = mul nsw i64 %i.02, 3
179*9880d681SAndroid Build Coastguard Worker  %sub3 = add nsw i64 %mul2, -6
180*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub3, i64 %sub
181*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx4, align 4
182*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
183*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx6, align 4
184*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
185*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
186*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
187*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
188*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
191*9880d681SAndroid Build Coastguard Worker  ret void
192*9880d681SAndroid Build Coastguard Worker}
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
196*9880d681SAndroid Build Coastguard Worker;;    A[3*i - n + 1][3*i - n] = i;
197*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerdefine void @couple5([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
200*9880d681SAndroid Build Coastguard Workerentry:
201*9880d681SAndroid Build Coastguard Worker  br label %for.body
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
204*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
205*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
206*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
207*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
208*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
211*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
212*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
213*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
214*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
215*9880d681SAndroid Build Coastguard Worker  %conv1 = sext i32 %n to i64
216*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 %mul, %conv1
217*9880d681SAndroid Build Coastguard Worker  %mul2 = mul nsw i64 %i.02, 3
218*9880d681SAndroid Build Coastguard Worker  %conv3 = sext i32 %n to i64
219*9880d681SAndroid Build Coastguard Worker  %sub4 = sub nsw i64 %mul2, %conv3
220*9880d681SAndroid Build Coastguard Worker  %add = add nsw i64 %sub4, 1
221*9880d681SAndroid Build Coastguard Worker  %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add, i64 %sub
222*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx5, align 4
223*9880d681SAndroid Build Coastguard Worker  %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
224*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx7, align 4
225*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
226*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
227*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
228*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
229*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
232*9880d681SAndroid Build Coastguard Worker  ret void
233*9880d681SAndroid Build Coastguard Worker}
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
237*9880d681SAndroid Build Coastguard Worker;;    A[i][3*i - 6] = i;
238*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Workerdefine void @couple6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
241*9880d681SAndroid Build Coastguard Workerentry:
242*9880d681SAndroid Build Coastguard Worker  br label %for.body
243*9880d681SAndroid Build Coastguard Worker
244*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
245*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=|<]!
246*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
247*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
248*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
249*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
252*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
253*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
254*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
255*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
256*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %mul, -6
257*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
258*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx1, align 4
259*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
260*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx3, align 4
261*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
262*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
263*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
264*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
265*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
268*9880d681SAndroid Build Coastguard Worker  ret void
269*9880d681SAndroid Build Coastguard Worker}
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 50; i++) {
273*9880d681SAndroid Build Coastguard Worker;;    A[i][3*i - 5] = i;
274*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Workerdefine void @couple7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
277*9880d681SAndroid Build Coastguard Workerentry:
278*9880d681SAndroid Build Coastguard Worker  br label %for.body
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
281*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
282*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
283*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
284*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
285*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
286*9880d681SAndroid Build Coastguard Worker
287*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
288*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
289*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
290*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
291*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
292*9880d681SAndroid Build Coastguard Worker  %sub = add nsw i64 %mul, -5
293*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
294*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx1, align 4
295*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
296*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx3, align 4
297*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
298*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
299*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
300*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 50
301*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
304*9880d681SAndroid Build Coastguard Worker  ret void
305*9880d681SAndroid Build Coastguard Worker}
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker
308*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i <= 15; i++) {
309*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][3 - i] = i;
310*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
311*9880d681SAndroid Build Coastguard Worker
312*9880d681SAndroid Build Coastguard Workerdefine void @couple8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
313*9880d681SAndroid Build Coastguard Workerentry:
314*9880d681SAndroid Build Coastguard Worker  br label %for.body
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
317*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
318*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
319*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
320*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
321*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
324*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
325*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
326*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
327*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 3, %i.02
328*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
329*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
330*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
331*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx2, align 4
332*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
333*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
334*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
335*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
336*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
337*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 16
338*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
339*9880d681SAndroid Build Coastguard Worker
340*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
341*9880d681SAndroid Build Coastguard Worker  ret void
342*9880d681SAndroid Build Coastguard Worker}
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Worker
345*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i <= 15; i++) {
346*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][2 - i] = i;
347*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Workerdefine void @couple9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
350*9880d681SAndroid Build Coastguard Workerentry:
351*9880d681SAndroid Build Coastguard Worker  br label %for.body
352*9880d681SAndroid Build Coastguard Worker
353*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
354*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
355*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
356*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
357*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
358*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
359*9880d681SAndroid Build Coastguard Worker
360*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
361*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
362*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
363*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
364*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 2, %i.02
365*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
366*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
367*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
368*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx2, align 4
369*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
370*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
371*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
372*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
373*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
374*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 16
375*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
378*9880d681SAndroid Build Coastguard Worker  ret void
379*9880d681SAndroid Build Coastguard Worker}
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i <= 15; i++) {
383*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][6 - i] = i;
384*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerdefine void @couple10([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
387*9880d681SAndroid Build Coastguard Workerentry:
388*9880d681SAndroid Build Coastguard Worker  br label %for.body
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
391*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>] splitable!
392*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 3!
393*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
394*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
395*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
396*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
399*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
400*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
401*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
402*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 6, %i.02
403*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
404*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
405*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
406*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx2, align 4
407*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
408*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
409*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
410*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
411*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
412*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 16
413*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
416*9880d681SAndroid Build Coastguard Worker  ret void
417*9880d681SAndroid Build Coastguard Worker}
418*9880d681SAndroid Build Coastguard Worker
419*9880d681SAndroid Build Coastguard Worker
420*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i <= 15; i++) {
421*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][18 - i] = i;
422*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Workerdefine void @couple11([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
425*9880d681SAndroid Build Coastguard Workerentry:
426*9880d681SAndroid Build Coastguard Worker  br label %for.body
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
429*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=|<] splitable!
430*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 9!
431*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
432*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
433*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
434*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
435*9880d681SAndroid Build Coastguard Worker
436*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
437*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
438*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
439*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
440*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 18, %i.02
441*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
442*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
443*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
444*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx2, align 4
445*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
446*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
447*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
448*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
449*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
450*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 16
451*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
452*9880d681SAndroid Build Coastguard Worker
453*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
454*9880d681SAndroid Build Coastguard Worker  ret void
455*9880d681SAndroid Build Coastguard Worker}
456*9880d681SAndroid Build Coastguard Worker
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i <= 12; i++) {
459*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][22 - i] = i;
460*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
461*9880d681SAndroid Build Coastguard Worker
462*9880d681SAndroid Build Coastguard Workerdefine void @couple12([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
463*9880d681SAndroid Build Coastguard Workerentry:
464*9880d681SAndroid Build Coastguard Worker  br label %for.body
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
467*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [<] splitable!
468*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 11!
469*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
470*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
471*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
472*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
473*9880d681SAndroid Build Coastguard Worker
474*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
475*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
476*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
477*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
478*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 22, %i.02
479*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
480*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
481*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
482*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx2, align 4
483*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
484*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
485*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
486*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
487*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
488*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 13
489*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
490*9880d681SAndroid Build Coastguard Worker
491*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
492*9880d681SAndroid Build Coastguard Worker  ret void
493*9880d681SAndroid Build Coastguard Worker}
494*9880d681SAndroid Build Coastguard Worker
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 12; i++) {
497*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][22 - i] = i;
498*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i];
499*9880d681SAndroid Build Coastguard Worker
500*9880d681SAndroid Build Coastguard Workerdefine void @couple13([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
501*9880d681SAndroid Build Coastguard Workerentry:
502*9880d681SAndroid Build Coastguard Worker  br label %for.body
503*9880d681SAndroid Build Coastguard Worker
504*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
505*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
506*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
507*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
508*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
509*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
510*9880d681SAndroid Build Coastguard Worker
511*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
512*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
513*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
514*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
515*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 22, %i.02
516*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
517*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
518*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
519*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx2, align 4
520*9880d681SAndroid Build Coastguard Worker  %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
521*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx4, align 4
522*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
523*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
524*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
525*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 12
526*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
527*9880d681SAndroid Build Coastguard Worker
528*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
529*9880d681SAndroid Build Coastguard Worker  ret void
530*9880d681SAndroid Build Coastguard Worker}
531*9880d681SAndroid Build Coastguard Worker
532*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++) {
533*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][18 - i][i] = i;
534*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i][i];
535*9880d681SAndroid Build Coastguard Worker
536*9880d681SAndroid Build Coastguard Workerdefine void @couple14([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
537*9880d681SAndroid Build Coastguard Workerentry:
538*9880d681SAndroid Build Coastguard Worker  br label %for.body
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
541*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=|<] splitable!
542*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - split level = 1, iteration = 9!
543*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
544*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
545*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
546*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
547*9880d681SAndroid Build Coastguard Worker
548*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
549*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
550*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
551*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
552*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 18, %i.02
553*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
554*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
555*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
556*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx3, align 4
557*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
558*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx6, align 4
559*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
560*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
561*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
562*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
563*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
564*9880d681SAndroid Build Coastguard Worker
565*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
566*9880d681SAndroid Build Coastguard Worker  ret void
567*9880d681SAndroid Build Coastguard Worker}
568*9880d681SAndroid Build Coastguard Worker
569*9880d681SAndroid Build Coastguard Worker
570*9880d681SAndroid Build Coastguard Worker;;  for (long int i = 0; i < 100; i++) {
571*9880d681SAndroid Build Coastguard Worker;;    A[3*i - 18][22 - i][i] = i;
572*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i][i][i];
573*9880d681SAndroid Build Coastguard Worker
574*9880d681SAndroid Build Coastguard Workerdefine void @couple15([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
575*9880d681SAndroid Build Coastguard Workerentry:
576*9880d681SAndroid Build Coastguard Worker  br label %for.body
577*9880d681SAndroid Build Coastguard Worker
578*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
579*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
580*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
581*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
582*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
583*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
584*9880d681SAndroid Build Coastguard Worker
585*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
586*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
587*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
588*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
589*9880d681SAndroid Build Coastguard Worker  %sub = sub nsw i64 22, %i.02
590*9880d681SAndroid Build Coastguard Worker  %mul = mul nsw i64 %i.02, 3
591*9880d681SAndroid Build Coastguard Worker  %sub1 = add nsw i64 %mul, -18
592*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
593*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx3, align 4
594*9880d681SAndroid Build Coastguard Worker  %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
595*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx6, align 4
596*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
597*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
598*9880d681SAndroid Build Coastguard Worker  %inc = add nsw i64 %i.02, 1
599*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 100
600*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
601*9880d681SAndroid Build Coastguard Worker
602*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
603*9880d681SAndroid Build Coastguard Worker  ret void
604*9880d681SAndroid Build Coastguard Worker}
605