blob: 709567105ba3703ce59ffd578cb93d7a775d8fa2 [file] [log] [blame]
David Greend143c652018-06-21 11:53:16 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
Sebastian Pop59b61b92012-10-11 07:32:34 +00002
Sebastian Pop59b61b92012-10-11 07:32:34 +00003target 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"
4target triple = "x86_64-apple-macosx10.6.0"
5
6
Benjamin Kramer3eb15632012-11-13 12:12:02 +00007;; for (long int i = 0; i < 50; i++) {
8;; A[i][i] = i;
9;; *B++ = A[i + 10][i + 9];
Sebastian Pop59b61b92012-10-11 07:32:34 +000010
11define void @couple0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
12entry:
13 br label %for.body
14
Sebastian Popbf6e1c22018-03-06 21:55:59 +000015; CHECK-LABEL: couple0
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000016; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000017; CHECK: da analyze - none!
18; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000019; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000020; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000021; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000022
23for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000024 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
25 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
26 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000027 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +000028 store i32 %conv, i32* %arrayidx1, align 4
29 %add = add nsw i64 %i.02, 9
30 %add2 = add nsw i64 %i.02, 10
David Blaikie79e6c742015-02-27 19:29:02 +000031 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +000032 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000033 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000034 store i32 %0, i32* %B.addr.01, align 4
35 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000036 %exitcond = icmp ne i64 %inc, 50
37 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000038
39for.end: ; preds = %for.body
40 ret void
41}
42
43
Benjamin Kramer3eb15632012-11-13 12:12:02 +000044;; for (long int i = 0; i < 50; i++) {
45;; A[i][i] = i;
46;; *B++ = A[i + 9][i + 9];
Sebastian Pop59b61b92012-10-11 07:32:34 +000047
48define void @couple1([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
49entry:
50 br label %for.body
51
Sebastian Popbf6e1c22018-03-06 21:55:59 +000052; CHECK-LABEL: couple1
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000053; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000054; CHECK: da analyze - consistent flow [-9]!
55; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000056; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000057; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000058; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000059
60for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000061 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
62 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
63 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000064 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +000065 store i32 %conv, i32* %arrayidx1, align 4
66 %add = add nsw i64 %i.02, 9
67 %add2 = add nsw i64 %i.02, 9
David Blaikie79e6c742015-02-27 19:29:02 +000068 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +000069 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000070 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000071 store i32 %0, i32* %B.addr.01, align 4
72 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000073 %exitcond = icmp ne i64 %inc, 50
74 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000075
76for.end: ; preds = %for.body
77 ret void
78}
79
80
Benjamin Kramer3eb15632012-11-13 12:12:02 +000081;; for (long int i = 0; i < 50; i++) {
82;; A[3*i - 6][3*i - 6] = i;
83;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +000084
85define void @couple2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
86entry:
87 br label %for.body
88
Sebastian Popbf6e1c22018-03-06 21:55:59 +000089; CHECK-LABEL: couple2
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000090; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +000091; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000092; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000093; CHECK: da analyze - none!
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
97for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000098 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
99 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
100 %conv = trunc i64 %i.02 to i32
101 %mul = mul nsw i64 %i.02, 3
102 %sub = add nsw i64 %mul, -6
103 %mul1 = mul nsw i64 %i.02, 3
104 %sub2 = add nsw i64 %mul1, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000105 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000106 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000107 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000108 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000109 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000110 store i32 %0, i32* %B.addr.01, align 4
111 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000112 %exitcond = icmp ne i64 %inc, 50
113 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000114
115for.end: ; preds = %for.body
116 ret void
117}
118
119
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000120;; for (long int i = 0; i < 50; i++) {
121;; A[3*i - 6][3*i - 5] = i;
122;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000123
124define void @couple3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
125entry:
126 br label %for.body
127
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000128; CHECK-LABEL: couple3
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000129; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000130; CHECK: da analyze - none!
131; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000132; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000133; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000134; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000135
136for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000137 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
138 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
139 %conv = trunc i64 %i.02 to i32
140 %mul = mul nsw i64 %i.02, 3
141 %sub = add nsw i64 %mul, -5
142 %mul1 = mul nsw i64 %i.02, 3
143 %sub2 = add nsw i64 %mul1, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000144 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000145 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000146 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000147 %0 = load i32, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000148 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000149 store i32 %0, i32* %B.addr.01, align 4
150 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000151 %exitcond = icmp ne i64 %inc, 50
152 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000153
154for.end: ; preds = %for.body
155 ret void
156}
157
158
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000159;; for (long int i = 0; i < 50; i++) {
160;; A[3*i - 6][3*i - n] = i;
161;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000162
163define void @couple4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
164entry:
165 br label %for.body
166
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000167; CHECK-LABEL: couple4
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000168; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000169; CHECK: da analyze - flow [*|<]!
170; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000171; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000172; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000173; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000174
175for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000176 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
177 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
178 %conv = trunc i64 %i.02 to i32
179 %mul = mul nsw i64 %i.02, 3
180 %conv1 = sext i32 %n to i64
181 %sub = sub nsw i64 %mul, %conv1
182 %mul2 = mul nsw i64 %i.02, 3
183 %sub3 = add nsw i64 %mul2, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000184 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub3, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000185 store i32 %conv, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000186 %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000187 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000188 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000189 store i32 %0, i32* %B.addr.01, align 4
190 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000191 %exitcond = icmp ne i64 %inc, 50
192 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000193
194for.end: ; preds = %for.body
195 ret void
196}
197
198
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000199;; for (long int i = 0; i < 50; i++) {
200;; A[3*i - n + 1][3*i - n] = i;
201;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000202
203define void @couple5([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
204entry:
205 br label %for.body
206
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000207; CHECK-LABEL: couple5
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000208; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000209; CHECK: da analyze - none!
210; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000211; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000212; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000213; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000214
215for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000216 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
217 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
218 %conv = trunc i64 %i.02 to i32
219 %mul = mul nsw i64 %i.02, 3
220 %conv1 = sext i32 %n to i64
221 %sub = sub nsw i64 %mul, %conv1
222 %mul2 = mul nsw i64 %i.02, 3
223 %conv3 = sext i32 %n to i64
224 %sub4 = sub nsw i64 %mul2, %conv3
225 %add = add nsw i64 %sub4, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000226 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000227 store i32 %conv, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000228 %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000229 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000230 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000231 store i32 %0, i32* %B.addr.01, align 4
232 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000233 %exitcond = icmp ne i64 %inc, 50
234 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000235
236for.end: ; preds = %for.body
237 ret void
238}
239
240
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000241;; for (long int i = 0; i < 50; i++) {
242;; A[i][3*i - 6] = i;
243;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000244
245define void @couple6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
246entry:
247 br label %for.body
248
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000249; CHECK-LABEL: couple6
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000250; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000251; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000252; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000253; CHECK: da analyze - none!
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
257for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000258 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
259 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
260 %conv = trunc i64 %i.02 to i32
261 %mul = mul nsw i64 %i.02, 3
262 %sub = add nsw i64 %mul, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000263 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000264 store i32 %conv, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000265 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000266 %0 = load i32, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000267 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000268 store i32 %0, i32* %B.addr.01, align 4
269 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000270 %exitcond = icmp ne i64 %inc, 50
271 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000272
273for.end: ; preds = %for.body
274 ret void
275}
276
277
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000278;; for (long int i = 0; i < 50; i++) {
279;; A[i][3*i - 5] = i;
280;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000281
282define void @couple7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
283entry:
284 br label %for.body
285
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000286; CHECK-LABEL: couple7
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000287; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000288; CHECK: da analyze - none!
289; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000290; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000291; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000292; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000293
294for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000295 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
296 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
297 %conv = trunc i64 %i.02 to i32
298 %mul = mul nsw i64 %i.02, 3
299 %sub = add nsw i64 %mul, -5
David Blaikie79e6c742015-02-27 19:29:02 +0000300 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000301 store i32 %conv, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000302 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000303 %0 = load i32, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000304 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000305 store i32 %0, i32* %B.addr.01, align 4
306 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000307 %exitcond = icmp ne i64 %inc, 50
308 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000309
310for.end: ; preds = %for.body
311 ret void
312}
313
314
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000315;; for (long int i = 0; i <= 15; i++) {
316;; A[3*i - 18][3 - i] = i;
317;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000318
319define void @couple8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
320entry:
321 br label %for.body
322
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000323; CHECK-LABEL: couple8
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000324; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000325; CHECK: da analyze - none!
326; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000327; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000328; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000329; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000330
331for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000332 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
333 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
334 %conv = trunc i64 %i.02 to i32
335 %sub = sub nsw i64 3, %i.02
336 %mul = mul nsw i64 %i.02, 3
337 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000338 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000339 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000340 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000341 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000342 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000343 store i32 %0, i32* %B.addr.01, align 4
344 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000345 %exitcond = icmp ne i64 %inc, 16
346 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000347
348for.end: ; preds = %for.body
349 ret void
350}
351
352
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000353;; for (long int i = 0; i <= 15; i++) {
354;; A[3*i - 18][2 - i] = i;
355;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000356
357define void @couple9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
358entry:
359 br label %for.body
360
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000361; CHECK-LABEL: couple9
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000362; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000363; CHECK: da analyze - none!
364; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000365; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000366; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000367; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000368
369for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000370 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
371 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
372 %conv = trunc i64 %i.02 to i32
373 %sub = sub nsw i64 2, %i.02
374 %mul = mul nsw i64 %i.02, 3
375 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000376 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000377 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000378 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000379 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000380 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000381 store i32 %0, i32* %B.addr.01, align 4
382 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000383 %exitcond = icmp ne i64 %inc, 16
384 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000385
386for.end: ; preds = %for.body
387 ret void
388}
389
390
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000391;; for (long int i = 0; i <= 15; i++) {
392;; A[3*i - 18][6 - i] = i;
393;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000394
395define void @couple10([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
396entry:
397 br label %for.body
398
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000399; CHECK-LABEL: couple10
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000400; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000401; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000402; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000403; CHECK: da analyze - none!
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
407for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000408 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
409 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
410 %conv = trunc i64 %i.02 to i32
411 %sub = sub nsw i64 6, %i.02
412 %mul = mul nsw i64 %i.02, 3
413 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000414 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000415 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000416 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000417 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000418 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000419 store i32 %0, i32* %B.addr.01, align 4
420 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000421 %exitcond = icmp ne i64 %inc, 16
422 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000423
424for.end: ; preds = %for.body
425 ret void
426}
427
428
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000429;; for (long int i = 0; i <= 15; i++) {
430;; A[3*i - 18][18 - i] = i;
431;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000432
433define void @couple11([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
434entry:
435 br label %for.body
436
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000437; CHECK-LABEL: couple11
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000438; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000439; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000440; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000441; CHECK: da analyze - none!
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
445for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000446 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
447 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
448 %conv = trunc i64 %i.02 to i32
449 %sub = sub nsw i64 18, %i.02
450 %mul = mul nsw i64 %i.02, 3
451 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000452 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000453 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000454 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000455 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000456 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000457 store i32 %0, i32* %B.addr.01, align 4
458 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000459 %exitcond = icmp ne i64 %inc, 16
460 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000461
462for.end: ; preds = %for.body
463 ret void
464}
465
466
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000467;; for (long int i = 0; i <= 12; i++) {
468;; A[3*i - 18][22 - i] = i;
469;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000470
471define void @couple12([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
472entry:
473 br label %for.body
474
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000475; CHECK-LABEL: couple12
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000476; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000477; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000478; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000479; CHECK: da analyze - none!
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
483for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000484 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
485 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
486 %conv = trunc i64 %i.02 to i32
487 %sub = sub nsw i64 22, %i.02
488 %mul = mul nsw i64 %i.02, 3
489 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000490 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000491 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000492 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000493 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000494 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000495 store i32 %0, i32* %B.addr.01, align 4
496 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000497 %exitcond = icmp ne i64 %inc, 13
498 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000499
500for.end: ; preds = %for.body
501 ret void
502}
503
504
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000505;; for (long int i = 0; i < 12; i++) {
506;; A[3*i - 18][22 - i] = i;
507;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000508
509define void @couple13([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
510entry:
511 br label %for.body
512
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000513; CHECK-LABEL: couple13
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000514; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000515; CHECK: da analyze - none!
516; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000517; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000518; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000519; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000520
521for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000522 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
523 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
524 %conv = trunc i64 %i.02 to i32
525 %sub = sub nsw i64 22, %i.02
526 %mul = mul nsw i64 %i.02, 3
527 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000528 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000529 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000530 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
David Blaikiea79ac142015-02-27 21:17:42 +0000531 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000532 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000533 store i32 %0, i32* %B.addr.01, align 4
534 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000535 %exitcond = icmp ne i64 %inc, 12
536 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000537
538for.end: ; preds = %for.body
539 ret void
540}
541
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000542;; for (long int i = 0; i < 100; i++) {
543;; A[3*i - 18][18 - i][i] = i;
544;; *B++ = A[i][i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000545
546define void @couple14([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
547entry:
548 br label %for.body
549
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000550; CHECK-LABEL: couple14
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000551; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000552; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000553; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000554; CHECK: da analyze - none!
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
558for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000559 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
560 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
561 %conv = trunc i64 %i.02 to i32
562 %sub = sub nsw i64 18, %i.02
563 %mul = mul nsw i64 %i.02, 3
564 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000565 %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 +0000566 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000567 %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 +0000568 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000569 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000570 store i32 %0, i32* %B.addr.01, align 4
571 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000572 %exitcond = icmp ne i64 %inc, 100
573 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000574
575for.end: ; preds = %for.body
576 ret void
577}
578
579
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000580;; for (long int i = 0; i < 100; i++) {
581;; A[3*i - 18][22 - i][i] = i;
582;; *B++ = A[i][i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000583
584define void @couple15([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
585entry:
586 br label %for.body
587
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000588; CHECK-LABEL: couple15
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000589; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000590; CHECK: da analyze - none!
591; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000592; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000593; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000594; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000595
596for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000597 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
598 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
599 %conv = trunc i64 %i.02 to i32
600 %sub = sub nsw i64 22, %i.02
601 %mul = mul nsw i64 %i.02, 3
602 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000603 %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 +0000604 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000605 %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 +0000606 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000607 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000608 store i32 %0, i32* %B.addr.01, align 4
609 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000610 %exitcond = icmp ne i64 %inc, 100
611 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000612
613for.end: ; preds = %for.body
614 ret void
615}
David Green2911b3a2018-05-31 14:55:29 +0000616
617;; for(int i = 0; i < N; i+=1) {
618;; A[M*N*i] = 1;
619;; for(int j = 0; j < M; j+=1)
620;; A[M*N + M*i + j] = 2;
621
622define void @couple_weakzerosiv(i32* noalias nocapture %A, i64 %N, i64 %M) {
623entry:
624 %cmp29 = icmp sgt i64 %N, 0
625 br i1 %cmp29, label %for.body.lr.ph, label %for.cond.cleanup
626
627; CHECK-LABEL: couple_weakzerosiv
628; CHECK: da analyze - none!
629; CHECK: da analyze - output [p>]!
630; CHECK: da analyze - none!
631
632for.body.lr.ph: ; preds = %entry
633 %mul = mul nsw i64 %M, %N
634 br label %for.body.us
635
636for.body.us: ; preds = %for.body.lr.ph, %for.cond.cleanup4.loopexit.us
637 %i.030.us = phi i64 [ %add12.us, %for.cond.cleanup4.loopexit.us ], [ 0, %for.body.lr.ph ]
638 %mul1.us = mul nsw i64 %i.030.us, %mul
639 %arrayidx.us = getelementptr inbounds i32, i32* %A, i64 %mul1.us
640 store i32 1, i32* %arrayidx.us, align 4
641 %mul6.us = mul nsw i64 %i.030.us, %M
642 %add.us = add i64 %mul6.us, %mul
643 br label %for.body5.us
644
645for.body5.us: ; preds = %for.body5.us, %for.body.us
646 %j.028.us = phi i64 [ 0, %for.body.us ], [ %add10.us, %for.body5.us ]
647 %add8.us = add i64 %add.us, %j.028.us
648 %arrayidx9.us = getelementptr inbounds i32, i32* %A, i64 %add8.us
649 store i32 2, i32* %arrayidx9.us, align 4
650 %add10.us = add nuw nsw i64 %j.028.us, 1
651 %exitcond.us = icmp eq i64 %add10.us, %M
652 br i1 %exitcond.us, label %for.cond.cleanup4.loopexit.us, label %for.body5.us
653
654for.cond.cleanup4.loopexit.us: ; preds = %for.body5.us
655 %add12.us = add nuw nsw i64 %i.030.us, 1
656 %exitcond31.us = icmp eq i64 %add12.us, %N
657 br i1 %exitcond31.us, label %for.cond.cleanup, label %for.body.us
658
659for.cond.cleanup: ; preds = %for.cond.cleanup4.loopexit.us, %entry
660 ret void
661}