blob: 5b81ec10f9d824b9bed0485187243e436ef5cc78 [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'WeakCrossingSIV.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
Benjamin Kramer3eb15632012-11-13 12:12:02 +00008;; for (long unsigned i = 0; i < n; i++) {
9;; A[1 + n*i] = i;
10;; *B++ = A[1 - n*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +000011
12define void @weakcrossing0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
13entry:
14 %cmp1 = icmp eq i64 %n, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000015 br i1 %cmp1, label %for.end, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000016
Benjamin Kramer3eb15632012-11-13 12:12:02 +000017for.body.preheader: ; preds = %entry
18 br label %for.body
19
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000020; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000021; CHECK: da analyze - flow [0|<]!
22; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000023; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000024; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000025; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000026
27for.body: ; preds = %for.body.preheader, %for.body
28 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
29 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000030 %conv = trunc i64 %i.03 to i32
31 %mul = mul i64 %i.03, %n
32 %add = add i64 %mul, 1
David Blaikie79e6c742015-02-27 19:29:02 +000033 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000034 store i32 %conv, i32* %arrayidx, align 4
35 %mul1 = mul i64 %i.03, %n
36 %sub = sub i64 1, %mul1
David Blaikie79e6c742015-02-27 19:29:02 +000037 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +000038 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000039 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000040 store i32 %0, i32* %B.addr.02, align 4
41 %inc = add i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000042 %exitcond = icmp ne i64 %inc, %n
43 br i1 %exitcond, label %for.body, label %for.end.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +000044
Benjamin Kramer3eb15632012-11-13 12:12:02 +000045for.end.loopexit: ; preds = %for.body
46 br label %for.end
47
48for.end: ; preds = %for.end.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +000049 ret void
50}
51
52
Benjamin Kramer3eb15632012-11-13 12:12:02 +000053;; for (long unsigned i = 0; i < n; i++) {
54;; A[n + i] = i;
55;; *B++ = A[1 + n - i];
Sebastian Pop59b61b92012-10-11 07:32:34 +000056
57define void @weakcrossing1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
58entry:
59 %cmp1 = icmp eq i64 %n, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000060 br i1 %cmp1, label %for.end, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000061
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000062; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000063; CHECK: da analyze - flow [<>] splitable!
64; CHECK: da analyze - split level = 1, iteration = 0!
65; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000066; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000067; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000068; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000069
70for.body.preheader: ; preds = %entry
71 br label %for.body
72
73for.body: ; preds = %for.body.preheader, %for.body
74 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
75 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000076 %conv = trunc i64 %i.03 to i32
77 %add = add i64 %i.03, %n
David Blaikie79e6c742015-02-27 19:29:02 +000078 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000079 store i32 %conv, i32* %arrayidx, align 4
80 %add1 = add i64 %n, 1
81 %sub = sub i64 %add1, %i.03
David Blaikie79e6c742015-02-27 19:29:02 +000082 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +000083 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000084 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000085 store i32 %0, i32* %B.addr.02, align 4
86 %inc = add i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000087 %exitcond = icmp ne i64 %inc, %n
88 br i1 %exitcond, label %for.body, label %for.end.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +000089
Benjamin Kramer3eb15632012-11-13 12:12:02 +000090for.end.loopexit: ; preds = %for.body
91 br label %for.end
92
93for.end: ; preds = %for.end.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +000094 ret void
95}
96
97
Benjamin Kramer3eb15632012-11-13 12:12:02 +000098;; for (long unsigned i = 0; i < 3; i++) {
99;; A[i] = i;
100;; *B++ = A[6 - i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000101
102define void @weakcrossing2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
103entry:
104 br label %for.body
105
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000106; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000107; CHECK: da analyze - none!
108; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000109; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000110; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000111; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000112
113for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000114 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
115 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
116 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000117 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000118 store i32 %conv, i32* %arrayidx, align 4
119 %sub = sub i64 6, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000120 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000122 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000123 store i32 %0, i32* %B.addr.01, align 4
124 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000125 %exitcond = icmp ne i64 %inc, 3
126 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000127
128for.end: ; preds = %for.body
129 ret void
130}
131
132
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000133;; for (long unsigned i = 0; i < 4; i++) {
134;; A[i] = i;
135;; *B++ = A[6 - i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000136
137define void @weakcrossing3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
138entry:
139 br label %for.body
140
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000141; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000142; CHECK: da analyze - flow [0|<]!
143; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000144; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000145; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000146; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000147
148for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000149 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
150 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
151 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000152 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000153 store i32 %conv, i32* %arrayidx, align 4
154 %sub = sub i64 6, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000155 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000156 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000157 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000158 store i32 %0, i32* %B.addr.01, align 4
159 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000160 %exitcond = icmp ne i64 %inc, 4
161 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000162
163for.end: ; preds = %for.body
164 ret void
165}
166
167
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000168;; for (long unsigned i = 0; i < 10; i++) {
169;; A[i] = i;
170;; *B++ = A[-6 - i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000171
172define void @weakcrossing4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
173entry:
174 br label %for.body
175
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000176; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000177; CHECK: da analyze - none!
178; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000179; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000180; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000181; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000182
183for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000184 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
185 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
186 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000187 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000188 store i32 %conv, i32* %arrayidx, align 4
189 %sub = sub i64 -6, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000190 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000191 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000192 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000193 store i32 %0, i32* %B.addr.01, align 4
194 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000195 %exitcond = icmp ne i64 %inc, 10
196 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000197
198for.end: ; preds = %for.body
199 ret void
200}
201
202
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000203;; for (long unsigned i = 0; i < n; i++) {
204;; A[3*i] = i;
205;; *B++ = A[5 - 3*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000206
207define void @weakcrossing5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
208entry:
209 %cmp1 = icmp eq i64 %n, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000210 br i1 %cmp1, label %for.end, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000211
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000212; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000213; CHECK: da analyze - none!
214; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000215; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000216; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000217; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000218
219for.body.preheader: ; preds = %entry
220 br label %for.body
221
222for.body: ; preds = %for.body.preheader, %for.body
223 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
224 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000225 %conv = trunc i64 %i.03 to i32
226 %mul = mul i64 %i.03, 3
David Blaikie79e6c742015-02-27 19:29:02 +0000227 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000228 store i32 %conv, i32* %arrayidx, align 4
229 %0 = mul i64 %i.03, -3
230 %sub = add i64 %0, 5
David Blaikie79e6c742015-02-27 19:29:02 +0000231 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000232 %1 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000233 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000234 store i32 %1, i32* %B.addr.02, align 4
235 %inc = add i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000236 %exitcond = icmp ne i64 %inc, %n
237 br i1 %exitcond, label %for.body, label %for.end.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000238
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000239for.end.loopexit: ; preds = %for.body
240 br label %for.end
241
242for.end: ; preds = %for.end.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000243 ret void
244}
245
246
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000247;; for (long unsigned i = 0; i < 4; i++) {
248;; A[i] = i;
249;; *B++ = A[5 - i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000250
251define void @weakcrossing6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
252entry:
253 br label %for.body
254
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000255; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000256; CHECK: da analyze - flow [<>] splitable!
257; CHECK: da analyze - split level = 1, iteration = 2!
258; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000259; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000260; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000261; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000262
263for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000264 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
265 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
266 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000267 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000268 store i32 %conv, i32* %arrayidx, align 4
269 %sub = sub i64 5, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000270 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000271 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000272 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000273 store i32 %0, i32* %B.addr.01, align 4
274 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000275 %exitcond = icmp ne i64 %inc, 4
276 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000277
278for.end: ; preds = %for.body
279 ret void
280}