blob: 0480087145b5ef07a9a46122c4fdaad6e6c02cc0 [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
David Greend143c652018-06-21 11:53:16 +00003; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
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
Benjamin Kramer3eb15632012-11-13 12:12:02 +00009;; for (long int i = 0; i < 50; i++) {
10;; A[i][i] = i;
11;; *B++ = A[i + 10][i + 9];
Sebastian Pop59b61b92012-10-11 07:32:34 +000012
13define void @couple0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
14entry:
15 br label %for.body
16
Sebastian Popbf6e1c22018-03-06 21:55:59 +000017; CHECK-LABEL: couple0
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: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000026 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
27 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
28 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000029 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +000030 store i32 %conv, i32* %arrayidx1, align 4
31 %add = add nsw i64 %i.02, 9
32 %add2 = add nsw i64 %i.02, 10
David Blaikie79e6c742015-02-27 19:29:02 +000033 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +000034 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000035 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000036 store i32 %0, i32* %B.addr.01, align 4
37 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000038 %exitcond = icmp ne i64 %inc, 50
39 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000040
41for.end: ; preds = %for.body
42 ret void
43}
44
45
Benjamin Kramer3eb15632012-11-13 12:12:02 +000046;; for (long int i = 0; i < 50; i++) {
47;; A[i][i] = i;
48;; *B++ = A[i + 9][i + 9];
Sebastian Pop59b61b92012-10-11 07:32:34 +000049
50define void @couple1([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
51entry:
52 br label %for.body
53
Sebastian Popbf6e1c22018-03-06 21:55:59 +000054; CHECK-LABEL: couple1
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000055; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000056; CHECK: da analyze - consistent flow [-9]!
57; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000058; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000059; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000060; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000061
62for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000063 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
64 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
65 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000066 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +000067 store i32 %conv, i32* %arrayidx1, align 4
68 %add = add nsw i64 %i.02, 9
69 %add2 = add nsw i64 %i.02, 9
David Blaikie79e6c742015-02-27 19:29:02 +000070 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +000071 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000072 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000073 store i32 %0, i32* %B.addr.01, align 4
74 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000075 %exitcond = icmp ne i64 %inc, 50
76 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000077
78for.end: ; preds = %for.body
79 ret void
80}
81
82
Benjamin Kramer3eb15632012-11-13 12:12:02 +000083;; for (long int i = 0; i < 50; i++) {
84;; A[3*i - 6][3*i - 6] = i;
85;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +000086
87define void @couple2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
88entry:
89 br label %for.body
90
Sebastian Popbf6e1c22018-03-06 21:55:59 +000091; CHECK-LABEL: couple2
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000092; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +000093; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000094; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000095; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000096; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000097; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000098
99for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000100 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
101 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
102 %conv = trunc i64 %i.02 to i32
103 %mul = mul nsw i64 %i.02, 3
104 %sub = add nsw i64 %mul, -6
105 %mul1 = mul nsw i64 %i.02, 3
106 %sub2 = add nsw i64 %mul1, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000107 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000108 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000109 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000110 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000111 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000112 store i32 %0, i32* %B.addr.01, align 4
113 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000114 %exitcond = icmp ne i64 %inc, 50
115 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000116
117for.end: ; preds = %for.body
118 ret void
119}
120
121
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000122;; for (long int i = 0; i < 50; i++) {
123;; A[3*i - 6][3*i - 5] = i;
124;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000125
126define void @couple3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
127entry:
128 br label %for.body
129
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000130; CHECK-LABEL: couple3
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000131; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000132; CHECK: da analyze - none!
133; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000134; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000135; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000136; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000137
138for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000139 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
140 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
141 %conv = trunc i64 %i.02 to i32
142 %mul = mul nsw i64 %i.02, 3
143 %sub = add nsw i64 %mul, -5
144 %mul1 = mul nsw i64 %i.02, 3
145 %sub2 = add nsw i64 %mul1, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000146 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000147 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000148 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000149 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000150 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000151 store i32 %0, i32* %B.addr.01, align 4
152 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000153 %exitcond = icmp ne i64 %inc, 50
154 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000155
156for.end: ; preds = %for.body
157 ret void
158}
159
160
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000161;; for (long int i = 0; i < 50; i++) {
162;; A[3*i - 6][3*i - n] = i;
163;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000164
165define void @couple4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
166entry:
167 br label %for.body
168
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000169; CHECK-LABEL: couple4
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000170; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000171; CHECK: da analyze - flow [*|<]!
172; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000173; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000174; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000175; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000176
177for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000178 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
179 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
180 %conv = trunc i64 %i.02 to i32
181 %mul = mul nsw i64 %i.02, 3
182 %conv1 = sext i32 %n to i64
183 %sub = sub nsw i64 %mul, %conv1
184 %mul2 = mul nsw i64 %i.02, 3
185 %sub3 = add nsw i64 %mul2, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000186 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub3, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000187 store i32 %conv, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000188 %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000189 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000190 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000191 store i32 %0, i32* %B.addr.01, align 4
192 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000193 %exitcond = icmp ne i64 %inc, 50
194 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000195
196for.end: ; preds = %for.body
197 ret void
198}
199
200
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000201;; for (long int i = 0; i < 50; i++) {
202;; A[3*i - n + 1][3*i - n] = i;
203;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000204
205define void @couple5([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
206entry:
207 br label %for.body
208
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000209; CHECK-LABEL: couple5
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000210; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000211; CHECK: da analyze - none!
212; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000213; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000214; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000215; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000216
217for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000218 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
219 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
220 %conv = trunc i64 %i.02 to i32
221 %mul = mul nsw i64 %i.02, 3
222 %conv1 = sext i32 %n to i64
223 %sub = sub nsw i64 %mul, %conv1
224 %mul2 = mul nsw i64 %i.02, 3
225 %conv3 = sext i32 %n to i64
226 %sub4 = sub nsw i64 %mul2, %conv3
227 %add = add nsw i64 %sub4, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000228 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000229 store i32 %conv, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000230 %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000231 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000232 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000233 store i32 %0, i32* %B.addr.01, align 4
234 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000235 %exitcond = icmp ne i64 %inc, 50
236 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000237
238for.end: ; preds = %for.body
239 ret void
240}
241
242
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000243;; for (long int i = 0; i < 50; i++) {
244;; A[i][3*i - 6] = i;
245;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000246
247define void @couple6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
248entry:
249 br label %for.body
250
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000251; CHECK-LABEL: couple6
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000252; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000253; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000254; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000255; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000256; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000257; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000258
259for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000260 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
261 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
262 %conv = trunc i64 %i.02 to i32
263 %mul = mul nsw i64 %i.02, 3
264 %sub = add nsw i64 %mul, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000265 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000266 store i32 %conv, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000267 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000268 %0 = load i32, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000269 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000270 store i32 %0, i32* %B.addr.01, align 4
271 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000272 %exitcond = icmp ne i64 %inc, 50
273 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000274
275for.end: ; preds = %for.body
276 ret void
277}
278
279
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000280;; for (long int i = 0; i < 50; i++) {
281;; A[i][3*i - 5] = i;
282;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000283
284define void @couple7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
285entry:
286 br label %for.body
287
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000288; CHECK-LABEL: couple7
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000289; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000290; CHECK: da analyze - none!
291; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000292; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000293; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000294; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000295
296for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000297 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
298 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
299 %conv = trunc i64 %i.02 to i32
300 %mul = mul nsw i64 %i.02, 3
301 %sub = add nsw i64 %mul, -5
David Blaikie79e6c742015-02-27 19:29:02 +0000302 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000303 store i32 %conv, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000304 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000305 %0 = load i32, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000306 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000307 store i32 %0, i32* %B.addr.01, align 4
308 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000309 %exitcond = icmp ne i64 %inc, 50
310 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000311
312for.end: ; preds = %for.body
313 ret void
314}
315
316
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000317;; for (long int i = 0; i <= 15; i++) {
318;; A[3*i - 18][3 - i] = i;
319;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000320
321define void @couple8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
322entry:
323 br label %for.body
324
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000325; CHECK-LABEL: couple8
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000326; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000327; CHECK: da analyze - none!
328; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000329; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000330; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000331; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000332
333for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000334 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
335 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
336 %conv = trunc i64 %i.02 to i32
337 %sub = sub nsw i64 3, %i.02
338 %mul = mul nsw i64 %i.02, 3
339 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000340 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000341 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000342 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000343 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000344 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000345 store i32 %0, i32* %B.addr.01, align 4
346 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000347 %exitcond = icmp ne i64 %inc, 16
348 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000349
350for.end: ; preds = %for.body
351 ret void
352}
353
354
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000355;; for (long int i = 0; i <= 15; i++) {
356;; A[3*i - 18][2 - i] = i;
357;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000358
359define void @couple9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
360entry:
361 br label %for.body
362
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000363; CHECK-LABEL: couple9
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000364; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000365; CHECK: da analyze - none!
366; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000367; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000368; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000369; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000370
371for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000372 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
373 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
374 %conv = trunc i64 %i.02 to i32
375 %sub = sub nsw i64 2, %i.02
376 %mul = mul nsw i64 %i.02, 3
377 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000378 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000379 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000380 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000381 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000382 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000383 store i32 %0, i32* %B.addr.01, align 4
384 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000385 %exitcond = icmp ne i64 %inc, 16
386 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000387
388for.end: ; preds = %for.body
389 ret void
390}
391
392
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000393;; for (long int i = 0; i <= 15; i++) {
394;; A[3*i - 18][6 - i] = i;
395;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000396
397define void @couple10([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
398entry:
399 br label %for.body
400
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000401; CHECK-LABEL: couple10
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000402; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000403; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000404; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000405; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000406; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000407; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000408
409for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000410 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
411 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
412 %conv = trunc i64 %i.02 to i32
413 %sub = sub nsw i64 6, %i.02
414 %mul = mul nsw i64 %i.02, 3
415 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000416 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000417 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000418 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000419 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000420 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000421 store i32 %0, i32* %B.addr.01, align 4
422 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000423 %exitcond = icmp ne i64 %inc, 16
424 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000425
426for.end: ; preds = %for.body
427 ret void
428}
429
430
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000431;; for (long int i = 0; i <= 15; i++) {
432;; A[3*i - 18][18 - i] = i;
433;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000434
435define void @couple11([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
436entry:
437 br label %for.body
438
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000439; CHECK-LABEL: couple11
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000440; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000441; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000442; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000443; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000444; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000445; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000446
447for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000448 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
449 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
450 %conv = trunc i64 %i.02 to i32
451 %sub = sub nsw i64 18, %i.02
452 %mul = mul nsw i64 %i.02, 3
453 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000454 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000455 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000456 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000457 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000458 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000459 store i32 %0, i32* %B.addr.01, align 4
460 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000461 %exitcond = icmp ne i64 %inc, 16
462 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000463
464for.end: ; preds = %for.body
465 ret void
466}
467
468
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000469;; for (long int i = 0; i <= 12; i++) {
470;; A[3*i - 18][22 - i] = i;
471;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000472
473define void @couple12([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
474entry:
475 br label %for.body
476
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000477; CHECK-LABEL: couple12
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000478; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000479; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000480; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000481; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000482; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000483; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000484
485for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000486 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
487 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
488 %conv = trunc i64 %i.02 to i32
489 %sub = sub nsw i64 22, %i.02
490 %mul = mul nsw i64 %i.02, 3
491 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000492 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000493 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000494 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000495 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000496 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000497 store i32 %0, i32* %B.addr.01, align 4
498 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000499 %exitcond = icmp ne i64 %inc, 13
500 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000501
502for.end: ; preds = %for.body
503 ret void
504}
505
506
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000507;; for (long int i = 0; i < 12; i++) {
508;; A[3*i - 18][22 - i] = i;
509;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000510
511define void @couple13([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
512entry:
513 br label %for.body
514
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000515; CHECK-LABEL: couple13
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000516; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000517; CHECK: da analyze - none!
518; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000519; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000520; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000521; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000522
523for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000524 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
525 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
526 %conv = trunc i64 %i.02 to i32
527 %sub = sub nsw i64 22, %i.02
528 %mul = mul nsw i64 %i.02, 3
529 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000530 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000531 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000532 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000533 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000534 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000535 store i32 %0, i32* %B.addr.01, align 4
536 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000537 %exitcond = icmp ne i64 %inc, 12
538 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000539
540for.end: ; preds = %for.body
541 ret void
542}
543
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000544;; for (long int i = 0; i < 100; i++) {
545;; A[3*i - 18][18 - i][i] = i;
546;; *B++ = A[i][i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000547
548define void @couple14([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
549entry:
550 br label %for.body
551
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000552; CHECK-LABEL: couple14
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000553; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000554; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000555; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000556; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000557; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000558; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000559
560for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000561 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
562 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
563 %conv = trunc i64 %i.02 to i32
564 %sub = sub nsw i64 18, %i.02
565 %mul = mul nsw i64 %i.02, 3
566 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000567 %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000568 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000569 %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000570 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000571 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000572 store i32 %0, i32* %B.addr.01, align 4
573 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000574 %exitcond = icmp ne i64 %inc, 100
575 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000576
577for.end: ; preds = %for.body
578 ret void
579}
580
581
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000582;; for (long int i = 0; i < 100; i++) {
583;; A[3*i - 18][22 - i][i] = i;
584;; *B++ = A[i][i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000585
586define void @couple15([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
587entry:
588 br label %for.body
589
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000590; CHECK-LABEL: couple15
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000591; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000592; CHECK: da analyze - none!
593; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000594; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000595; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000596; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000597
598for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000599 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
600 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
601 %conv = trunc i64 %i.02 to i32
602 %sub = sub nsw i64 22, %i.02
603 %mul = mul nsw i64 %i.02, 3
604 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000605 %arrayidx3 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %sub1, i64 %sub, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000606 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000607 %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000608 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000609 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000610 store i32 %0, i32* %B.addr.01, align 4
611 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000612 %exitcond = icmp ne i64 %inc, 100
613 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000614
615for.end: ; preds = %for.body
616 ret void
617}
David Green2911b3a2018-05-31 14:55:29 +0000618
619;; for(int i = 0; i < N; i+=1) {
620;; A[M*N*i] = 1;
621;; for(int j = 0; j < M; j+=1)
622;; A[M*N + M*i + j] = 2;
623
624define void @couple_weakzerosiv(i32* noalias nocapture %A, i64 %N, i64 %M) {
625entry:
626 %cmp29 = icmp sgt i64 %N, 0
627 br i1 %cmp29, label %for.body.lr.ph, label %for.cond.cleanup
628
629; CHECK-LABEL: couple_weakzerosiv
630; CHECK: da analyze - none!
631; CHECK: da analyze - output [p>]!
632; CHECK: da analyze - none!
633
634for.body.lr.ph: ; preds = %entry
635 %mul = mul nsw i64 %M, %N
636 br label %for.body.us
637
638for.body.us: ; preds = %for.body.lr.ph, %for.cond.cleanup4.loopexit.us
639 %i.030.us = phi i64 [ %add12.us, %for.cond.cleanup4.loopexit.us ], [ 0, %for.body.lr.ph ]
640 %mul1.us = mul nsw i64 %i.030.us, %mul
641 %arrayidx.us = getelementptr inbounds i32, i32* %A, i64 %mul1.us
642 store i32 1, i32* %arrayidx.us, align 4
643 %mul6.us = mul nsw i64 %i.030.us, %M
644 %add.us = add i64 %mul6.us, %mul
645 br label %for.body5.us
646
647for.body5.us: ; preds = %for.body5.us, %for.body.us
648 %j.028.us = phi i64 [ 0, %for.body.us ], [ %add10.us, %for.body5.us ]
649 %add8.us = add i64 %add.us, %j.028.us
650 %arrayidx9.us = getelementptr inbounds i32, i32* %A, i64 %add8.us
651 store i32 2, i32* %arrayidx9.us, align 4
652 %add10.us = add nuw nsw i64 %j.028.us, 1
653 %exitcond.us = icmp eq i64 %add10.us, %M
654 br i1 %exitcond.us, label %for.cond.cleanup4.loopexit.us, label %for.body5.us
655
656for.cond.cleanup4.loopexit.us: ; preds = %for.body5.us
657 %add12.us = add nuw nsw i64 %i.030.us, 1
658 %exitcond31.us = icmp eq i64 %add12.us, %N
659 br i1 %exitcond31.us, label %for.cond.cleanup, label %for.body.us
660
661for.cond.cleanup: ; preds = %for.cond.cleanup4.loopexit.us, %entry
662 ret void
663}