xref: /aosp_15_r20/external/llvm/test/Analysis/DependenceAnalysis/ExactSIV.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 = 'ExactSIV.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 unsigned i = 0; i < 10; i++) {
9*9880d681SAndroid Build Coastguard Worker;;    A[i + 10] = i;
10*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[2*i + 1];
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Workerdefine void @exact0(i32* %A, i32* %B) 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 - flow [<=|<]!
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  %add = add i64 %i.02, 10
28*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
29*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
30*9880d681SAndroid Build Coastguard Worker  %mul = shl i64 %i.02, 1
31*9880d681SAndroid Build Coastguard Worker  %add13 = or i64 %mul, 1
32*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add13
33*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
34*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
35*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
36*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
37*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 10
38*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
39*9880d681SAndroid Build Coastguard Worker
40*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
41*9880d681SAndroid Build Coastguard Worker  ret void
42*9880d681SAndroid Build Coastguard Worker}
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 10; i++) {
46*9880d681SAndroid Build Coastguard Worker;;    A[4*i + 10] = i;
47*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[2*i + 1];
48*9880d681SAndroid Build Coastguard Worker
49*9880d681SAndroid Build Coastguard Workerdefine void @exact1(i32* %A, i32* %B) nounwind uwtable ssp {
50*9880d681SAndroid Build Coastguard Workerentry:
51*9880d681SAndroid Build Coastguard Worker  br label %for.body
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
54*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
55*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
56*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
57*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
58*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
59*9880d681SAndroid Build Coastguard Worker
60*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
61*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
62*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
63*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
64*9880d681SAndroid Build Coastguard Worker  %mul = shl i64 %i.02, 2
65*9880d681SAndroid Build Coastguard Worker  %add = add i64 %mul, 10
66*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
67*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
68*9880d681SAndroid Build Coastguard Worker  %mul1 = shl i64 %i.02, 1
69*9880d681SAndroid Build Coastguard Worker  %add23 = or i64 %mul1, 1
70*9880d681SAndroid Build Coastguard Worker  %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add23
71*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx3, align 4
72*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
73*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
74*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
75*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 10
76*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
79*9880d681SAndroid Build Coastguard Worker  ret void
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 10; i++) {
84*9880d681SAndroid Build Coastguard Worker;;    A[6*i] = i;
85*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 60];
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerdefine void @exact2(i32* %A, i32* %B) nounwind uwtable ssp {
88*9880d681SAndroid Build Coastguard Workerentry:
89*9880d681SAndroid Build Coastguard Worker  br label %for.body
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
92*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
93*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
94*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
95*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
96*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
99*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
100*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
101*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
102*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, 6
103*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
104*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
105*9880d681SAndroid Build Coastguard Worker  %add = add i64 %i.02, 60
106*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
107*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx1, align 4
108*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
109*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
110*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
111*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 10
112*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
115*9880d681SAndroid Build Coastguard Worker  ret void
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i <= 10; i++) {
120*9880d681SAndroid Build Coastguard Worker;;    A[6*i] = i;
121*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 60];
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Workerdefine void @exact3(i32* %A, i32* %B) nounwind uwtable ssp {
124*9880d681SAndroid Build Coastguard Workerentry:
125*9880d681SAndroid Build Coastguard Worker  br label %for.body
126*9880d681SAndroid Build Coastguard Worker
127*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
128*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]!
129*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
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
134*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
135*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
136*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
137*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
138*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, 6
139*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
140*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
141*9880d681SAndroid Build Coastguard Worker  %add = add i64 %i.02, 60
142*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
143*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx1, align 4
144*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
145*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
146*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
147*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 11
148*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
151*9880d681SAndroid Build Coastguard Worker  ret void
152*9880d681SAndroid Build Coastguard Worker}
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 12; i++) {
156*9880d681SAndroid Build Coastguard Worker;;    A[6*i] = i;
157*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 60];
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Workerdefine void @exact4(i32* %A, i32* %B) nounwind uwtable ssp {
160*9880d681SAndroid Build Coastguard Workerentry:
161*9880d681SAndroid Build Coastguard Worker  br label %for.body
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
164*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]!
165*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
166*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
167*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
168*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
171*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
172*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
173*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
174*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, 6
175*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
176*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
177*9880d681SAndroid Build Coastguard Worker  %add = add i64 %i.02, 60
178*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
179*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx1, align 4
180*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
181*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
182*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
183*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 12
184*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
187*9880d681SAndroid Build Coastguard Worker  ret void
188*9880d681SAndroid Build Coastguard Worker}
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i <= 12; i++) {
192*9880d681SAndroid Build Coastguard Worker;;    A[6*i] = i;
193*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 60];
194*9880d681SAndroid Build Coastguard Worker
195*9880d681SAndroid Build Coastguard Workerdefine void @exact5(i32* %A, i32* %B) nounwind uwtable ssp {
196*9880d681SAndroid Build Coastguard Workerentry:
197*9880d681SAndroid Build Coastguard Worker  br label %for.body
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
200*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]!
201*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
202*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
203*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
204*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
207*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
208*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
209*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
210*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, 6
211*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
212*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
213*9880d681SAndroid Build Coastguard Worker  %add = add i64 %i.02, 60
214*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
215*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx1, align 4
216*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
217*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
218*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
219*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 13
220*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
223*9880d681SAndroid Build Coastguard Worker  ret void
224*9880d681SAndroid Build Coastguard Worker}
225*9880d681SAndroid Build Coastguard Worker
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 18; i++) {
228*9880d681SAndroid Build Coastguard Worker;;    A[6*i] = i;
229*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 60];
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Workerdefine void @exact6(i32* %A, i32* %B) nounwind uwtable ssp {
232*9880d681SAndroid Build Coastguard Workerentry:
233*9880d681SAndroid Build Coastguard Worker  br label %for.body
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
236*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]!
237*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
238*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
239*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
240*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
243*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
244*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
245*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
246*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, 6
247*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
248*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
249*9880d681SAndroid Build Coastguard Worker  %add = add i64 %i.02, 60
250*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
251*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx1, align 4
252*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
253*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
254*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
255*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 18
256*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
259*9880d681SAndroid Build Coastguard Worker  ret void
260*9880d681SAndroid Build Coastguard Worker}
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i <= 18; i++) {
264*9880d681SAndroid Build Coastguard Worker;;    A[6*i] = i;
265*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[i + 60];
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Workerdefine void @exact7(i32* %A, i32* %B) nounwind uwtable ssp {
268*9880d681SAndroid Build Coastguard Workerentry:
269*9880d681SAndroid Build Coastguard Worker  br label %for.body
270*9880d681SAndroid Build Coastguard Worker
271*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
272*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [*|<]!
273*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
274*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
275*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
276*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
279*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
280*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
281*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
282*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, 6
283*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
284*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
285*9880d681SAndroid Build Coastguard Worker  %add = add i64 %i.02, 60
286*9880d681SAndroid Build Coastguard Worker  %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
287*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx1, align 4
288*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
289*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
290*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
291*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 19
292*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
293*9880d681SAndroid Build Coastguard Worker
294*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
295*9880d681SAndroid Build Coastguard Worker  ret void
296*9880d681SAndroid Build Coastguard Worker}
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker
299*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 10; i++) {
300*9880d681SAndroid Build Coastguard Worker;;    A[-6*i] = i;
301*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[-i - 60];
302*9880d681SAndroid Build Coastguard Worker
303*9880d681SAndroid Build Coastguard Workerdefine void @exact8(i32* %A, i32* %B) nounwind uwtable ssp {
304*9880d681SAndroid Build Coastguard Workerentry:
305*9880d681SAndroid Build Coastguard Worker  br label %for.body
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
308*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
309*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
310*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
311*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
312*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
313*9880d681SAndroid Build Coastguard Worker
314*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
315*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
316*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
317*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
318*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, -6
319*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
320*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
321*9880d681SAndroid Build Coastguard Worker  %sub1 = sub i64 -60, %i.02
322*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
323*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
324*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
325*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
326*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
327*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 10
328*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
331*9880d681SAndroid Build Coastguard Worker  ret void
332*9880d681SAndroid Build Coastguard Worker}
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Worker
335*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i <= 10; i++) {
336*9880d681SAndroid Build Coastguard Worker;;    A[-6*i] = i;
337*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[-i - 60];
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Workerdefine void @exact9(i32* %A, i32* %B) nounwind uwtable ssp {
340*9880d681SAndroid Build Coastguard Workerentry:
341*9880d681SAndroid Build Coastguard Worker  br label %for.body
342*9880d681SAndroid Build Coastguard Worker
343*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
344*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]!
345*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
346*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
347*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
348*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
351*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
352*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
353*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
354*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, -6
355*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
356*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
357*9880d681SAndroid Build Coastguard Worker  %sub1 = sub i64 -60, %i.02
358*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
359*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
360*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
361*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
362*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
363*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 11
364*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
367*9880d681SAndroid Build Coastguard Worker  ret void
368*9880d681SAndroid Build Coastguard Worker}
369*9880d681SAndroid Build Coastguard Worker
370*9880d681SAndroid Build Coastguard Worker
371*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 12; i++) {
372*9880d681SAndroid Build Coastguard Worker;;    A[-6*i] = i;
373*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[-i - 60];
374*9880d681SAndroid Build Coastguard Worker
375*9880d681SAndroid Build Coastguard Workerdefine void @exact10(i32* %A, i32* %B) nounwind uwtable ssp {
376*9880d681SAndroid Build Coastguard Workerentry:
377*9880d681SAndroid Build Coastguard Worker  br label %for.body
378*9880d681SAndroid Build Coastguard Worker
379*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
380*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [>]!
381*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
382*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
383*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
384*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
385*9880d681SAndroid Build Coastguard Worker
386*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
387*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
388*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
389*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
390*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, -6
391*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
392*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
393*9880d681SAndroid Build Coastguard Worker  %sub1 = sub i64 -60, %i.02
394*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
395*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
396*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
397*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
398*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
399*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 12
400*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
403*9880d681SAndroid Build Coastguard Worker  ret void
404*9880d681SAndroid Build Coastguard Worker}
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i <= 12; i++) {
408*9880d681SAndroid Build Coastguard Worker;;    A[-6*i] = i;
409*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[-i - 60];
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine void @exact11(i32* %A, i32* %B) nounwind uwtable ssp {
412*9880d681SAndroid Build Coastguard Workerentry:
413*9880d681SAndroid Build Coastguard Worker  br label %for.body
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
416*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]!
417*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
418*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
419*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
420*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
423*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
424*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
425*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
426*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, -6
427*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
428*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
429*9880d681SAndroid Build Coastguard Worker  %sub1 = sub i64 -60, %i.02
430*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
431*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
432*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
433*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
434*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
435*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 13
436*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
439*9880d681SAndroid Build Coastguard Worker  ret void
440*9880d681SAndroid Build Coastguard Worker}
441*9880d681SAndroid Build Coastguard Worker
442*9880d681SAndroid Build Coastguard Worker
443*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i < 18; i++) {
444*9880d681SAndroid Build Coastguard Worker;;    A[-6*i] = i;
445*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[-i - 60];
446*9880d681SAndroid Build Coastguard Worker
447*9880d681SAndroid Build Coastguard Workerdefine void @exact12(i32* %A, i32* %B) nounwind uwtable ssp {
448*9880d681SAndroid Build Coastguard Workerentry:
449*9880d681SAndroid Build Coastguard Worker  br label %for.body
450*9880d681SAndroid Build Coastguard Worker
451*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
452*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [=>|<]!
453*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
454*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
455*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
456*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
457*9880d681SAndroid Build Coastguard Worker
458*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
459*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
460*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
461*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
462*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, -6
463*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
464*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
465*9880d681SAndroid Build Coastguard Worker  %sub1 = sub i64 -60, %i.02
466*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
467*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
468*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
469*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
470*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
471*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 18
472*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
473*9880d681SAndroid Build Coastguard Worker
474*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
475*9880d681SAndroid Build Coastguard Worker  ret void
476*9880d681SAndroid Build Coastguard Worker}
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Worker
479*9880d681SAndroid Build Coastguard Worker;;  for (long unsigned i = 0; i <= 18; i++) {
480*9880d681SAndroid Build Coastguard Worker;;    A[-6*i] = i;
481*9880d681SAndroid Build Coastguard Worker;;    *B++ = A[-i - 60];
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Workerdefine void @exact13(i32* %A, i32* %B) nounwind uwtable ssp {
484*9880d681SAndroid Build Coastguard Workerentry:
485*9880d681SAndroid Build Coastguard Worker  br label %for.body
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
488*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - flow [*|<]!
489*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
490*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
491*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - confused!
492*9880d681SAndroid Build Coastguard Worker; CHECK: da analyze - none!
493*9880d681SAndroid Build Coastguard Worker
494*9880d681SAndroid Build Coastguard Workerfor.body:                                         ; preds = %entry, %for.body
495*9880d681SAndroid Build Coastguard Worker  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
496*9880d681SAndroid Build Coastguard Worker  %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
497*9880d681SAndroid Build Coastguard Worker  %conv = trunc i64 %i.02 to i32
498*9880d681SAndroid Build Coastguard Worker  %mul = mul i64 %i.02, -6
499*9880d681SAndroid Build Coastguard Worker  %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
500*9880d681SAndroid Build Coastguard Worker  store i32 %conv, i32* %arrayidx, align 4
501*9880d681SAndroid Build Coastguard Worker  %sub1 = sub i64 -60, %i.02
502*9880d681SAndroid Build Coastguard Worker  %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
503*9880d681SAndroid Build Coastguard Worker  %0 = load i32, i32* %arrayidx2, align 4
504*9880d681SAndroid Build Coastguard Worker  %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
505*9880d681SAndroid Build Coastguard Worker  store i32 %0, i32* %B.addr.01, align 4
506*9880d681SAndroid Build Coastguard Worker  %inc = add i64 %i.02, 1
507*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp ne i64 %inc, 19
508*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %for.body, label %for.end
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Workerfor.end:                                          ; preds = %for.body
511*9880d681SAndroid Build Coastguard Worker  ret void
512*9880d681SAndroid Build Coastguard Worker}
513