blob: 99c5cef9697852a2a35d4a22a79a10e6a54f8934 [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 -check-prefix=DELIN
Arthur Eubanks6f66ad12020-09-14 18:45:30 -07003; RUN: opt < %s -analyze -enable-new-pm=0 -basic-aa -da | FileCheck %s -check-prefix=DELIN
Sebastian Pop59b61b92012-10-11 07:32:34 +00004
Sebastian Pop59b61b92012-10-11 07:32:34 +00005target 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"
6target triple = "x86_64-apple-macosx10.6.0"
7
8
9;; for (long int i = 0; i < 100; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000010;; for (long int j = 0; j < 100; j++) {
11;; A[2*i - 4*j] = i;
12;; *B++ = A[6*i + 8*j];
Sebastian Pop59b61b92012-10-11 07:32:34 +000013
14define void @gcd0(i32* %A, i32* %B) nounwind uwtable ssp {
15entry:
16 br label %for.cond1.preheader
17
Sebastian Popbf6e1c22018-03-06 21:55:59 +000018; DELIN-LABEL: gcd0
Sebastian Pop448712b2014-05-07 18:01:20 +000019; DELIN: da analyze - output [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +000020; DELIN: da analyze - flow [=> *|<]!
21; DELIN: da analyze - confused!
Sebastian Pop448712b2014-05-07 18:01:20 +000022; DELIN: da analyze - input [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +000023; DELIN: da analyze - confused!
24; DELIN: da analyze - none!
25
Sebastian Pop59b61b92012-10-11 07:32:34 +000026for.cond1.preheader: ; preds = %entry, %for.inc8
27 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc8 ]
28 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]
29 br label %for.body3
30
31for.body3: ; preds = %for.cond1.preheader, %for.body3
32 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
33 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
34 %conv = trunc i64 %i.03 to i32
35 %mul = shl nsw i64 %i.03, 1
36 %mul4 = shl nsw i64 %j.02, 2
37 %sub = sub nsw i64 %mul, %mul4
David Blaikie79e6c742015-02-27 19:29:02 +000038 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +000039 store i32 %conv, i32* %arrayidx, align 4
40 %mul5 = mul nsw i64 %i.03, 6
41 %mul6 = shl nsw i64 %j.02, 3
42 %add = add nsw i64 %mul5, %mul6
David Blaikie79e6c742015-02-27 19:29:02 +000043 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add
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.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000046 store i32 %0, i32* %B.addr.11, align 4
47 %inc = add nsw i64 %j.02, 1
48 %exitcond = icmp ne i64 %inc, 100
49 br i1 %exitcond, label %for.body3, label %for.inc8
50
51for.inc8: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +000052 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
Sebastian Pop59b61b92012-10-11 07:32:34 +000053 %inc9 = add nsw i64 %i.03, 1
54 %exitcond5 = icmp ne i64 %inc9, 100
55 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10
56
57for.end10: ; preds = %for.inc8
58 ret void
59}
60
61
62;; for (long int i = 0; i < 100; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000063;; for (long int j = 0; j < 100; j++) {
64;; A[2*i - 4*j] = i;
65;; *B++ = A[6*i + 8*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000066
67define void @gcd1(i32* %A, i32* %B) nounwind uwtable ssp {
68entry:
69 br label %for.cond1.preheader
70
Sebastian Popbf6e1c22018-03-06 21:55:59 +000071; DELIN-LABEL: gcd1
Sebastian Pop448712b2014-05-07 18:01:20 +000072; DELIN: da analyze - output [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +000073; DELIN: da analyze - none!
74; DELIN: da analyze - confused!
Sebastian Pop448712b2014-05-07 18:01:20 +000075; DELIN: da analyze - input [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +000076; DELIN: da analyze - confused!
77; DELIN: da analyze - none!
78
Sebastian Pop59b61b92012-10-11 07:32:34 +000079for.cond1.preheader: ; preds = %entry, %for.inc9
80 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
81 %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
82 br label %for.body3
83
84for.body3: ; preds = %for.cond1.preheader, %for.body3
85 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
86 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
87 %conv = trunc i64 %i.03 to i32
88 %mul = shl nsw i64 %i.03, 1
89 %mul4 = shl nsw i64 %j.02, 2
90 %sub = sub nsw i64 %mul, %mul4
David Blaikie79e6c742015-02-27 19:29:02 +000091 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +000092 store i32 %conv, i32* %arrayidx, align 4
93 %mul5 = mul nsw i64 %i.03, 6
94 %mul6 = shl nsw i64 %j.02, 3
95 %add = add nsw i64 %mul5, %mul6
96 %add7 = or i64 %add, 1
David Blaikie79e6c742015-02-27 19:29:02 +000097 %arrayidx8 = getelementptr inbounds i32, i32* %A, i64 %add7
David Blaikiea79ac142015-02-27 21:17:42 +000098 %0 = load i32, i32* %arrayidx8, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000099 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000100 store i32 %0, i32* %B.addr.11, align 4
101 %inc = add nsw i64 %j.02, 1
102 %exitcond = icmp ne i64 %inc, 100
103 br i1 %exitcond, label %for.body3, label %for.inc9
104
105for.inc9: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000106 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
Sebastian Pop59b61b92012-10-11 07:32:34 +0000107 %inc10 = add nsw i64 %i.03, 1
108 %exitcond5 = icmp ne i64 %inc10, 100
109 br i1 %exitcond5, label %for.cond1.preheader, label %for.end11
110
111for.end11: ; preds = %for.inc9
112 ret void
113}
114
115
116;; for (long int i = 0; i < 100; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000117;; for (long int j = 0; j < 100; j++) {
118;; A[2*i - 4*j + 1] = i;
119;; *B++ = A[6*i + 8*j];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000120
121define void @gcd2(i32* %A, i32* %B) nounwind uwtable ssp {
122entry:
123 br label %for.cond1.preheader
124
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000125; DELIN-LABEL: gcd2
Sebastian Pop448712b2014-05-07 18:01:20 +0000126; DELIN: da analyze - output [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000127; DELIN: da analyze - none!
128; DELIN: da analyze - confused!
Sebastian Pop448712b2014-05-07 18:01:20 +0000129; DELIN: da analyze - input [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000130; DELIN: da analyze - confused!
131; DELIN: da analyze - none!
132
Sebastian Pop59b61b92012-10-11 07:32:34 +0000133for.cond1.preheader: ; preds = %entry, %for.inc9
134 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc9 ]
135 %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]
136 br label %for.body3
137
138for.body3: ; preds = %for.cond1.preheader, %for.body3
139 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
140 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
141 %conv = trunc i64 %i.03 to i32
142 %mul = shl nsw i64 %i.03, 1
143 %mul4 = shl nsw i64 %j.02, 2
144 %sub = sub nsw i64 %mul, %mul4
145 %add5 = or i64 %sub, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000146 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add5
Sebastian Pop59b61b92012-10-11 07:32:34 +0000147 store i32 %conv, i32* %arrayidx, align 4
148 %mul5 = mul nsw i64 %i.03, 6
149 %mul6 = shl nsw i64 %j.02, 3
150 %add7 = add nsw i64 %mul5, %mul6
David Blaikie79e6c742015-02-27 19:29:02 +0000151 %arrayidx8 = getelementptr inbounds i32, i32* %A, i64 %add7
David Blaikiea79ac142015-02-27 21:17:42 +0000152 %0 = load i32, i32* %arrayidx8, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000153 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000154 store i32 %0, i32* %B.addr.11, align 4
155 %inc = add nsw i64 %j.02, 1
156 %exitcond = icmp ne i64 %inc, 100
157 br i1 %exitcond, label %for.body3, label %for.inc9
158
159for.inc9: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000160 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
Sebastian Pop59b61b92012-10-11 07:32:34 +0000161 %inc10 = add nsw i64 %i.03, 1
162 %exitcond6 = icmp ne i64 %inc10, 100
163 br i1 %exitcond6, label %for.cond1.preheader, label %for.end11
164
165for.end11: ; preds = %for.inc9
166 ret void
167}
168
169
170;; for (long int i = 0; i < 100; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000171;; for (long int j = 0; j < 100; j++) {
172;; A[i + 2*j] = i;
173;; *B++ = A[i + 2*j - 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000174
175define void @gcd3(i32* %A, i32* %B) nounwind uwtable ssp {
176entry:
177 br label %for.cond1.preheader
178
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000179; DELIN-LABEL: gcd3
Sebastian Popf05ba892014-02-21 18:15:18 +0000180; DELIN: da analyze - output [* *]!
181; DELIN: da analyze - flow [<> *]!
182; DELIN: da analyze - confused!
183; DELIN: da analyze - input [* *]!
184; DELIN: da analyze - confused!
185; DELIN: da analyze - none!
186
Sebastian Pop59b61b92012-10-11 07:32:34 +0000187for.cond1.preheader: ; preds = %entry, %for.inc7
188 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc7 ]
189 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]
190 br label %for.body3
191
192for.body3: ; preds = %for.cond1.preheader, %for.body3
193 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
194 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
195 %conv = trunc i64 %i.03 to i32
196 %mul = shl nsw i64 %j.02, 1
197 %add = add nsw i64 %i.03, %mul
David Blaikie79e6c742015-02-27 19:29:02 +0000198 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000199 store i32 %conv, i32* %arrayidx, align 4
200 %mul4 = shl nsw i64 %j.02, 1
201 %add5 = add nsw i64 %i.03, %mul4
202 %sub = add nsw i64 %add5, -1
David Blaikie79e6c742015-02-27 19:29:02 +0000203 %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %sub
David Blaikiea79ac142015-02-27 21:17:42 +0000204 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000205 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000206 store i32 %0, i32* %B.addr.11, align 4
207 %inc = add nsw i64 %j.02, 1
208 %exitcond = icmp ne i64 %inc, 100
209 br i1 %exitcond, label %for.body3, label %for.inc7
210
211for.inc7: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000212 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
Sebastian Pop59b61b92012-10-11 07:32:34 +0000213 %inc8 = add nsw i64 %i.03, 1
214 %exitcond5 = icmp ne i64 %inc8, 100
215 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9
216
217for.end9: ; preds = %for.inc7
218 ret void
219}
220
221
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000222;; for (long int i = 0; i < 100; i++)
223;; for (long int j = 0; j < 100; j++) {
224;; A[5*i + 10*j*M + 9*M*N] = i;
225;; *B++ = A[15*i + 20*j*M - 21*N*M + 4];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000226
227define void @gcd4(i32* %A, i32* %B, i64 %M, i64 %N) nounwind uwtable ssp {
228entry:
229 br label %for.cond1.preheader
230
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000231; DELIN-LABEL: gcd4
David Greend143c652018-06-21 11:53:16 +0000232; DELIN: da analyze - output [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000233; DELIN: da analyze - none!
234; DELIN: da analyze - confused!
David Greend143c652018-06-21 11:53:16 +0000235; DELIN: da analyze - input [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000236; DELIN: da analyze - confused!
237; DELIN: da analyze - none!
238
Sebastian Pop59b61b92012-10-11 07:32:34 +0000239for.cond1.preheader: ; preds = %entry, %for.inc17
240 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc17 ]
241 %i.03 = phi i64 [ 0, %entry ], [ %inc18, %for.inc17 ]
242 br label %for.body3
243
244for.body3: ; preds = %for.cond1.preheader, %for.body3
245 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
246 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
247 %conv = trunc i64 %i.03 to i32
248 %mul = mul nsw i64 %i.03, 5
249 %mul4 = mul nsw i64 %j.02, 10
250 %mul5 = mul nsw i64 %mul4, %M
251 %add = add nsw i64 %mul, %mul5
252 %mul6 = mul nsw i64 %M, 9
253 %mul7 = mul nsw i64 %mul6, %N
254 %add8 = add nsw i64 %add, %mul7
David Blaikie79e6c742015-02-27 19:29:02 +0000255 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000256 store i32 %conv, i32* %arrayidx, align 4
257 %mul9 = mul nsw i64 %i.03, 15
258 %mul10 = mul nsw i64 %j.02, 20
259 %mul11 = mul nsw i64 %mul10, %M
260 %add12 = add nsw i64 %mul9, %mul11
261 %mul13 = mul nsw i64 %N, 21
262 %mul14 = mul nsw i64 %mul13, %M
263 %sub = sub nsw i64 %add12, %mul14
264 %add15 = add nsw i64 %sub, 4
David Blaikie79e6c742015-02-27 19:29:02 +0000265 %arrayidx16 = getelementptr inbounds i32, i32* %A, i64 %add15
David Blaikiea79ac142015-02-27 21:17:42 +0000266 %0 = load i32, i32* %arrayidx16, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000267 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000268 store i32 %0, i32* %B.addr.11, align 4
269 %inc = add nsw i64 %j.02, 1
270 %exitcond = icmp ne i64 %inc, 100
271 br i1 %exitcond, label %for.body3, label %for.inc17
272
273for.inc17: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000274 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
Sebastian Pop59b61b92012-10-11 07:32:34 +0000275 %inc18 = add nsw i64 %i.03, 1
276 %exitcond5 = icmp ne i64 %inc18, 100
277 br i1 %exitcond5, label %for.cond1.preheader, label %for.end19
278
279for.end19: ; preds = %for.inc17
280 ret void
281}
282
283
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000284;; for (long int i = 0; i < 100; i++)
285;; for (long int j = 0; j < 100; j++) {
286;; A[5*i + 10*j*M + 9*M*N] = i;
287;; *B++ = A[15*i + 20*j*M - 21*N*M + 5];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000288
289define void @gcd5(i32* %A, i32* %B, i64 %M, i64 %N) nounwind uwtable ssp {
290entry:
291 br label %for.cond1.preheader
292
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000293; DELIN-LABEL: gcd5
David Greend143c652018-06-21 11:53:16 +0000294; DELIN: da analyze - output [* *]!
295; DELIN: da analyze - flow [<> *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000296; DELIN: da analyze - confused!
David Greend143c652018-06-21 11:53:16 +0000297; DELIN: da analyze - input [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000298; DELIN: da analyze - confused!
299; DELIN: da analyze - none!
300
Sebastian Pop59b61b92012-10-11 07:32:34 +0000301for.cond1.preheader: ; preds = %entry, %for.inc17
302 %B.addr.04 = phi i32* [ %B, %entry ], [ %scevgep, %for.inc17 ]
303 %i.03 = phi i64 [ 0, %entry ], [ %inc18, %for.inc17 ]
304 br label %for.body3
305
306for.body3: ; preds = %for.cond1.preheader, %for.body3
307 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]
308 %B.addr.11 = phi i32* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]
309 %conv = trunc i64 %i.03 to i32
310 %mul = mul nsw i64 %i.03, 5
311 %mul4 = mul nsw i64 %j.02, 10
312 %mul5 = mul nsw i64 %mul4, %M
313 %add = add nsw i64 %mul, %mul5
314 %mul6 = mul nsw i64 %M, 9
315 %mul7 = mul nsw i64 %mul6, %N
316 %add8 = add nsw i64 %add, %mul7
David Blaikie79e6c742015-02-27 19:29:02 +0000317 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add8
Sebastian Pop59b61b92012-10-11 07:32:34 +0000318 store i32 %conv, i32* %arrayidx, align 4
319 %mul9 = mul nsw i64 %i.03, 15
320 %mul10 = mul nsw i64 %j.02, 20
321 %mul11 = mul nsw i64 %mul10, %M
322 %add12 = add nsw i64 %mul9, %mul11
323 %mul13 = mul nsw i64 %N, 21
324 %mul14 = mul nsw i64 %mul13, %M
325 %sub = sub nsw i64 %add12, %mul14
326 %add15 = add nsw i64 %sub, 5
David Blaikie79e6c742015-02-27 19:29:02 +0000327 %arrayidx16 = getelementptr inbounds i32, i32* %A, i64 %add15
David Blaikiea79ac142015-02-27 21:17:42 +0000328 %0 = load i32, i32* %arrayidx16, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000329 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.11, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000330 store i32 %0, i32* %B.addr.11, align 4
331 %inc = add nsw i64 %j.02, 1
332 %exitcond = icmp ne i64 %inc, 100
333 br i1 %exitcond, label %for.body3, label %for.inc17
334
335for.inc17: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000336 %scevgep = getelementptr i32, i32* %B.addr.04, i64 100
Sebastian Pop59b61b92012-10-11 07:32:34 +0000337 %inc18 = add nsw i64 %i.03, 1
338 %exitcond5 = icmp ne i64 %inc18, 100
339 br i1 %exitcond5, label %for.cond1.preheader, label %for.end19
340
341for.end19: ; preds = %for.inc17
342 ret void
343}
344
345
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000346;; for (long int i = 0; i < n; i++)
347;; for (long int j = 0; j < n; j++) {
348;; A[2*i][4*j] = i;
349;; *B++ = A[8*i][6*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000350
351define void @gcd6(i64 %n, i32* %A, i32* %B) nounwind uwtable ssp {
352entry:
353 %cmp4 = icmp sgt i64 %n, 0
354 br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end12
355
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000356; DELIN-LABEL: gcd6
David Greend143c652018-06-21 11:53:16 +0000357; DELIN: da analyze - output [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000358; DELIN: da analyze - none!
Sebastian Popf05ba892014-02-21 18:15:18 +0000359; DELIN: da analyze - confused!
David Greend143c652018-06-21 11:53:16 +0000360; DELIN: da analyze - input [* *]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000361; DELIN: da analyze - confused!
362; DELIN: da analyze - output [* *]!
363
Sebastian Pop59b61b92012-10-11 07:32:34 +0000364for.cond1.preheader.preheader: ; preds = %entry
365 br label %for.cond1.preheader
366
367for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc10
368 %i.06 = phi i64 [ %inc11, %for.inc10 ], [ 0, %for.cond1.preheader.preheader ]
369 %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc10 ], [ %B, %for.cond1.preheader.preheader ]
370 %cmp21 = icmp sgt i64 %n, 0
371 br i1 %cmp21, label %for.body3.preheader, label %for.inc10
372
373for.body3.preheader: ; preds = %for.cond1.preheader
374 br label %for.body3
375
376for.body3: ; preds = %for.body3.preheader, %for.body3
377 %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]
378 %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
379 %conv = trunc i64 %i.06 to i32
380 %mul = shl nsw i64 %j.03, 2
381 %mul4 = shl nsw i64 %i.06, 1
382 %0 = mul nsw i64 %mul4, %n
383 %arrayidx.sum = add i64 %0, %mul
David Blaikie79e6c742015-02-27 19:29:02 +0000384 %arrayidx5 = getelementptr inbounds i32, i32* %A, i64 %arrayidx.sum
Sebastian Pop59b61b92012-10-11 07:32:34 +0000385 store i32 %conv, i32* %arrayidx5, align 4
386 %mul6 = mul nsw i64 %j.03, 6
387 %add7 = or i64 %mul6, 1
388 %mul7 = shl nsw i64 %i.06, 3
389 %1 = mul nsw i64 %mul7, %n
390 %arrayidx8.sum = add i64 %1, %add7
David Blaikie79e6c742015-02-27 19:29:02 +0000391 %arrayidx9 = getelementptr inbounds i32, i32* %A, i64 %arrayidx8.sum
David Blaikiea79ac142015-02-27 21:17:42 +0000392 %2 = load i32, i32* %arrayidx9, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000393 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000394 store i32 %2, i32* %B.addr.12, align 4
395 %inc = add nsw i64 %j.03, 1
396 %exitcond = icmp ne i64 %inc, %n
397 br i1 %exitcond, label %for.body3, label %for.inc10.loopexit
398
399for.inc10.loopexit: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000400 %scevgep = getelementptr i32, i32* %B.addr.05, i64 %n
Sebastian Pop59b61b92012-10-11 07:32:34 +0000401 br label %for.inc10
402
403for.inc10: ; preds = %for.inc10.loopexit, %for.cond1.preheader
404 %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc10.loopexit ]
405 %inc11 = add nsw i64 %i.06, 1
406 %exitcond8 = icmp ne i64 %inc11, %n
407 br i1 %exitcond8, label %for.cond1.preheader, label %for.end12.loopexit
408
409for.end12.loopexit: ; preds = %for.inc10
410 br label %for.end12
411
412for.end12: ; preds = %for.end12.loopexit, %entry
413 ret void
414}
415
416
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000417;; for (int i = 0; i < n; i++)
418;; for (int j = 0; j < n; j++) {
419;; A[2*i][4*j] = i;
420;; *B++ = A[8*i][6*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000421
422define void @gcd7(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
423entry:
424 %0 = zext i32 %n to i64
425 %cmp4 = icmp sgt i32 %n, 0
426 br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end15
427
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000428; DELIN-LABEL: gcd7
Sebastian Popf05ba892014-02-21 18:15:18 +0000429; DELIN: da analyze - output [* *]!
430; DELIN: da analyze - flow [* *|<]!
431; DELIN: da analyze - confused!
432; DELIN: da analyze - input [* *]!
433; DELIN: da analyze - confused!
434; DELIN: da analyze - output [* *]!
435
Sebastian Pop59b61b92012-10-11 07:32:34 +0000436for.cond1.preheader.preheader: ; preds = %entry
437 br label %for.cond1.preheader
438
439for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc13
440 %indvars.iv8 = phi i64 [ 0, %for.cond1.preheader.preheader ], [ %indvars.iv.next9, %for.inc13 ]
441 %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
442 %1 = add i32 %n, -1
443 %2 = zext i32 %1 to i64
444 %3 = add i64 %2, 1
445 %cmp21 = icmp sgt i32 %n, 0
446 br i1 %cmp21, label %for.body3.preheader, label %for.inc13
447
448for.body3.preheader: ; preds = %for.cond1.preheader
449 br label %for.body3
450
451for.body3: ; preds = %for.body3.preheader, %for.body3
452 %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]
453 %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
454 %4 = trunc i64 %indvars.iv to i32
455 %mul = shl nsw i32 %4, 2
456 %idxprom = sext i32 %mul to i64
457 %5 = trunc i64 %indvars.iv8 to i32
458 %mul4 = shl nsw i32 %5, 1
459 %idxprom5 = sext i32 %mul4 to i64
460 %6 = mul nsw i64 %idxprom5, %0
461 %arrayidx.sum = add i64 %6, %idxprom
David Blaikie79e6c742015-02-27 19:29:02 +0000462 %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %arrayidx.sum
Sebastian Pop59b61b92012-10-11 07:32:34 +0000463 %7 = trunc i64 %indvars.iv8 to i32
464 store i32 %7, i32* %arrayidx6, align 4
465 %8 = trunc i64 %indvars.iv to i32
466 %mul7 = mul nsw i32 %8, 6
467 %add7 = or i32 %mul7, 1
468 %idxprom8 = sext i32 %add7 to i64
469 %9 = trunc i64 %indvars.iv8 to i32
470 %mul9 = shl nsw i32 %9, 3
471 %idxprom10 = sext i32 %mul9 to i64
472 %10 = mul nsw i64 %idxprom10, %0
473 %arrayidx11.sum = add i64 %10, %idxprom8
David Blaikie79e6c742015-02-27 19:29:02 +0000474 %arrayidx12 = getelementptr inbounds i32, i32* %A, i64 %arrayidx11.sum
David Blaikiea79ac142015-02-27 21:17:42 +0000475 %11 = load i32, i32* %arrayidx12, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000476 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000477 store i32 %11, i32* %B.addr.12, align 4
478 %indvars.iv.next = add i64 %indvars.iv, 1
479 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
480 %exitcond = icmp ne i32 %lftr.wideiv, %n
481 br i1 %exitcond, label %for.body3, label %for.inc13.loopexit
482
483for.inc13.loopexit: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000484 %scevgep = getelementptr i32, i32* %B.addr.05, i64 %3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000485 br label %for.inc13
486
487for.inc13: ; preds = %for.inc13.loopexit, %for.cond1.preheader
488 %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
489 %indvars.iv.next9 = add i64 %indvars.iv8, 1
490 %lftr.wideiv10 = trunc i64 %indvars.iv.next9 to i32
491 %exitcond11 = icmp ne i32 %lftr.wideiv10, %n
492 br i1 %exitcond11, label %for.cond1.preheader, label %for.end15.loopexit
493
494for.end15.loopexit: ; preds = %for.inc13
495 br label %for.end15
496
497for.end15: ; preds = %for.end15.loopexit, %entry
498 ret void
499}
500
501
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000502;; for (int i = 0; i < n; i++)
503;; for (int j = 0; j < n; j++) {
504;; A[n*2*i + 4*j] = i;
505;; *B++ = A[n*8*i + 6*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000506
507define void @gcd8(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
508entry:
509 %cmp4 = icmp sgt i32 %n, 0
510 br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end15
511
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000512; DELIN-LABEL: gcd8
Sebastian Popf05ba892014-02-21 18:15:18 +0000513; DELIN: da analyze - output [* *]!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000514; DELIN: da analyze - flow [* *|<]!
Sebastian Popf05ba892014-02-21 18:15:18 +0000515; DELIN: da analyze - confused!
516; DELIN: da analyze - input [* *]!
517; DELIN: da analyze - confused!
518; DELIN: da analyze - output [* *]!
519
Sebastian Pop59b61b92012-10-11 07:32:34 +0000520for.cond1.preheader.preheader: ; preds = %entry
521 br label %for.cond1.preheader
522
523for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc13
524 %i.06 = phi i32 [ %inc14, %for.inc13 ], [ 0, %for.cond1.preheader.preheader ]
525 %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
526 %0 = add i32 %n, -1
527 %1 = zext i32 %0 to i64
528 %2 = add i64 %1, 1
529 %cmp21 = icmp sgt i32 %n, 0
530 br i1 %cmp21, label %for.body3.preheader, label %for.inc13
531
532for.body3.preheader: ; preds = %for.cond1.preheader
533 br label %for.body3
534
535for.body3: ; preds = %for.body3.preheader, %for.body3
536 %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]
537 %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
538 %mul = shl nsw i32 %n, 1
539 %mul4 = mul nsw i32 %mul, %i.06
540 %3 = trunc i64 %indvars.iv to i32
541 %mul5 = shl nsw i32 %3, 2
542 %add = add nsw i32 %mul4, %mul5
543 %idxprom = sext i32 %add to i64
David Blaikie79e6c742015-02-27 19:29:02 +0000544 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %idxprom
Sebastian Pop59b61b92012-10-11 07:32:34 +0000545 store i32 %i.06, i32* %arrayidx, align 4
546 %mul6 = shl nsw i32 %n, 3
547 %mul7 = mul nsw i32 %mul6, %i.06
548 %4 = trunc i64 %indvars.iv to i32
549 %mul8 = mul nsw i32 %4, 6
550 %add9 = add nsw i32 %mul7, %mul8
551 %add10 = or i32 %add9, 1
552 %idxprom11 = sext i32 %add10 to i64
David Blaikie79e6c742015-02-27 19:29:02 +0000553 %arrayidx12 = getelementptr inbounds i32, i32* %A, i64 %idxprom11
David Blaikiea79ac142015-02-27 21:17:42 +0000554 %5 = load i32, i32* %arrayidx12, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000555 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000556 store i32 %5, i32* %B.addr.12, align 4
557 %indvars.iv.next = add i64 %indvars.iv, 1
558 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
559 %exitcond = icmp ne i32 %lftr.wideiv, %n
560 br i1 %exitcond, label %for.body3, label %for.inc13.loopexit
561
562for.inc13.loopexit: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000563 %scevgep = getelementptr i32, i32* %B.addr.05, i64 %2
Sebastian Pop59b61b92012-10-11 07:32:34 +0000564 br label %for.inc13
565
566for.inc13: ; preds = %for.inc13.loopexit, %for.cond1.preheader
567 %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
568 %inc14 = add nsw i32 %i.06, 1
569 %exitcond7 = icmp ne i32 %inc14, %n
570 br i1 %exitcond7, label %for.cond1.preheader, label %for.end15.loopexit
571
572for.end15.loopexit: ; preds = %for.inc13
573 br label %for.end15
574
575for.end15: ; preds = %for.end15.loopexit, %entry
576 ret void
577}
578
579
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000580;; for (unsigned i = 0; i < n; i++)
581;; for (unsigned j = 0; j < n; j++) {
582;; A[2*i][4*j] = i;
583;; *B++ = A[8*i][6*j + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000584
585define void @gcd9(i32 %n, i32* %A, i32* %B) nounwind uwtable ssp {
586entry:
587 %0 = zext i32 %n to i64
588 %cmp4 = icmp eq i32 %n, 0
589 br i1 %cmp4, label %for.end15, label %for.cond1.preheader.preheader
590
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000591; DELIN-LABEL: gcd9
Sebastian Popf05ba892014-02-21 18:15:18 +0000592; DELIN: da analyze - output [* *]!
593; DELIN: da analyze - flow [* *|<]!
594; DELIN: da analyze - confused!
595; DELIN: da analyze - input [* *]!
596; DELIN: da analyze - confused!
597; DELIN: da analyze - output [* *]!
598
Sebastian Pop59b61b92012-10-11 07:32:34 +0000599for.cond1.preheader.preheader: ; preds = %entry
600 br label %for.cond1.preheader
601
602for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc13
603 %indvars.iv8 = phi i64 [ 0, %for.cond1.preheader.preheader ], [ %indvars.iv.next9, %for.inc13 ]
604 %B.addr.05 = phi i32* [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]
605 %1 = add i32 %n, -1
606 %2 = zext i32 %1 to i64
607 %3 = add i64 %2, 1
608 %cmp21 = icmp eq i32 %n, 0
609 br i1 %cmp21, label %for.inc13, label %for.body3.preheader
610
611for.body3.preheader: ; preds = %for.cond1.preheader
612 br label %for.body3
613
614for.body3: ; preds = %for.body3.preheader, %for.body3
615 %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]
616 %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]
617 %4 = trunc i64 %indvars.iv to i32
618 %mul = shl i32 %4, 2
619 %idxprom = zext i32 %mul to i64
620 %5 = trunc i64 %indvars.iv8 to i32
621 %mul4 = shl i32 %5, 1
622 %idxprom5 = zext i32 %mul4 to i64
623 %6 = mul nsw i64 %idxprom5, %0
624 %arrayidx.sum = add i64 %6, %idxprom
David Blaikie79e6c742015-02-27 19:29:02 +0000625 %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %arrayidx.sum
Sebastian Pop59b61b92012-10-11 07:32:34 +0000626 %7 = trunc i64 %indvars.iv8 to i32
627 store i32 %7, i32* %arrayidx6, align 4
628 %8 = trunc i64 %indvars.iv to i32
629 %mul7 = mul i32 %8, 6
630 %add7 = or i32 %mul7, 1
631 %idxprom8 = zext i32 %add7 to i64
632 %9 = trunc i64 %indvars.iv8 to i32
633 %mul9 = shl i32 %9, 3
634 %idxprom10 = zext i32 %mul9 to i64
635 %10 = mul nsw i64 %idxprom10, %0
636 %arrayidx11.sum = add i64 %10, %idxprom8
David Blaikie79e6c742015-02-27 19:29:02 +0000637 %arrayidx12 = getelementptr inbounds i32, i32* %A, i64 %arrayidx11.sum
David Blaikiea79ac142015-02-27 21:17:42 +0000638 %11 = load i32, i32* %arrayidx12, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000639 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000640 store i32 %11, i32* %B.addr.12, align 4
641 %indvars.iv.next = add i64 %indvars.iv, 1
642 %lftr.wideiv = trunc i64 %indvars.iv.next to i32
643 %exitcond = icmp ne i32 %lftr.wideiv, %n
644 br i1 %exitcond, label %for.body3, label %for.inc13.loopexit
645
646for.inc13.loopexit: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000647 %scevgep = getelementptr i32, i32* %B.addr.05, i64 %3
Sebastian Pop59b61b92012-10-11 07:32:34 +0000648 br label %for.inc13
649
650for.inc13: ; preds = %for.inc13.loopexit, %for.cond1.preheader
651 %B.addr.1.lcssa = phi i32* [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]
652 %indvars.iv.next9 = add i64 %indvars.iv8, 1
653 %lftr.wideiv10 = trunc i64 %indvars.iv.next9 to i32
654 %exitcond11 = icmp ne i32 %lftr.wideiv10, %n
655 br i1 %exitcond11, label %for.cond1.preheader, label %for.end15.loopexit
656
657for.end15.loopexit: ; preds = %for.inc13
658 br label %for.end15
659
660for.end15: ; preds = %for.end15.loopexit, %entry
661 ret void
662}