blob: 44b399cb191bf467036fab8b4cd6721caee7e44e [file] [log] [blame]
Philip Pfaffeefb5ad12019-01-08 14:06:58 +00001; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
2; RUN: | FileCheck %s
Sebastian Pop59b61b92012-10-11 07:32:34 +00003; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
4
5; ModuleID = 'ExactRDIV.bc'
6target 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"
7target triple = "x86_64-apple-macosx10.6.0"
8
9
10;; for (long int i = 0; i < 10; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000011;; A[4*i + 10] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000012;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000013;; *B++ = A[2*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000014
15define void @rdiv0(i32* %A, i32* %B) nounwind uwtable ssp {
16entry:
17 br label %for.body
18
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000019; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000020; CHECK: da analyze - none!
21; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000022; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000023; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000024; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000025
26for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000027 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
28 %conv = trunc i64 %i.03 to i32
29 %mul = shl nsw i64 %i.03, 2
30 %add = add nsw i64 %mul, 10
David Blaikie79e6c742015-02-27 19:29:02 +000031 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000032 store i32 %conv, i32* %arrayidx, align 4
33 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000034 %exitcond5 = icmp ne i64 %inc, 10
35 br i1 %exitcond5, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000036
Benjamin Kramer3eb15632012-11-13 12:12:02 +000037for.body4.preheader: ; preds = %for.body
38 br label %for.body4
39
40for.body4: ; preds = %for.body4.preheader, %for.body4
41 %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
42 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000043 %mul5 = shl nsw i64 %j.02, 1
44 %add64 = or i64 %mul5, 1
David Blaikie79e6c742015-02-27 19:29:02 +000045 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add64
David Blaikiea79ac142015-02-27 21:17:42 +000046 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000047 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000048 store i32 %0, i32* %B.addr.01, align 4
49 %inc9 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000050 %exitcond = icmp ne i64 %inc9, 10
51 br i1 %exitcond, label %for.body4, label %for.end10
Sebastian Pop59b61b92012-10-11 07:32:34 +000052
53for.end10: ; preds = %for.body4
54 ret void
55}
56
57
58;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000059;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000060;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000061;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +000062
63define void @rdiv1(i32* %A, i32* %B) nounwind uwtable ssp {
64entry:
65 br label %for.body
66
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000067; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000068; CHECK: da analyze - none!
69; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000070; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000071; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000072; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000073
74for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000075 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
76 %conv = trunc i64 %i.03 to i32
77 %mul = mul nsw i64 %i.03, 11
78 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +000079 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +000080 store i32 %conv, i32* %arrayidx, align 4
81 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000082 %exitcond4 = icmp ne i64 %inc, 5
83 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000084
Benjamin Kramer3eb15632012-11-13 12:12:02 +000085for.body4.preheader: ; preds = %for.body
86 br label %for.body4
87
88for.body4: ; preds = %for.body4.preheader, %for.body4
89 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
90 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +000091 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +000092 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000093 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000094 store i32 %0, i32* %B.addr.01, align 4
95 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000096 %exitcond = icmp ne i64 %inc7, 10
97 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +000098
99for.end8: ; preds = %for.body4
100 ret void
101}
102
103
104;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000105;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000106;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000107;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000108
109define void @rdiv2(i32* %A, i32* %B) nounwind uwtable ssp {
110entry:
111 br label %for.body
112
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000113; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000114; CHECK: da analyze - none!
115; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000116; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000117; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000118; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000119
120for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000121 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
122 %conv = trunc i64 %i.03 to i32
123 %mul = mul nsw i64 %i.03, 11
124 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +0000125 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000126 store i32 %conv, i32* %arrayidx, align 4
127 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000128 %exitcond4 = icmp ne i64 %inc, 6
129 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000130
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000131for.body4.preheader: ; preds = %for.body
132 br label %for.body4
133
134for.body4: ; preds = %for.body4.preheader, %for.body4
135 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
136 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +0000137 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +0000138 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000139 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000140 store i32 %0, i32* %B.addr.01, align 4
141 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000142 %exitcond = icmp ne i64 %inc7, 10
143 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000144
145for.end8: ; preds = %for.body4
146 ret void
147}
148
149
150;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000151;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000152;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000153;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000154
155define void @rdiv3(i32* %A, i32* %B) nounwind uwtable ssp {
156entry:
157 br label %for.body
158
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000159; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000160; CHECK: da analyze - none!
161; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000162; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000163; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000164; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000165
166for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000167 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
168 %conv = trunc i64 %i.03 to i32
169 %mul = mul nsw i64 %i.03, 11
170 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +0000171 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000172 store i32 %conv, i32* %arrayidx, align 4
173 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000174 %exitcond4 = icmp ne i64 %inc, 5
175 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000176
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000177for.body4.preheader: ; preds = %for.body
178 br label %for.body4
179
180for.body4: ; preds = %for.body4.preheader, %for.body4
181 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
182 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +0000183 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +0000184 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000185 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000186 store i32 %0, i32* %B.addr.01, align 4
187 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000188 %exitcond = icmp ne i64 %inc7, 11
189 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000190
191for.end8: ; preds = %for.body4
192 ret void
193}
194
195
196;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000197;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000198;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000199;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000200
201define void @rdiv4(i32* %A, i32* %B) nounwind uwtable ssp {
202entry:
203 br label %for.body
204
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000205; CHECK: da analyze - none!
Preston Briggsfd0b5c82012-11-30 00:44:47 +0000206; CHECK: da analyze - flow [|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000207; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000208; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000209; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000210; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000211
212for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000213 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
214 %conv = trunc i64 %i.03 to i32
215 %mul = mul nsw i64 %i.03, 11
216 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +0000217 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000218 store i32 %conv, i32* %arrayidx, align 4
219 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000220 %exitcond4 = icmp ne i64 %inc, 6
221 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000222
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000223for.body4.preheader: ; preds = %for.body
224 br label %for.body4
225
226for.body4: ; preds = %for.body4.preheader, %for.body4
227 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
228 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +0000229 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +0000230 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000231 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000232 store i32 %0, i32* %B.addr.01, align 4
233 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000234 %exitcond = icmp ne i64 %inc7, 11
235 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000236
237for.end8: ; preds = %for.body4
238 ret void
239}
240
241
242;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000243;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000244;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000245;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000246
247define void @rdiv5(i32* %A, i32* %B) nounwind uwtable ssp {
248entry:
249 br label %for.body
250
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000251; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000252; CHECK: da analyze - none!
253; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000254; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000255; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000256; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000257
258for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000259 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
260 %conv = trunc i64 %i.03 to i32
261 %mul = mul nsw i64 %i.03, -11
262 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000263 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000264 store i32 %conv, i32* %arrayidx, align 4
265 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000266 %exitcond4 = icmp ne i64 %inc, 5
267 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000268
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000269for.body4.preheader: ; preds = %for.body
270 br label %for.body4
271
272for.body4: ; preds = %for.body4.preheader, %for.body4
273 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
274 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000275 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000276 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000277 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000278 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000279 store i32 %0, i32* %B.addr.01, align 4
280 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000281 %exitcond = icmp ne i64 %inc7, 10
282 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000283
284for.end8: ; preds = %for.body4
285 ret void
286}
287
288
289;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000290;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000291;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000292;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000293
294define void @rdiv6(i32* %A, i32* %B) nounwind uwtable ssp {
295entry:
296 br label %for.body
297
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000298; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000299; CHECK: da analyze - none!
300; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000301; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000302; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000303; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000304
305for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000306 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
307 %conv = trunc i64 %i.03 to i32
308 %mul = mul nsw i64 %i.03, -11
309 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000310 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000311 store i32 %conv, i32* %arrayidx, align 4
312 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000313 %exitcond4 = icmp ne i64 %inc, 6
314 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000315
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000316for.body4.preheader: ; preds = %for.body
317 br label %for.body4
318
319for.body4: ; preds = %for.body4.preheader, %for.body4
320 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
321 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000322 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000323 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000324 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000325 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000326 store i32 %0, i32* %B.addr.01, align 4
327 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000328 %exitcond = icmp ne i64 %inc7, 10
329 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000330
331for.end8: ; preds = %for.body4
332 ret void
333}
334
335
336;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000337;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000338;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000339;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000340
341define void @rdiv7(i32* %A, i32* %B) nounwind uwtable ssp {
342entry:
343 br label %for.body
344
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000345; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000346; CHECK: da analyze - none!
347; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000348; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000349; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000350; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000351
352for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000353 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
354 %conv = trunc i64 %i.03 to i32
355 %mul = mul nsw i64 %i.03, -11
356 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000357 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000358 store i32 %conv, i32* %arrayidx, align 4
359 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000360 %exitcond4 = icmp ne i64 %inc, 5
361 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000362
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000363for.body4.preheader: ; preds = %for.body
364 br label %for.body4
365
366for.body4: ; preds = %for.body4.preheader, %for.body4
367 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
368 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000369 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000370 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000371 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000372 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000373 store i32 %0, i32* %B.addr.01, align 4
374 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000375 %exitcond = icmp ne i64 %inc7, 11
376 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000377
378for.end8: ; preds = %for.body4
379 ret void
380}
381
382
383;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000384;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000385;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000386;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000387
388define void @rdiv8(i32* %A, i32* %B) nounwind uwtable ssp {
389entry:
390 br label %for.body
391
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000392; CHECK: da analyze - none!
Preston Briggsfd0b5c82012-11-30 00:44:47 +0000393; CHECK: da analyze - flow [|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000394; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000395; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000396; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000397; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000398
399for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000400 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
401 %conv = trunc i64 %i.03 to i32
402 %mul = mul nsw i64 %i.03, -11
403 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000404 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000405 store i32 %conv, i32* %arrayidx, align 4
406 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000407 %exitcond4 = icmp ne i64 %inc, 6
408 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000409
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000410for.body4.preheader: ; preds = %for.body
411 br label %for.body4
412
413for.body4: ; preds = %for.body4.preheader, %for.body4
414 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
415 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000416 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000417 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000418 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000419 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000420 store i32 %0, i32* %B.addr.01, align 4
421 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000422 %exitcond = icmp ne i64 %inc7, 11
423 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000424
425for.end8: ; preds = %for.body4
426 ret void
427}
428
429
430;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000431;; for (long int j = 0; j < 10; j++) {
432;; A[11*i - j] = i;
433;; *B++ = A[45];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000434
435define void @rdiv9(i32* %A, i32* %B) nounwind uwtable ssp {
436entry:
437 br label %for.cond1.preheader
438
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000439; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000440; CHECK: da analyze - none!
441; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000442; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000443; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000444; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000445
446for.cond1.preheader: ; preds = %entry, %for.inc5
447 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000448 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
449 br label %for.body3
450
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000451for.body3: ; preds = %for.cond1.preheader, %for.body3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000452 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
453 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
454 %conv = trunc i64 %i.03 to i32
455 %mul = mul nsw i64 %i.03, 11
456 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000457 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000458 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000459 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000460 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000461 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000462 store i32 %0, i32* %B.addr.11, align 4
463 %inc = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000464 %exitcond = icmp ne i64 %inc, 10
465 br i1 %exitcond, label %for.body3, label %for.inc5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000466
467for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000468 %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000469 %inc6 = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000470 %exitcond5 = icmp ne i64 %inc6, 5
471 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
472
473for.end7: ; preds = %for.inc5
474 ret void
475}
476
477
478
479;; for (long int i = 0; i <= 5; i++)
480;; for (long int j = 0; j < 10; j++) {
481;; A[11*i - j] = i;
482;; *B++ = A[45];
483
484define void @rdiv10(i32* %A, i32* %B) nounwind uwtable ssp {
485entry:
486 br label %for.cond1.preheader
487
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000488; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000489; CHECK: da analyze - none!
490; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000491; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000492; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000493; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000494
495for.cond1.preheader: ; preds = %entry, %for.inc5
496 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
497 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
498 br label %for.body3
499
500for.body3: ; preds = %for.cond1.preheader, %for.body3
501 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
502 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
503 %conv = trunc i64 %i.03 to i32
504 %mul = mul nsw i64 %i.03, 11
505 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000506 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000507 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000508 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000509 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000510 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000511 store i32 %0, i32* %B.addr.11, align 4
512 %inc = add nsw i64 %j.02, 1
513 %exitcond = icmp ne i64 %inc, 10
514 br i1 %exitcond, label %for.body3, label %for.inc5
515
516for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000517 %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000518 %inc6 = add nsw i64 %i.03, 1
519 %exitcond5 = icmp ne i64 %inc6, 6
520 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
Sebastian Pop59b61b92012-10-11 07:32:34 +0000521
522for.end7: ; preds = %for.inc5
523 ret void
524}
525
526
527;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000528;; for (long int j = 0; j <= 10; j++) {
529;; A[11*i - j] = i;
530;; *B++ = A[45];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000531
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000532define void @rdiv11(i32* %A, i32* %B) nounwind uwtable ssp {
Sebastian Pop59b61b92012-10-11 07:32:34 +0000533entry:
534 br label %for.cond1.preheader
535
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000536; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000537; CHECK: da analyze - none!
538; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000539; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000540; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000541; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000542
543for.cond1.preheader: ; preds = %entry, %for.inc5
544 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000545 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
546 br label %for.body3
547
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000548for.body3: ; preds = %for.cond1.preheader, %for.body3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000549 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
550 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
551 %conv = trunc i64 %i.03 to i32
552 %mul = mul nsw i64 %i.03, 11
553 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000554 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000555 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000556 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000557 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000558 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000559 store i32 %0, i32* %B.addr.11, align 4
560 %inc = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000561 %exitcond = icmp ne i64 %inc, 11
562 br i1 %exitcond, label %for.body3, label %for.inc5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000563
564for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000565 %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
Sebastian Pop59b61b92012-10-11 07:32:34 +0000566 %inc6 = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000567 %exitcond5 = icmp ne i64 %inc6, 5
568 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
Sebastian Pop59b61b92012-10-11 07:32:34 +0000569
570for.end7: ; preds = %for.inc5
571 ret void
572}
573
574
575;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000576;; for (long int j = 0; j <= 10; j++) {
577;; A[11*i - j] = i;
578;; *B++ = A[45];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000579
580define void @rdiv12(i32* %A, i32* %B) nounwind uwtable ssp {
581entry:
582 br label %for.cond1.preheader
583
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000584; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000585; CHECK: da analyze - flow [* *|<]!
586; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000587; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000588; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000589; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000590
591for.cond1.preheader: ; preds = %entry, %for.inc5
592 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000593 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
594 br label %for.body3
595
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000596for.body3: ; preds = %for.cond1.preheader, %for.body3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000597 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
598 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
599 %conv = trunc i64 %i.03 to i32
600 %mul = mul nsw i64 %i.03, 11
601 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000602 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000603 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000604 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000605 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000606 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000607 store i32 %0, i32* %B.addr.11, align 4
608 %inc = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000609 %exitcond = icmp ne i64 %inc, 11
610 br i1 %exitcond, label %for.body3, label %for.inc5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000611
612for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000613 %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
Sebastian Pop59b61b92012-10-11 07:32:34 +0000614 %inc6 = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000615 %exitcond5 = icmp ne i64 %inc6, 6
616 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
Sebastian Pop59b61b92012-10-11 07:32:34 +0000617
618for.end7: ; preds = %for.inc5
619 ret void
620}