blob: 5b2488c1bc8ebeab5d565a33cf53dac12e3590a6 [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'ExactRDIV.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 int i = 0; i < 10; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +00009;; A[4*i + 10] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000010;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000011;; *B++ = A[2*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000012
13define void @rdiv0(i32* %A, i32* %B) nounwind uwtable ssp {
14entry:
15 br label %for.body
16
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000017; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000018; CHECK: da analyze - none!
19; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000020; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000021; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000022; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000023
24for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000025 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
26 %conv = trunc i64 %i.03 to i32
27 %mul = shl nsw i64 %i.03, 2
28 %add = add nsw i64 %mul, 10
David Blaikie79e6c742015-02-27 19:29:02 +000029 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000030 store i32 %conv, i32* %arrayidx, align 4
31 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000032 %exitcond5 = icmp ne i64 %inc, 10
33 br i1 %exitcond5, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000034
Benjamin Kramer3eb15632012-11-13 12:12:02 +000035for.body4.preheader: ; preds = %for.body
36 br label %for.body4
37
38for.body4: ; preds = %for.body4.preheader, %for.body4
39 %j.02 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
40 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000041 %mul5 = shl nsw i64 %j.02, 1
42 %add64 = or i64 %mul5, 1
David Blaikie79e6c742015-02-27 19:29:02 +000043 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add64
David Blaikiea79ac142015-02-27 21:17:42 +000044 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000045 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000046 store i32 %0, i32* %B.addr.01, align 4
47 %inc9 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000048 %exitcond = icmp ne i64 %inc9, 10
49 br i1 %exitcond, label %for.body4, label %for.end10
Sebastian Pop59b61b92012-10-11 07:32:34 +000050
51for.end10: ; preds = %for.body4
52 ret void
53}
54
55
56;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000057;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000058;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000059;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +000060
61define void @rdiv1(i32* %A, i32* %B) nounwind uwtable ssp {
62entry:
63 br label %for.body
64
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000065; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000066; CHECK: da analyze - none!
67; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000068; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000069; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000070; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000071
72for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000073 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
74 %conv = trunc i64 %i.03 to i32
75 %mul = mul nsw i64 %i.03, 11
76 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +000077 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +000078 store i32 %conv, i32* %arrayidx, align 4
79 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000080 %exitcond4 = icmp ne i64 %inc, 5
81 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000082
Benjamin Kramer3eb15632012-11-13 12:12:02 +000083for.body4.preheader: ; preds = %for.body
84 br label %for.body4
85
86for.body4: ; preds = %for.body4.preheader, %for.body4
87 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
88 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +000089 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +000090 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000091 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000092 store i32 %0, i32* %B.addr.01, align 4
93 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000094 %exitcond = icmp ne i64 %inc7, 10
95 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +000096
97for.end8: ; preds = %for.body4
98 ret void
99}
100
101
102;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000103;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000104;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000105;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000106
107define void @rdiv2(i32* %A, i32* %B) nounwind uwtable ssp {
108entry:
109 br label %for.body
110
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000111; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000112; CHECK: da analyze - none!
113; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000114; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000115; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000116; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000117
118for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000119 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
120 %conv = trunc i64 %i.03 to i32
121 %mul = mul nsw i64 %i.03, 11
122 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +0000123 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000124 store i32 %conv, i32* %arrayidx, align 4
125 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000126 %exitcond4 = icmp ne i64 %inc, 6
127 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000128
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000129for.body4.preheader: ; preds = %for.body
130 br label %for.body4
131
132for.body4: ; preds = %for.body4.preheader, %for.body4
133 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
134 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +0000135 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +0000136 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000137 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000138 store i32 %0, i32* %B.addr.01, align 4
139 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000140 %exitcond = icmp ne i64 %inc7, 10
141 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000142
143for.end8: ; preds = %for.body4
144 ret void
145}
146
147
148;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000149;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000150;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000151;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000152
153define void @rdiv3(i32* %A, i32* %B) nounwind uwtable ssp {
154entry:
155 br label %for.body
156
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000157; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000158; CHECK: da analyze - none!
159; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000160; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000161; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000162; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000163
164for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000165 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
166 %conv = trunc i64 %i.03 to i32
167 %mul = mul nsw i64 %i.03, 11
168 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +0000169 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000170 store i32 %conv, i32* %arrayidx, align 4
171 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000172 %exitcond4 = icmp ne i64 %inc, 5
173 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000174
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000175for.body4.preheader: ; preds = %for.body
176 br label %for.body4
177
178for.body4: ; preds = %for.body4.preheader, %for.body4
179 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
180 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +0000181 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +0000182 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000183 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000184 store i32 %0, i32* %B.addr.01, align 4
185 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000186 %exitcond = icmp ne i64 %inc7, 11
187 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000188
189for.end8: ; preds = %for.body4
190 ret void
191}
192
193
194;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000195;; A[11*i - 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000196;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000197;; *B++ = A[j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000198
199define void @rdiv4(i32* %A, i32* %B) nounwind uwtable ssp {
200entry:
201 br label %for.body
202
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000203; CHECK: da analyze - none!
Preston Briggsfd0b5c82012-11-30 00:44:47 +0000204; CHECK: da analyze - flow [|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000205; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000206; CHECK: da analyze - none!
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
210for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000211 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
212 %conv = trunc i64 %i.03 to i32
213 %mul = mul nsw i64 %i.03, 11
214 %sub = add nsw i64 %mul, -45
David Blaikie79e6c742015-02-27 19:29:02 +0000215 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000216 store i32 %conv, i32* %arrayidx, align 4
217 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000218 %exitcond4 = icmp ne i64 %inc, 6
219 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000220
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000221for.body4.preheader: ; preds = %for.body
222 br label %for.body4
223
224for.body4: ; preds = %for.body4.preheader, %for.body4
225 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
226 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
David Blaikie79e6c742015-02-27 19:29:02 +0000227 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %j.02
David Blaikiea79ac142015-02-27 21:17:42 +0000228 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000229 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000230 store i32 %0, i32* %B.addr.01, align 4
231 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000232 %exitcond = icmp ne i64 %inc7, 11
233 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000234
235for.end8: ; preds = %for.body4
236 ret void
237}
238
239
240;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000241;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000242;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000243;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000244
245define void @rdiv5(i32* %A, i32* %B) nounwind uwtable ssp {
246entry:
247 br label %for.body
248
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000249; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000250; CHECK: da analyze - none!
251; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000252; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000253; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000254; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000255
256for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000257 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
258 %conv = trunc i64 %i.03 to i32
259 %mul = mul nsw i64 %i.03, -11
260 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000261 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000262 store i32 %conv, i32* %arrayidx, align 4
263 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000264 %exitcond4 = icmp ne i64 %inc, 5
265 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000266
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000267for.body4.preheader: ; preds = %for.body
268 br label %for.body4
269
270for.body4: ; preds = %for.body4.preheader, %for.body4
271 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
272 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000273 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000274 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000275 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000276 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000277 store i32 %0, i32* %B.addr.01, align 4
278 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000279 %exitcond = icmp ne i64 %inc7, 10
280 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000281
282for.end8: ; preds = %for.body4
283 ret void
284}
285
286
287;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000288;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000289;; for (long int j = 0; j < 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000290;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000291
292define void @rdiv6(i32* %A, i32* %B) nounwind uwtable ssp {
293entry:
294 br label %for.body
295
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000296; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000297; CHECK: da analyze - none!
298; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000299; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000300; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000301; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000302
303for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000304 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
305 %conv = trunc i64 %i.03 to i32
306 %mul = mul nsw i64 %i.03, -11
307 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000308 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000309 store i32 %conv, i32* %arrayidx, align 4
310 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000311 %exitcond4 = icmp ne i64 %inc, 6
312 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000313
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000314for.body4.preheader: ; preds = %for.body
315 br label %for.body4
316
317for.body4: ; preds = %for.body4.preheader, %for.body4
318 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
319 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000320 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000321 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000322 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000323 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000324 store i32 %0, i32* %B.addr.01, align 4
325 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000326 %exitcond = icmp ne i64 %inc7, 10
327 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000328
329for.end8: ; preds = %for.body4
330 ret void
331}
332
333
334;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000335;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000336;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000337;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000338
339define void @rdiv7(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 - none!
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.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
352 %conv = trunc i64 %i.03 to i32
353 %mul = mul nsw i64 %i.03, -11
354 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000355 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000356 store i32 %conv, i32* %arrayidx, align 4
357 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000358 %exitcond4 = icmp ne i64 %inc, 5
359 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000360
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000361for.body4.preheader: ; preds = %for.body
362 br label %for.body4
363
364for.body4: ; preds = %for.body4.preheader, %for.body4
365 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
366 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000367 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000368 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000369 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000370 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000371 store i32 %0, i32* %B.addr.01, align 4
372 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000373 %exitcond = icmp ne i64 %inc7, 11
374 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000375
376for.end8: ; preds = %for.body4
377 ret void
378}
379
380
381;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000382;; A[-11*i + 45] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000383;; for (long int j = 0; j <= 10; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000384;; *B++ = A[-j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000385
386define void @rdiv8(i32* %A, i32* %B) nounwind uwtable ssp {
387entry:
388 br label %for.body
389
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000390; CHECK: da analyze - none!
Preston Briggsfd0b5c82012-11-30 00:44:47 +0000391; CHECK: da analyze - flow [|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000392; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000393; CHECK: da analyze - none!
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
397for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000398 %i.03 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
399 %conv = trunc i64 %i.03 to i32
400 %mul = mul nsw i64 %i.03, -11
401 %add = add nsw i64 %mul, 45
David Blaikie79e6c742015-02-27 19:29:02 +0000402 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000403 store i32 %conv, i32* %arrayidx, align 4
404 %inc = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000405 %exitcond4 = icmp ne i64 %inc, 6
406 br i1 %exitcond4, label %for.body, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000407
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000408for.body4.preheader: ; preds = %for.body
409 br label %for.body4
410
411for.body4: ; preds = %for.body4.preheader, %for.body4
412 %j.02 = phi i64 [ %inc7, %for.body4 ], [ 0, %for.body4.preheader ]
413 %B.addr.01 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000414 %sub = sub nsw i64 0, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000415 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000416 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000417 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000418 store i32 %0, i32* %B.addr.01, align 4
419 %inc7 = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000420 %exitcond = icmp ne i64 %inc7, 11
421 br i1 %exitcond, label %for.body4, label %for.end8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000422
423for.end8: ; preds = %for.body4
424 ret void
425}
426
427
428;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000429;; for (long int j = 0; j < 10; j++) {
430;; A[11*i - j] = i;
431;; *B++ = A[45];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000432
433define void @rdiv9(i32* %A, i32* %B) nounwind uwtable ssp {
434entry:
435 br label %for.cond1.preheader
436
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000437; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000438; CHECK: da analyze - none!
439; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000440; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000441; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000442; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000443
444for.cond1.preheader: ; preds = %entry, %for.inc5
445 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000446 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
447 br label %for.body3
448
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000449for.body3: ; preds = %for.cond1.preheader, %for.body3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000450 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
451 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
452 %conv = trunc i64 %i.03 to i32
453 %mul = mul nsw i64 %i.03, 11
454 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000455 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000456 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000457 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000458 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000459 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000460 store i32 %0, i32* %B.addr.11, align 4
461 %inc = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000462 %exitcond = icmp ne i64 %inc, 10
463 br i1 %exitcond, label %for.body3, label %for.inc5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000464
465for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000466 %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000467 %inc6 = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000468 %exitcond5 = icmp ne i64 %inc6, 5
469 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
470
471for.end7: ; preds = %for.inc5
472 ret void
473}
474
475
476
477;; for (long int i = 0; i <= 5; i++)
478;; for (long int j = 0; j < 10; j++) {
479;; A[11*i - j] = i;
480;; *B++ = A[45];
481
482define void @rdiv10(i32* %A, i32* %B) nounwind uwtable ssp {
483entry:
484 br label %for.cond1.preheader
485
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000486; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000487; CHECK: da analyze - none!
488; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000489; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000490; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000491; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000492
493for.cond1.preheader: ; preds = %entry, %for.inc5
494 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
495 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
496 br label %for.body3
497
498for.body3: ; preds = %for.cond1.preheader, %for.body3
499 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
500 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
501 %conv = trunc i64 %i.03 to i32
502 %mul = mul nsw i64 %i.03, 11
503 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000504 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000505 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000506 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000507 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000508 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000509 store i32 %0, i32* %B.addr.11, align 4
510 %inc = add nsw i64 %j.02, 1
511 %exitcond = icmp ne i64 %inc, 10
512 br i1 %exitcond, label %for.body3, label %for.inc5
513
514for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000515 %scevgep = getelementptr i32, i32* %B.addr.04, i64 10
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000516 %inc6 = add nsw i64 %i.03, 1
517 %exitcond5 = icmp ne i64 %inc6, 6
518 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
Sebastian Pop59b61b92012-10-11 07:32:34 +0000519
520for.end7: ; preds = %for.inc5
521 ret void
522}
523
524
525;; for (long int i = 0; i < 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000526;; for (long int j = 0; j <= 10; j++) {
527;; A[11*i - j] = i;
528;; *B++ = A[45];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000529
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000530define void @rdiv11(i32* %A, i32* %B) nounwind uwtable ssp {
Sebastian Pop59b61b92012-10-11 07:32:34 +0000531entry:
532 br label %for.cond1.preheader
533
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000534; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000535; CHECK: da analyze - none!
536; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000537; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000538; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000539; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000540
541for.cond1.preheader: ; preds = %entry, %for.inc5
542 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000543 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
544 br label %for.body3
545
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000546for.body3: ; preds = %for.cond1.preheader, %for.body3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000547 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
548 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
549 %conv = trunc i64 %i.03 to i32
550 %mul = mul nsw i64 %i.03, 11
551 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000552 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000553 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000554 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000555 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000556 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000557 store i32 %0, i32* %B.addr.11, align 4
558 %inc = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000559 %exitcond = icmp ne i64 %inc, 11
560 br i1 %exitcond, label %for.body3, label %for.inc5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000561
562for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000563 %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
Sebastian Pop59b61b92012-10-11 07:32:34 +0000564 %inc6 = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000565 %exitcond5 = icmp ne i64 %inc6, 5
566 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
Sebastian Pop59b61b92012-10-11 07:32:34 +0000567
568for.end7: ; preds = %for.inc5
569 ret void
570}
571
572
573;; for (long int i = 0; i <= 5; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000574;; for (long int j = 0; j <= 10; j++) {
575;; A[11*i - j] = i;
576;; *B++ = A[45];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000577
578define void @rdiv12(i32* %A, i32* %B) nounwind uwtable ssp {
579entry:
580 br label %for.cond1.preheader
581
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000582; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000583; CHECK: da analyze - flow [* *|<]!
584; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000585; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000586; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000587; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000588
589for.cond1.preheader: ; preds = %entry, %for.inc5
590 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc5 ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000591 %i.03 = phi i64 [ 0, %entry ], [ %inc6, %for.inc5 ]
592 br label %for.body3
593
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000594for.body3: ; preds = %for.cond1.preheader, %for.body3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000595 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
596 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
597 %conv = trunc i64 %i.03 to i32
598 %mul = mul nsw i64 %i.03, 11
599 %sub = sub nsw i64 %mul, %j.02
David Blaikie79e6c742015-02-27 19:29:02 +0000600 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000601 store i32 %conv, i32* %arrayidx, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000602 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 45
David Blaikiea79ac142015-02-27 21:17:42 +0000603 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000604 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000605 store i32 %0, i32* %B.addr.11, align 4
606 %inc = add nsw i64 %j.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000607 %exitcond = icmp ne i64 %inc, 11
608 br i1 %exitcond, label %for.body3, label %for.inc5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000609
610for.inc5: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000611 %scevgep = getelementptr i32, i32* %B.addr.04, i64 11
Sebastian Pop59b61b92012-10-11 07:32:34 +0000612 %inc6 = add nsw i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000613 %exitcond5 = icmp ne i64 %inc6, 6
614 br i1 %exitcond5, label %for.cond1.preheader, label %for.end7
Sebastian Pop59b61b92012-10-11 07:32:34 +0000615
616for.end7: ; preds = %for.inc5
617 ret void
618}