blob: 81e61892d8e8dbb687b3448d5384c917e8a751d2 [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'SymbolicRDIV.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 < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +00009;; A[2*i + n1] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000010;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000011;; *B++ = A[3*j + 3*n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000012
13define void @symbolicrdiv0(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
14entry:
15 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000016 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000017
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000018; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000019; CHECK: da analyze - none!
20; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000021; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000022; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000023; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000024
25for.body.preheader: ; preds = %entry
26 br label %for.body
27
28for.cond1.preheader.loopexit: ; preds = %for.body
29 br label %for.cond1.preheader
30
31for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +000032 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000033 br i1 %cmp21, label %for.end11, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000034
Benjamin Kramer3eb15632012-11-13 12:12:02 +000035for.body4.preheader: ; preds = %for.cond1.preheader
36 br label %for.body4
37
38for.body: ; preds = %for.body.preheader, %for.body
39 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000040 %conv = trunc i64 %i.05 to i32
41 %mul = shl nsw i64 %i.05, 1
42 %add = add i64 %mul, %n1
43 %arrayidx = getelementptr inbounds i32* %A, i64 %add
44 store i32 %conv, i32* %arrayidx, align 4
45 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000046 %exitcond = icmp ne i64 %inc, %n1
47 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +000048
Benjamin Kramer3eb15632012-11-13 12:12:02 +000049for.body4: ; preds = %for.body4.preheader, %for.body4
50 %j.03 = phi i64 [ %inc10, %for.body4 ], [ 0, %for.body4.preheader ]
51 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000052 %mul56 = add i64 %j.03, %n1
53 %add7 = mul i64 %mul56, 3
54 %arrayidx8 = getelementptr inbounds i32* %A, i64 %add7
55 %0 = load i32* %arrayidx8, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +000056 %incdec.ptr = getelementptr inbounds i32* %B.addr.02, i64 1
57 store i32 %0, i32* %B.addr.02, align 4
58 %inc10 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000059 %exitcond7 = icmp ne i64 %inc10, %n2
60 br i1 %exitcond7, label %for.body4, label %for.end11.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +000061
Benjamin Kramer3eb15632012-11-13 12:12:02 +000062for.end11.loopexit: ; preds = %for.body4
63 br label %for.end11
64
65for.end11: ; preds = %for.end11.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000066 ret void
67}
68
69
70;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000071;; A[2*i + 5*n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000072;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000073;; *B++ = A[3*j + 2*n2];
Sebastian Pop59b61b92012-10-11 07:32:34 +000074
75define void @symbolicrdiv1(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
76entry:
77 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000078 br i1 %cmp4, label %for.cond2.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000079
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000080; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000081; CHECK: da analyze - none!
82; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000083; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000084; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000085; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000086
87for.body.preheader: ; preds = %entry
88 br label %for.body
89
90for.cond2.preheader.loopexit: ; preds = %for.body
91 br label %for.cond2.preheader
92
93for.cond2.preheader: ; preds = %for.cond2.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +000094 %cmp31 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000095 br i1 %cmp31, label %for.end12, label %for.body5.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000096
Benjamin Kramer3eb15632012-11-13 12:12:02 +000097for.body5.preheader: ; preds = %for.cond2.preheader
98 br label %for.body5
99
100for.body: ; preds = %for.body.preheader, %for.body
101 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000102 %conv = trunc i64 %i.05 to i32
103 %mul = shl nsw i64 %i.05, 1
104 %mul1 = mul i64 %n2, 5
105 %add = add i64 %mul, %mul1
106 %arrayidx = getelementptr inbounds i32* %A, i64 %add
107 store i32 %conv, i32* %arrayidx, align 4
108 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000109 %exitcond = icmp ne i64 %inc, %n1
110 br i1 %exitcond, label %for.body, label %for.cond2.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000111
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000112for.body5: ; preds = %for.body5.preheader, %for.body5
113 %j.03 = phi i64 [ %inc11, %for.body5 ], [ 0, %for.body5.preheader ]
114 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body5 ], [ %B, %for.body5.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000115 %mul6 = mul nsw i64 %j.03, 3
116 %mul7 = shl i64 %n2, 1
117 %add8 = add i64 %mul6, %mul7
118 %arrayidx9 = getelementptr inbounds i32* %A, i64 %add8
119 %0 = load i32* %arrayidx9, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +0000120 %incdec.ptr = getelementptr inbounds i32* %B.addr.02, i64 1
121 store i32 %0, i32* %B.addr.02, align 4
122 %inc11 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000123 %exitcond6 = icmp ne i64 %inc11, %n2
124 br i1 %exitcond6, label %for.body5, label %for.end12.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000125
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000126for.end12.loopexit: ; preds = %for.body5
127 br label %for.end12
128
129for.end12: ; preds = %for.end12.loopexit, %for.cond2.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000130 ret void
131}
132
133
134;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000135;; A[2*i - n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000136;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000137;; *B++ = A[-j + 2*n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000138
139define void @symbolicrdiv2(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
140entry:
141 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000142 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000143
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000144; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000145; CHECK: da analyze - none!
146; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000147; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000148; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000149; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000150
151for.body.preheader: ; preds = %entry
152 br label %for.body
153
154for.cond1.preheader.loopexit: ; preds = %for.body
155 br label %for.cond1.preheader
156
157for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000158 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000159 br i1 %cmp21, label %for.end10, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000160
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000161for.body4.preheader: ; preds = %for.cond1.preheader
162 br label %for.body4
163
164for.body: ; preds = %for.body.preheader, %for.body
165 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000166 %conv = trunc i64 %i.05 to i32
167 %mul = shl nsw i64 %i.05, 1
168 %sub = sub i64 %mul, %n2
169 %arrayidx = getelementptr inbounds i32* %A, i64 %sub
170 store i32 %conv, i32* %arrayidx, align 4
171 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000172 %exitcond = icmp ne i64 %inc, %n1
173 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000174
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000175for.body4: ; preds = %for.body4.preheader, %for.body4
176 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
177 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000178 %mul6 = shl i64 %n1, 1
179 %add = sub i64 %mul6, %j.03
180 %arrayidx7 = getelementptr inbounds i32* %A, i64 %add
181 %0 = load i32* %arrayidx7, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +0000182 %incdec.ptr = getelementptr inbounds i32* %B.addr.02, i64 1
183 store i32 %0, i32* %B.addr.02, align 4
184 %inc9 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000185 %exitcond6 = icmp ne i64 %inc9, %n2
186 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000187
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000188for.end10.loopexit: ; preds = %for.body4
189 br label %for.end10
190
191for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000192 ret void
193}
194
195
196;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000197;; A[-i + n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000198;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000199;; *B++ = A[j - n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000200
201define void @symbolicrdiv3(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
202entry:
203 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000204 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000205
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000206; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000207; CHECK: da analyze - none!
208; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000209; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000210; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000211; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000212
213for.body.preheader: ; preds = %entry
214 br label %for.body
215
216for.cond1.preheader.loopexit: ; preds = %for.body
217 br label %for.cond1.preheader
218
219for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000220 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000221 br i1 %cmp21, label %for.end9, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000222
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000223for.body4.preheader: ; preds = %for.cond1.preheader
224 br label %for.body4
225
226for.body: ; preds = %for.body.preheader, %for.body
227 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000228 %conv = trunc i64 %i.05 to i32
229 %add = sub i64 %n2, %i.05
230 %arrayidx = getelementptr inbounds i32* %A, i64 %add
231 store i32 %conv, i32* %arrayidx, align 4
232 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000233 %exitcond = icmp ne i64 %inc, %n1
234 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000235
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000236for.body4: ; preds = %for.body4.preheader, %for.body4
237 %j.03 = phi i64 [ %inc8, %for.body4 ], [ 0, %for.body4.preheader ]
238 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000239 %sub5 = sub i64 %j.03, %n1
240 %arrayidx6 = getelementptr inbounds i32* %A, i64 %sub5
241 %0 = load i32* %arrayidx6, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +0000242 %incdec.ptr = getelementptr inbounds i32* %B.addr.02, i64 1
243 store i32 %0, i32* %B.addr.02, align 4
244 %inc8 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000245 %exitcond6 = icmp ne i64 %inc8, %n2
246 br i1 %exitcond6, label %for.body4, label %for.end9.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000247
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000248for.end9.loopexit: ; preds = %for.body4
249 br label %for.end9
250
251for.end9: ; preds = %for.end9.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000252 ret void
253}
254
255
256;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000257;; A[-i + 2*n1] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000258;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000259;; *B++ = A[-j + n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000260
261define void @symbolicrdiv4(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
262entry:
263 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000264 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000265
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000266; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000267; CHECK: da analyze - none!
268; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000269; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000270; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000271; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000272
273for.body.preheader: ; preds = %entry
274 br label %for.body
275
276for.cond1.preheader.loopexit: ; preds = %for.body
277 br label %for.cond1.preheader
278
279for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000280 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000281 br i1 %cmp21, label %for.end10, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000282
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000283for.body4.preheader: ; preds = %for.cond1.preheader
284 br label %for.body4
285
286for.body: ; preds = %for.body.preheader, %for.body
287 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000288 %conv = trunc i64 %i.05 to i32
289 %mul = shl i64 %n1, 1
290 %add = sub i64 %mul, %i.05
291 %arrayidx = getelementptr inbounds i32* %A, i64 %add
292 store i32 %conv, i32* %arrayidx, align 4
293 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000294 %exitcond = icmp ne i64 %inc, %n1
295 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000296
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000297for.body4: ; preds = %for.body4.preheader, %for.body4
298 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
299 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000300 %add6 = sub i64 %n1, %j.03
301 %arrayidx7 = getelementptr inbounds i32* %A, i64 %add6
302 %0 = load i32* %arrayidx7, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +0000303 %incdec.ptr = getelementptr inbounds i32* %B.addr.02, i64 1
304 store i32 %0, i32* %B.addr.02, align 4
305 %inc9 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000306 %exitcond6 = icmp ne i64 %inc9, %n2
307 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000308
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000309for.end10.loopexit: ; preds = %for.body4
310 br label %for.end10
311
312for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000313 ret void
314}
315
316
317;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000318;; A[-i + n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000319;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000320;; *B++ = A[-j + 2*n2];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000321
322define void @symbolicrdiv5(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
323entry:
324 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000325 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000326
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000327; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000328; CHECK: da analyze - none!
329; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000330; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000331; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000332; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000333
334for.body.preheader: ; preds = %entry
335 br label %for.body
336
337for.cond1.preheader.loopexit: ; preds = %for.body
338 br label %for.cond1.preheader
339
340for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000341 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000342 br i1 %cmp21, label %for.end10, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000343
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000344for.body4.preheader: ; preds = %for.cond1.preheader
345 br label %for.body4
346
347for.body: ; preds = %for.body.preheader, %for.body
348 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000349 %conv = trunc i64 %i.05 to i32
350 %add = sub i64 %n2, %i.05
351 %arrayidx = getelementptr inbounds i32* %A, i64 %add
352 store i32 %conv, i32* %arrayidx, align 4
353 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000354 %exitcond = icmp ne i64 %inc, %n1
355 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000356
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000357for.body4: ; preds = %for.body4.preheader, %for.body4
358 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
359 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000360 %mul = shl i64 %n2, 1
361 %add6 = sub i64 %mul, %j.03
362 %arrayidx7 = getelementptr inbounds i32* %A, i64 %add6
363 %0 = load i32* %arrayidx7, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +0000364 %incdec.ptr = getelementptr inbounds i32* %B.addr.02, i64 1
365 store i32 %0, i32* %B.addr.02, align 4
366 %inc9 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000367 %exitcond6 = icmp ne i64 %inc9, %n2
368 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000369
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000370for.end10.loopexit: ; preds = %for.body4
371 br label %for.end10
372
373for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000374 ret void
375}
376
377
378;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000379;; for (long int j = 0; j < n2; j++) {
380;; A[j -i + n2] = i;
381;; *B++ = A[2*n2];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000382
383define void @symbolicrdiv6(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
384entry:
385 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000386 br i1 %cmp4, label %for.end7, label %for.cond1.preheader.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000387
Preston Briggs1084fa22012-11-27 06:41:46 +0000388; CHECK: da analyze - output [* *]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000389; CHECK: da analyze - none!
390; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000391; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000392; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000393; CHECK: da analyze - output [* *]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000394
395for.cond1.preheader.preheader: ; preds = %entry
396 br label %for.cond1.preheader
397
398for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc5
399 %B.addr.06 = phi i32* [ %B.addr.1.lcssa, %for.inc5 ], [ %B, %for.cond1.preheader.preheader ]
400 %i.05 = phi i64 [ %inc6, %for.inc5 ], [ 0, %for.cond1.preheader.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000401 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000402 br i1 %cmp21, label %for.inc5, label %for.body3.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000403
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000404for.body3.preheader: ; preds = %for.cond1.preheader
405 br label %for.body3
406
407for.body3: ; preds = %for.body3.preheader, %for.body3
408 %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]
409 %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000410 %conv = trunc i64 %i.05 to i32
411 %sub = sub nsw i64 %j.03, %i.05
412 %add = add i64 %sub, %n2
413 %arrayidx = getelementptr inbounds i32* %A, i64 %add
414 store i32 %conv, i32* %arrayidx, align 4
415 %mul = shl i64 %n2, 1
416 %arrayidx4 = getelementptr inbounds i32* %A, i64 %mul
417 %0 = load i32* %arrayidx4, align 4
Sebastian Pop59b61b92012-10-11 07:32:34 +0000418 %incdec.ptr = getelementptr inbounds i32* %B.addr.12, i64 1
419 store i32 %0, i32* %B.addr.12, align 4
420 %inc = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000421 %exitcond = icmp ne i64 %inc, %n2
422 br i1 %exitcond, label %for.body3, label %for.inc5.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000423
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000424for.inc5.loopexit: ; preds = %for.body3
425 %scevgep = getelementptr i32* %B.addr.06, i64 %n2
426 br label %for.inc5
427
428for.inc5: ; preds = %for.inc5.loopexit, %for.cond1.preheader
429 %B.addr.1.lcssa = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc5.loopexit ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000430 %inc6 = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000431 %exitcond7 = icmp ne i64 %inc6, %n1
432 br i1 %exitcond7, label %for.cond1.preheader, label %for.end7.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000433
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000434for.end7.loopexit: ; preds = %for.inc5
435 br label %for.end7
436
437for.end7: ; preds = %for.end7.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000438 ret void
439}