blob: d84cd058718a6180661165a92955213b465c3a49 [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'ExactSIV.bc'
4target 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"
5target triple = "x86_64-apple-macosx10.6.0"
6
7
8;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +00009;; A[i + 10] = i;
10;; *B++ = A[2*i + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000011
12define void @exact0(i32* %A, i32* %B) nounwind uwtable ssp {
13entry:
14 br label %for.body
15
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000016; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000017; CHECK: da analyze - flow [<=|<]!
18; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000019; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000020; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000021; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000022
23for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000024 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
25 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
26 %conv = trunc i64 %i.02 to i32
27 %add = add i64 %i.02, 10
David Blaikie79e6c742015-02-27 19:29:02 +000028 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000029 store i32 %conv, i32* %arrayidx, align 4
30 %mul = shl i64 %i.02, 1
31 %add13 = or i64 %mul, 1
David Blaikie79e6c742015-02-27 19:29:02 +000032 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add13
David Blaikiea79ac142015-02-27 21:17:42 +000033 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000034 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000035 store i32 %0, i32* %B.addr.01, align 4
36 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000037 %exitcond = icmp ne i64 %inc, 10
38 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000039
40for.end: ; preds = %for.body
41 ret void
42}
43
44
45;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +000046;; A[4*i + 10] = i;
47;; *B++ = A[2*i + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000048
49define void @exact1(i32* %A, i32* %B) nounwind uwtable ssp {
50entry:
51 br label %for.body
52
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000053; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000054; CHECK: da analyze - none!
55; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000056; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000057; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000058; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000059
60for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000061 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
62 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
63 %conv = trunc i64 %i.02 to i32
64 %mul = shl i64 %i.02, 2
65 %add = add i64 %mul, 10
David Blaikie79e6c742015-02-27 19:29:02 +000066 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000067 store i32 %conv, i32* %arrayidx, align 4
68 %mul1 = shl i64 %i.02, 1
69 %add23 = or i64 %mul1, 1
David Blaikie79e6c742015-02-27 19:29:02 +000070 %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add23
David Blaikiea79ac142015-02-27 21:17:42 +000071 %0 = load i32, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000072 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000073 store i32 %0, i32* %B.addr.01, align 4
74 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000075 %exitcond = icmp ne i64 %inc, 10
76 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000077
78for.end: ; preds = %for.body
79 ret void
80}
81
82
83;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +000084;; A[6*i] = i;
85;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +000086
87define void @exact2(i32* %A, i32* %B) nounwind uwtable ssp {
88entry:
89 br label %for.body
90
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000091; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000092; CHECK: da analyze - none!
93; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000094; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000095; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000096; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000097
98for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000099 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
100 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
101 %conv = trunc i64 %i.02 to i32
102 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000103 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000104 store i32 %conv, i32* %arrayidx, align 4
105 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000106 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000107 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000108 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000109 store i32 %0, i32* %B.addr.01, align 4
110 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000111 %exitcond = icmp ne i64 %inc, 10
112 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000113
114for.end: ; preds = %for.body
115 ret void
116}
117
118
119;; for (long unsigned i = 0; i <= 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000120;; A[6*i] = i;
121;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000122
123define void @exact3(i32* %A, i32* %B) nounwind uwtable ssp {
124entry:
125 br label %for.body
126
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000127; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000128; CHECK: da analyze - flow [>]!
129; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000130; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000131; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000132; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000133
134for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000135 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
136 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
137 %conv = trunc i64 %i.02 to i32
138 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000139 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000140 store i32 %conv, i32* %arrayidx, align 4
141 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000142 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000143 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000144 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000145 store i32 %0, i32* %B.addr.01, align 4
146 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000147 %exitcond = icmp ne i64 %inc, 11
148 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000149
150for.end: ; preds = %for.body
151 ret void
152}
153
154
155;; for (long unsigned i = 0; i < 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000156;; A[6*i] = i;
157;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000158
159define void @exact4(i32* %A, i32* %B) nounwind uwtable ssp {
160entry:
161 br label %for.body
162
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000163; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000164; CHECK: da analyze - flow [>]!
165; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000166; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000167; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000168; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000169
170for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000171 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
172 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
173 %conv = trunc i64 %i.02 to i32
174 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000175 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000176 store i32 %conv, i32* %arrayidx, align 4
177 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000178 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000179 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000180 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000181 store i32 %0, i32* %B.addr.01, align 4
182 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000183 %exitcond = icmp ne i64 %inc, 12
184 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000185
186for.end: ; preds = %for.body
187 ret void
188}
189
190
191;; for (long unsigned i = 0; i <= 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000192;; A[6*i] = i;
193;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000194
195define void @exact5(i32* %A, i32* %B) nounwind uwtable ssp {
196entry:
197 br label %for.body
198
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000199; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000200; CHECK: da analyze - flow [=>|<]!
201; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000202; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000203; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000204; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000205
206for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000207 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
208 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
209 %conv = trunc i64 %i.02 to i32
210 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000211 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000212 store i32 %conv, i32* %arrayidx, align 4
213 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000214 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000215 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000216 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000217 store i32 %0, i32* %B.addr.01, align 4
218 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000219 %exitcond = icmp ne i64 %inc, 13
220 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000221
222for.end: ; preds = %for.body
223 ret void
224}
225
226
227;; for (long unsigned i = 0; i < 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000228;; A[6*i] = i;
229;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000230
231define void @exact6(i32* %A, i32* %B) nounwind uwtable ssp {
232entry:
233 br label %for.body
234
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000235; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000236; CHECK: da analyze - flow [=>|<]!
237; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000238; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000239; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000240; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000241
242for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000243 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
244 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
245 %conv = trunc i64 %i.02 to i32
246 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000247 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000248 store i32 %conv, i32* %arrayidx, align 4
249 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000250 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000251 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000252 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000253 store i32 %0, i32* %B.addr.01, align 4
254 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000255 %exitcond = icmp ne i64 %inc, 18
256 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000257
258for.end: ; preds = %for.body
259 ret void
260}
261
262
263;; for (long unsigned i = 0; i <= 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000264;; A[6*i] = i;
265;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000266
267define void @exact7(i32* %A, i32* %B) nounwind uwtable ssp {
268entry:
269 br label %for.body
270
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000271; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000272; CHECK: da analyze - flow [*|<]!
273; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000274; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000275; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000276; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000277
278for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000279 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
280 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
281 %conv = trunc i64 %i.02 to i32
282 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000283 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000284 store i32 %conv, i32* %arrayidx, align 4
285 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000286 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000287 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000288 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000289 store i32 %0, i32* %B.addr.01, align 4
290 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000291 %exitcond = icmp ne i64 %inc, 19
292 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000293
294for.end: ; preds = %for.body
295 ret void
296}
297
298
299;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000300;; A[-6*i] = i;
301;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000302
303define void @exact8(i32* %A, i32* %B) nounwind uwtable ssp {
304entry:
305 br label %for.body
306
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000307; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000308; CHECK: da analyze - none!
309; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000310; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000311; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000312; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000313
314for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000315 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
316 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
317 %conv = trunc i64 %i.02 to i32
318 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000319 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000320 store i32 %conv, i32* %arrayidx, align 4
321 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000322 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000323 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000324 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000325 store i32 %0, i32* %B.addr.01, align 4
326 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000327 %exitcond = icmp ne i64 %inc, 10
328 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000329
330for.end: ; preds = %for.body
331 ret void
332}
333
334
335;; for (long unsigned i = 0; i <= 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000336;; A[-6*i] = i;
337;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000338
339define void @exact9(i32* %A, i32* %B) nounwind uwtable ssp {
340entry:
341 br label %for.body
342
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000343; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000344; CHECK: da analyze - flow [>]!
345; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000346; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000347; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000348; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000349
350for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000351 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
352 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
353 %conv = trunc i64 %i.02 to i32
354 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000355 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000356 store i32 %conv, i32* %arrayidx, align 4
357 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000358 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000359 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000360 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000361 store i32 %0, i32* %B.addr.01, align 4
362 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000363 %exitcond = icmp ne i64 %inc, 11
364 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000365
366for.end: ; preds = %for.body
367 ret void
368}
369
370
371;; for (long unsigned i = 0; i < 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000372;; A[-6*i] = i;
373;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000374
375define void @exact10(i32* %A, i32* %B) nounwind uwtable ssp {
376entry:
377 br label %for.body
378
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000379; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000380; CHECK: da analyze - flow [>]!
381; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000382; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000383; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000384; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000385
386for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000387 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
388 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
389 %conv = trunc i64 %i.02 to i32
390 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000391 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000392 store i32 %conv, i32* %arrayidx, align 4
393 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000394 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000395 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000396 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000397 store i32 %0, i32* %B.addr.01, align 4
398 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000399 %exitcond = icmp ne i64 %inc, 12
400 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000401
402for.end: ; preds = %for.body
403 ret void
404}
405
406
407;; for (long unsigned i = 0; i <= 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000408;; A[-6*i] = i;
409;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000410
411define void @exact11(i32* %A, i32* %B) nounwind uwtable ssp {
412entry:
413 br label %for.body
414
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000415; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000416; CHECK: da analyze - flow [=>|<]!
417; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000418; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000419; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000420; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000421
422for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000423 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
424 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
425 %conv = trunc i64 %i.02 to i32
426 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000427 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000428 store i32 %conv, i32* %arrayidx, align 4
429 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000430 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000431 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000432 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000433 store i32 %0, i32* %B.addr.01, align 4
434 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000435 %exitcond = icmp ne i64 %inc, 13
436 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000437
438for.end: ; preds = %for.body
439 ret void
440}
441
442
443;; for (long unsigned i = 0; i < 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000444;; A[-6*i] = i;
445;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000446
447define void @exact12(i32* %A, i32* %B) nounwind uwtable ssp {
448entry:
449 br label %for.body
450
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000451; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000452; CHECK: da analyze - flow [=>|<]!
453; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000454; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000455; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000456; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000457
458for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000459 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
460 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
461 %conv = trunc i64 %i.02 to i32
462 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000463 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000464 store i32 %conv, i32* %arrayidx, align 4
465 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000466 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000467 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000468 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000469 store i32 %0, i32* %B.addr.01, align 4
470 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000471 %exitcond = icmp ne i64 %inc, 18
472 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000473
474for.end: ; preds = %for.body
475 ret void
476}
477
478
479;; for (long unsigned i = 0; i <= 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000480;; A[-6*i] = i;
481;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000482
483define void @exact13(i32* %A, i32* %B) nounwind uwtable ssp {
484entry:
485 br label %for.body
486
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000487; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000488; CHECK: da analyze - flow [*|<]!
489; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000490; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000491; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000492; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000493
494for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000495 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
496 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
497 %conv = trunc i64 %i.02 to i32
498 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000499 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000500 store i32 %conv, i32* %arrayidx, align 4
501 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000502 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000503 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000504 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000505 store i32 %0, i32* %B.addr.01, align 4
506 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000507 %exitcond = icmp ne i64 %inc, 19
508 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000509
510for.end: ; preds = %for.body
511 ret void
512}