blob: 03154758266f5d3c85243f8a4e9fd1c99d03c459 [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'Coupled.bc'
4target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
5target triple = "x86_64-apple-macosx10.6.0"
6
7
Benjamin Kramer3eb15632012-11-13 12:12:02 +00008;; for (long int i = 0; i < 50; i++) {
9;; A[i][i] = i;
10;; *B++ = A[i + 10][i + 9];
Sebastian Pop59b61b92012-10-11 07:32:34 +000011
12define void @couple0([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
13entry:
14 br label %for.body
15
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
Sebastian Pop59b61b92012-10-11 07:32:34 +000032 %0 = load 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
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000052; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000053; CHECK: da analyze - consistent flow [-9]!
54; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000055; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000056; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000057; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000058
59for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000060 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
61 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
62 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000063 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +000064 store i32 %conv, i32* %arrayidx1, align 4
65 %add = add nsw i64 %i.02, 9
66 %add2 = add nsw i64 %i.02, 9
David Blaikie79e6c742015-02-27 19:29:02 +000067 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add2, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000068 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000069 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000070 store i32 %0, i32* %B.addr.01, align 4
71 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000072 %exitcond = icmp ne i64 %inc, 50
73 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000074
75for.end: ; preds = %for.body
76 ret void
77}
78
79
Benjamin Kramer3eb15632012-11-13 12:12:02 +000080;; for (long int i = 0; i < 50; i++) {
81;; A[3*i - 6][3*i - 6] = i;
82;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +000083
84define void @couple2([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
85entry:
86 br label %for.body
87
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000088; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000089; CHECK: da analyze - flow [*|<]!
90; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000091; CHECK: da analyze - none!
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
95for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000096 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
97 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
98 %conv = trunc i64 %i.02 to i32
99 %mul = mul nsw i64 %i.02, 3
100 %sub = add nsw i64 %mul, -6
101 %mul1 = mul nsw i64 %i.02, 3
102 %sub2 = add nsw i64 %mul1, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000103 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000104 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000105 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000106 %0 = load i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000107 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000108 store i32 %0, i32* %B.addr.01, align 4
109 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000110 %exitcond = icmp ne i64 %inc, 50
111 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000112
113for.end: ; preds = %for.body
114 ret void
115}
116
117
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000118;; for (long int i = 0; i < 50; i++) {
119;; A[3*i - 6][3*i - 5] = i;
120;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000121
122define void @couple3([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
123entry:
124 br label %for.body
125
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000126; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000127; CHECK: da analyze - none!
128; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000129; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000130; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000131; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000132
133for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000134 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
135 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
136 %conv = trunc i64 %i.02 to i32
137 %mul = mul nsw i64 %i.02, 3
138 %sub = add nsw i64 %mul, -5
139 %mul1 = mul nsw i64 %i.02, 3
140 %sub2 = add nsw i64 %mul1, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000141 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub2, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000142 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000143 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000144 %0 = load i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000145 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000146 store i32 %0, i32* %B.addr.01, align 4
147 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000148 %exitcond = icmp ne i64 %inc, 50
149 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000150
151for.end: ; preds = %for.body
152 ret void
153}
154
155
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000156;; for (long int i = 0; i < 50; i++) {
157;; A[3*i - 6][3*i - n] = i;
158;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000159
160define void @couple4([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
161entry:
162 br label %for.body
163
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000164; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000165; CHECK: da analyze - flow [*|<]!
166; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000167; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000168; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000169; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000170
171for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000172 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
173 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
174 %conv = trunc i64 %i.02 to i32
175 %mul = mul nsw i64 %i.02, 3
176 %conv1 = sext i32 %n to i64
177 %sub = sub nsw i64 %mul, %conv1
178 %mul2 = mul nsw i64 %i.02, 3
179 %sub3 = add nsw i64 %mul2, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000180 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub3, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000181 store i32 %conv, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000182 %arrayidx6 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000183 %0 = load i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000184 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000185 store i32 %0, i32* %B.addr.01, align 4
186 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000187 %exitcond = icmp ne i64 %inc, 50
188 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000189
190for.end: ; preds = %for.body
191 ret void
192}
193
194
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000195;; for (long int i = 0; i < 50; i++) {
196;; A[3*i - n + 1][3*i - n] = i;
197;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000198
199define void @couple5([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
200entry:
201 br label %for.body
202
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000203; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000204; CHECK: da analyze - none!
205; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000206; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000207; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000208; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000209
210for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000211 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
212 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
213 %conv = trunc i64 %i.02 to i32
214 %mul = mul nsw i64 %i.02, 3
215 %conv1 = sext i32 %n to i64
216 %sub = sub nsw i64 %mul, %conv1
217 %mul2 = mul nsw i64 %i.02, 3
218 %conv3 = sext i32 %n to i64
219 %sub4 = sub nsw i64 %mul2, %conv3
220 %add = add nsw i64 %sub4, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000221 %arrayidx5 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %add, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000222 store i32 %conv, i32* %arrayidx5, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000223 %arrayidx7 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000224 %0 = load i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000225 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000226 store i32 %0, i32* %B.addr.01, align 4
227 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000228 %exitcond = icmp ne i64 %inc, 50
229 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000230
231for.end: ; preds = %for.body
232 ret void
233}
234
235
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000236;; for (long int i = 0; i < 50; i++) {
237;; A[i][3*i - 6] = i;
238;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000239
240define void @couple6([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
241entry:
242 br label %for.body
243
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000244; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000245; CHECK: da analyze - flow [=|<]!
246; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000247; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000248; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000249; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000250
251for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000252 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
253 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
254 %conv = trunc i64 %i.02 to i32
255 %mul = mul nsw i64 %i.02, 3
256 %sub = add nsw i64 %mul, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000257 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000258 store i32 %conv, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000259 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000260 %0 = load i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000261 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000262 store i32 %0, i32* %B.addr.01, align 4
263 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000264 %exitcond = icmp ne i64 %inc, 50
265 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000266
267for.end: ; preds = %for.body
268 ret void
269}
270
271
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000272;; for (long int i = 0; i < 50; i++) {
273;; A[i][3*i - 5] = i;
274;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000275
276define void @couple7([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
277entry:
278 br label %for.body
279
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000280; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000281; CHECK: da analyze - none!
282; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000283; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000284; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000285; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000286
287for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000288 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
289 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
290 %conv = trunc i64 %i.02 to i32
291 %mul = mul nsw i64 %i.02, 3
292 %sub = add nsw i64 %mul, -5
David Blaikie79e6c742015-02-27 19:29:02 +0000293 %arrayidx1 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000294 store i32 %conv, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000295 %arrayidx3 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000296 %0 = load i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000297 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000298 store i32 %0, i32* %B.addr.01, align 4
299 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000300 %exitcond = icmp ne i64 %inc, 50
301 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000302
303for.end: ; preds = %for.body
304 ret void
305}
306
307
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000308;; for (long int i = 0; i <= 15; i++) {
309;; A[3*i - 18][3 - i] = i;
310;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000311
312define void @couple8([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
313entry:
314 br label %for.body
315
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000316; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000317; CHECK: da analyze - none!
318; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000319; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000320; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000321; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000322
323for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000324 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
325 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
326 %conv = trunc i64 %i.02 to i32
327 %sub = sub nsw i64 3, %i.02
328 %mul = mul nsw i64 %i.02, 3
329 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000330 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000331 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000332 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000333 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000334 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000335 store i32 %0, i32* %B.addr.01, align 4
336 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000337 %exitcond = icmp ne i64 %inc, 16
338 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000339
340for.end: ; preds = %for.body
341 ret void
342}
343
344
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000345;; for (long int i = 0; i <= 15; i++) {
346;; A[3*i - 18][2 - i] = i;
347;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000348
349define void @couple9([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
350entry:
351 br label %for.body
352
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000353; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000354; CHECK: da analyze - none!
355; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000356; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000357; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000358; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000359
360for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000361 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
362 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
363 %conv = trunc i64 %i.02 to i32
364 %sub = sub nsw i64 2, %i.02
365 %mul = mul nsw i64 %i.02, 3
366 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000367 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000368 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000369 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000370 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000371 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000372 store i32 %0, i32* %B.addr.01, align 4
373 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000374 %exitcond = icmp ne i64 %inc, 16
375 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000376
377for.end: ; preds = %for.body
378 ret void
379}
380
381
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000382;; for (long int i = 0; i <= 15; i++) {
383;; A[3*i - 18][6 - i] = i;
384;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000385
386define void @couple10([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
387entry:
388 br label %for.body
389
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000390; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000391; CHECK: da analyze - flow [>] splitable!
392; CHECK: da analyze - split level = 1, iteration = 3!
393; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000394; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000395; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000396; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000397
398for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000399 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
400 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
401 %conv = trunc i64 %i.02 to i32
402 %sub = sub nsw i64 6, %i.02
403 %mul = mul nsw i64 %i.02, 3
404 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000405 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000406 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000407 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000408 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000409 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000410 store i32 %0, i32* %B.addr.01, align 4
411 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000412 %exitcond = icmp ne i64 %inc, 16
413 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000414
415for.end: ; preds = %for.body
416 ret void
417}
418
419
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000420;; for (long int i = 0; i <= 15; i++) {
421;; A[3*i - 18][18 - i] = i;
422;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000423
424define void @couple11([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
425entry:
426 br label %for.body
427
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000428; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000429; CHECK: da analyze - flow [=|<] splitable!
430; CHECK: da analyze - split level = 1, iteration = 9!
431; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000432; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000433; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000434; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000435
436for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000437 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
438 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
439 %conv = trunc i64 %i.02 to i32
440 %sub = sub nsw i64 18, %i.02
441 %mul = mul nsw i64 %i.02, 3
442 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000443 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000444 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000445 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000446 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000447 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000448 store i32 %0, i32* %B.addr.01, align 4
449 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000450 %exitcond = icmp ne i64 %inc, 16
451 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000452
453for.end: ; preds = %for.body
454 ret void
455}
456
457
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000458;; for (long int i = 0; i <= 12; i++) {
459;; A[3*i - 18][22 - i] = i;
460;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000461
462define void @couple12([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
463entry:
464 br label %for.body
465
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000466; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000467; CHECK: da analyze - flow [<] splitable!
468; CHECK: da analyze - split level = 1, iteration = 11!
469; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000470; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000471; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000472; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000473
474for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000475 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
476 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
477 %conv = trunc i64 %i.02 to i32
478 %sub = sub nsw i64 22, %i.02
479 %mul = mul nsw i64 %i.02, 3
480 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000481 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000482 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000483 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000484 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000485 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000486 store i32 %0, i32* %B.addr.01, align 4
487 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000488 %exitcond = icmp ne i64 %inc, 13
489 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000490
491for.end: ; preds = %for.body
492 ret void
493}
494
495
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000496;; for (long int i = 0; i < 12; i++) {
497;; A[3*i - 18][22 - i] = i;
498;; *B++ = A[i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000499
500define void @couple13([100 x i32]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
501entry:
502 br label %for.body
503
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000504; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000505; CHECK: da analyze - none!
506; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000507; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000508; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000509; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000510
511for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000512 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
513 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
514 %conv = trunc i64 %i.02 to i32
515 %sub = sub nsw i64 22, %i.02
516 %mul = mul nsw i64 %i.02, 3
517 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000518 %arrayidx2 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %sub1, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000519 store i32 %conv, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000520 %arrayidx4 = getelementptr inbounds [100 x i32], [100 x i32]* %A, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000521 %0 = load i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000522 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000523 store i32 %0, i32* %B.addr.01, align 4
524 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000525 %exitcond = icmp ne i64 %inc, 12
526 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000527
528for.end: ; preds = %for.body
529 ret void
530}
531
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000532;; for (long int i = 0; i < 100; i++) {
533;; A[3*i - 18][18 - i][i] = i;
534;; *B++ = A[i][i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000535
536define void @couple14([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
537entry:
538 br label %for.body
539
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000540; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000541; CHECK: da analyze - flow [=|<] splitable!
542; CHECK: da analyze - split level = 1, iteration = 9!
543; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000544; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000545; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000546; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000547
548for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000549 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
550 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
551 %conv = trunc i64 %i.02 to i32
552 %sub = sub nsw i64 18, %i.02
553 %mul = mul nsw i64 %i.02, 3
554 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000555 %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 +0000556 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000557 %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000558 %0 = load i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000559 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000560 store i32 %0, i32* %B.addr.01, align 4
561 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000562 %exitcond = icmp ne i64 %inc, 100
563 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000564
565for.end: ; preds = %for.body
566 ret void
567}
568
569
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000570;; for (long int i = 0; i < 100; i++) {
571;; A[3*i - 18][22 - i][i] = i;
572;; *B++ = A[i][i][i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000573
574define void @couple15([100 x [100 x i32]]* %A, i32* %B, i32 %n) nounwind uwtable ssp {
575entry:
576 br label %for.body
577
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000578; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000579; CHECK: da analyze - none!
580; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000581; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000582; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000583; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000584
585for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000586 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
587 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
588 %conv = trunc i64 %i.02 to i32
589 %sub = sub nsw i64 22, %i.02
590 %mul = mul nsw i64 %i.02, 3
591 %sub1 = add nsw i64 %mul, -18
David Blaikie79e6c742015-02-27 19:29:02 +0000592 %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 +0000593 store i32 %conv, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000594 %arrayidx6 = getelementptr inbounds [100 x [100 x i32]], [100 x [100 x i32]]* %A, i64 %i.02, i64 %i.02, i64 %i.02
Sebastian Pop59b61b92012-10-11 07:32:34 +0000595 %0 = load i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000596 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000597 store i32 %0, i32* %B.addr.01, align 4
598 %inc = add nsw i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000599 %exitcond = icmp ne i64 %inc, 100
600 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000601
602for.end: ; preds = %for.body
603 ret void
604}