blob: e815799fa994f928d74c700838868c3619bc8632 [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
7;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +00008;; A[i + 10] = i;
9;; *B++ = A[2*i + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000010
11define void @exact0(i32* %A, i32* %B) nounwind uwtable ssp {
12entry:
13 br label %for.body
14
Sebastian Popbf6e1c22018-03-06 21:55:59 +000015; CHECK-LABEL: exact0
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000016; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +000017; CHECK: da analyze - flow [>]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000018; 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
27 %add = add i64 %i.02, 10
David Blaikie79e6c742015-02-27 19:29:02 +000028 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000029 store i32 %conv, i32* %arrayidx, align 4
30 %mul = shl i64 %i.02, 1
31 %add13 = or i64 %mul, 1
David Blaikie79e6c742015-02-27 19:29:02 +000032 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %add13
David Blaikiea79ac142015-02-27 21:17:42 +000033 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000034 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000035 store i32 %0, i32* %B.addr.01, align 4
36 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000037 %exitcond = icmp ne i64 %inc, 10
38 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000039
40for.end: ; preds = %for.body
41 ret void
42}
43
44
45;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +000046;; A[4*i + 10] = i;
47;; *B++ = A[2*i + 1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000048
49define void @exact1(i32* %A, i32* %B) nounwind uwtable ssp {
50entry:
51 br label %for.body
52
Sebastian Popbf6e1c22018-03-06 21:55:59 +000053; CHECK-LABEL: exact1
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000054; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000055; CHECK: da analyze - none!
56; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000057; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000058; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000059; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000060
61for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000062 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
63 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
64 %conv = trunc i64 %i.02 to i32
65 %mul = shl i64 %i.02, 2
66 %add = add i64 %mul, 10
David Blaikie79e6c742015-02-27 19:29:02 +000067 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000068 store i32 %conv, i32* %arrayidx, align 4
69 %mul1 = shl i64 %i.02, 1
70 %add23 = or i64 %mul1, 1
David Blaikie79e6c742015-02-27 19:29:02 +000071 %arrayidx3 = getelementptr inbounds i32, i32* %A, i64 %add23
David Blaikiea79ac142015-02-27 21:17:42 +000072 %0 = load i32, i32* %arrayidx3, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000073 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000074 store i32 %0, i32* %B.addr.01, align 4
75 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000076 %exitcond = icmp ne i64 %inc, 10
77 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000078
79for.end: ; preds = %for.body
80 ret void
81}
82
83
84;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +000085;; A[6*i] = i;
86;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +000087
88define void @exact2(i32* %A, i32* %B) nounwind uwtable ssp {
89entry:
90 br label %for.body
91
Sebastian Popbf6e1c22018-03-06 21:55:59 +000092; CHECK-LABEL: exact2
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000093; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000094; CHECK: da analyze - none!
95; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000096; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000097; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000098; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000099
100for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000101 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
102 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
103 %conv = trunc i64 %i.02 to i32
104 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000105 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000106 store i32 %conv, i32* %arrayidx, align 4
107 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000108 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000109 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000110 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000111 store i32 %0, i32* %B.addr.01, align 4
112 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000113 %exitcond = icmp ne i64 %inc, 10
114 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000115
116for.end: ; preds = %for.body
117 ret void
118}
119
120
121;; for (long unsigned i = 0; i <= 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000122;; A[6*i] = i;
123;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000124
125define void @exact3(i32* %A, i32* %B) nounwind uwtable ssp {
126entry:
127 br label %for.body
128
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000129; CHECK-LABEL: exact3
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000130; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000131; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000132; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000133; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000134; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000135; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000136
137for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000138 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
139 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
140 %conv = trunc i64 %i.02 to i32
141 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000142 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000143 store i32 %conv, i32* %arrayidx, align 4
144 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000145 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000146 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000147 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000148 store i32 %0, i32* %B.addr.01, align 4
149 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000150 %exitcond = icmp ne i64 %inc, 11
151 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000152
153for.end: ; preds = %for.body
154 ret void
155}
156
157
158;; for (long unsigned i = 0; i < 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000159;; A[6*i] = i;
160;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000161
162define void @exact4(i32* %A, i32* %B) nounwind uwtable ssp {
163entry:
164 br label %for.body
165
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000166; CHECK-LABEL: exact4
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000167; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000168; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000169; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000170; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000171; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000172; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000173
174for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000175 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
176 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
177 %conv = trunc i64 %i.02 to i32
178 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000179 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000180 store i32 %conv, i32* %arrayidx, align 4
181 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000182 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000183 %0 = load i32, i32* %arrayidx1, 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 i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000187 %exitcond = icmp ne i64 %inc, 12
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
195;; for (long unsigned i = 0; i <= 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000196;; A[6*i] = i;
197;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000198
199define void @exact5(i32* %A, i32* %B) nounwind uwtable ssp {
200entry:
201 br label %for.body
202
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000203; CHECK-LABEL: exact5
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000204; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000205; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000206; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000207; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000208; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000209; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000210
211for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000212 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
213 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
214 %conv = trunc i64 %i.02 to i32
215 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000216 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000217 store i32 %conv, i32* %arrayidx, align 4
218 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000219 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000220 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000221 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000222 store i32 %0, i32* %B.addr.01, align 4
223 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000224 %exitcond = icmp ne i64 %inc, 13
225 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000226
227for.end: ; preds = %for.body
228 ret void
229}
230
231
232;; for (long unsigned i = 0; i < 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000233;; A[6*i] = i;
234;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000235
236define void @exact6(i32* %A, i32* %B) nounwind uwtable ssp {
237entry:
238 br label %for.body
239
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000240; CHECK-LABEL: exact6
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000241; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000242; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000243; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000244; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000245; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000246; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000247
248for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000249 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
250 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
251 %conv = trunc i64 %i.02 to i32
252 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000253 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000254 store i32 %conv, i32* %arrayidx, align 4
255 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000256 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000257 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000258 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000259 store i32 %0, i32* %B.addr.01, align 4
260 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000261 %exitcond = icmp ne i64 %inc, 18
262 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000263
264for.end: ; preds = %for.body
265 ret void
266}
267
268
269;; for (long unsigned i = 0; i <= 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000270;; A[6*i] = i;
271;; *B++ = A[i + 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000272
273define void @exact7(i32* %A, i32* %B) nounwind uwtable ssp {
274entry:
275 br label %for.body
276
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000277; CHECK-LABEL: exact7
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000278; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000279; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000280; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000281; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000282; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000283; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000284
285for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000286 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
287 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
288 %conv = trunc i64 %i.02 to i32
289 %mul = mul i64 %i.02, 6
David Blaikie79e6c742015-02-27 19:29:02 +0000290 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000291 store i32 %conv, i32* %arrayidx, align 4
292 %add = add i64 %i.02, 60
David Blaikie79e6c742015-02-27 19:29:02 +0000293 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000294 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000295 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000296 store i32 %0, i32* %B.addr.01, align 4
297 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000298 %exitcond = icmp ne i64 %inc, 19
299 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000300
301for.end: ; preds = %for.body
302 ret void
303}
304
305
306;; for (long unsigned i = 0; i < 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000307;; A[-6*i] = i;
308;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000309
310define void @exact8(i32* %A, i32* %B) nounwind uwtable ssp {
311entry:
312 br label %for.body
313
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000314; CHECK-LABEL: exact8
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000315; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000316; CHECK: da analyze - none!
317; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000318; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000319; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000320; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000321
322for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000323 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
324 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
325 %conv = trunc i64 %i.02 to i32
326 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000327 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000328 store i32 %conv, i32* %arrayidx, align 4
329 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000330 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000331 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000332 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000333 store i32 %0, i32* %B.addr.01, align 4
334 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000335 %exitcond = icmp ne i64 %inc, 10
336 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000337
338for.end: ; preds = %for.body
339 ret void
340}
341
342
343;; for (long unsigned i = 0; i <= 10; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000344;; A[-6*i] = i;
345;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000346
347define void @exact9(i32* %A, i32* %B) nounwind uwtable ssp {
348entry:
349 br label %for.body
350
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000351; CHECK-LABEL: exact9
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000352; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000353; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000354; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000355; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000356; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000357; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000358
359for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000360 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
361 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
362 %conv = trunc i64 %i.02 to i32
363 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000364 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000365 store i32 %conv, i32* %arrayidx, align 4
366 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000367 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000368 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000369 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000370 store i32 %0, i32* %B.addr.01, align 4
371 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000372 %exitcond = icmp ne i64 %inc, 11
373 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000374
375for.end: ; preds = %for.body
376 ret void
377}
378
379
380;; for (long unsigned i = 0; i < 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000381;; A[-6*i] = i;
382;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000383
384define void @exact10(i32* %A, i32* %B) nounwind uwtable ssp {
385entry:
386 br label %for.body
387
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000388; CHECK-LABEL: exact10
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000389; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000390; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000391; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000392; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000393; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000394; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000395
396for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000397 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
398 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
399 %conv = trunc i64 %i.02 to i32
400 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000401 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000402 store i32 %conv, i32* %arrayidx, align 4
403 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000404 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000405 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000406 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000407 store i32 %0, i32* %B.addr.01, align 4
408 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000409 %exitcond = icmp ne i64 %inc, 12
410 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000411
412for.end: ; preds = %for.body
413 ret void
414}
415
416
417;; for (long unsigned i = 0; i <= 12; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000418;; A[-6*i] = i;
419;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000420
421define void @exact11(i32* %A, i32* %B) nounwind uwtable ssp {
422entry:
423 br label %for.body
424
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000425; CHECK-LABEL: exact11
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000426; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000427; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000428; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000429; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000430; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000431; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000432
433for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000434 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
435 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
436 %conv = trunc i64 %i.02 to i32
437 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000438 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000439 store i32 %conv, i32* %arrayidx, align 4
440 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000441 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000442 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000443 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000444 store i32 %0, i32* %B.addr.01, align 4
445 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000446 %exitcond = icmp ne i64 %inc, 13
447 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000448
449for.end: ; preds = %for.body
450 ret void
451}
452
453
454;; for (long unsigned i = 0; i < 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000455;; A[-6*i] = i;
456;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000457
458define void @exact12(i32* %A, i32* %B) nounwind uwtable ssp {
459entry:
460 br label %for.body
461
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000462; CHECK-LABEL: exact12
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000463; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000464; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000465; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000466; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000467; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000468; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000469
470for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000471 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
472 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
473 %conv = trunc i64 %i.02 to i32
474 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000475 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000476 store i32 %conv, i32* %arrayidx, align 4
477 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000478 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000479 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000480 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000481 store i32 %0, i32* %B.addr.01, align 4
482 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000483 %exitcond = icmp ne i64 %inc, 18
484 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000485
486for.end: ; preds = %for.body
487 ret void
488}
489
490
491;; for (long unsigned i = 0; i <= 18; i++) {
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000492;; A[-6*i] = i;
493;; *B++ = A[-i - 60];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000494
495define void @exact13(i32* %A, i32* %B) nounwind uwtable ssp {
496entry:
497 br label %for.body
498
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000499; CHECK-LABEL: exact13
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000500; CHECK: da analyze - none!
Sebastian Popbf6e1c22018-03-06 21:55:59 +0000501; CHECK: da analyze - flow [<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000502; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000503; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000504; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000505; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000506
507for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000508 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
509 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
510 %conv = trunc i64 %i.02 to i32
511 %mul = mul i64 %i.02, -6
David Blaikie79e6c742015-02-27 19:29:02 +0000512 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %mul
Sebastian Pop59b61b92012-10-11 07:32:34 +0000513 store i32 %conv, i32* %arrayidx, align 4
514 %sub1 = sub i64 -60, %i.02
David Blaikie79e6c742015-02-27 19:29:02 +0000515 %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 %sub1
David Blaikiea79ac142015-02-27 21:17:42 +0000516 %0 = load i32, i32* %arrayidx2, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000517 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000518 store i32 %0, i32* %B.addr.01, align 4
519 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000520 %exitcond = icmp ne i64 %inc, 19
521 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000522
523for.end: ; preds = %for.body
524 ret void
525}