blob: 602a79194e95629faad100e46095893528768ae0 [file] [log] [blame]
Philip Pfaffeefb5ad12019-01-08 14:06:58 +00001; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
2; RUN: | FileCheck %s
Sebastian Pop59b61b92012-10-11 07:32:34 +00003; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
4
5; ModuleID = 'WeakZeroSrcSIV.bc'
6target 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"
7target triple = "x86_64-apple-macosx10.6.0"
8
9
David Green2911b3a2018-05-31 14:55:29 +000010;; for (int i = 0; i < N; i++) {
11;; A[0] = 1;
12;; A[i] = 2;
13
14define void @dstzero(i32* nocapture %A, i32 %N) {
15entry:
16 %cmp6 = icmp sgt i32 %N, 0
17 br i1 %cmp6, label %for.body, label %for.cond.cleanup
18
19; CHECK: da analyze - consistent output [S]!
20; CHECK: da analyze - output [p=>|<]!
21; CHECK: da analyze - none!
22
23for.body: ; preds = %entry, %for.body
24 %i.07 = phi i32 [ %add, %for.body ], [ 0, %entry ]
25 store i32 0, i32* %A, align 4
26 %arrayidx1 = getelementptr inbounds i32, i32* %A, i32 %i.07
27 store i32 1, i32* %arrayidx1, align 4
28 %add = add nuw nsw i32 %i.07, 1
29 %exitcond = icmp eq i32 %add, %N
30 br i1 %exitcond, label %for.cond.cleanup, label %for.body
31
32for.cond.cleanup: ; preds = %for.body, %entry
33 ret void
34}
35
36
Benjamin Kramer3eb15632012-11-13 12:12:02 +000037;; for (long unsigned i = 0; i < 30; i++) {
38;; A[10] = i;
39;; *B++ = A[2*i + 10];
Sebastian Pop59b61b92012-10-11 07:32:34 +000040
41define void @weakzerosrc0(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
42entry:
43 br label %for.body
44
Preston Briggs1084fa22012-11-27 06:41:46 +000045; CHECK: da analyze - consistent output [S]!
David Green2911b3a2018-05-31 14:55:29 +000046; CHECK: da analyze - flow [p=>|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000047; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000048; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000049; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000050; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000051
52for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +000053 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
54 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
55 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000056 %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +000057 store i32 %conv, i32* %arrayidx, align 4
58 %mul = shl i64 %i.02, 1
59 %add = add i64 %mul, 10
David Blaikie79e6c742015-02-27 19:29:02 +000060 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +000061 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000062 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000063 store i32 %0, i32* %B.addr.01, align 4
64 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000065 %exitcond = icmp ne i64 %inc, 30
66 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +000067
68for.end: ; preds = %for.body
69 ret void
70}
71
72
Benjamin Kramer3eb15632012-11-13 12:12:02 +000073;; for (long unsigned i = 0; i < n; i++) {
74;; A[10] = i;
75;; *B++ = A[n*i + 10];
Sebastian Pop59b61b92012-10-11 07:32:34 +000076
77define void @weakzerosrc1(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
78entry:
79 %cmp1 = icmp eq i64 %n, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000080 br i1 %cmp1, label %for.end, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000081
Preston Briggs1084fa22012-11-27 06:41:46 +000082; CHECK: da analyze - consistent output [S]!
David Green2911b3a2018-05-31 14:55:29 +000083; CHECK: da analyze - flow [p=>|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000084; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000085; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000086; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000087; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000088
89for.body.preheader: ; preds = %entry
90 br label %for.body
91
92for.body: ; preds = %for.body.preheader, %for.body
93 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
94 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000095 %conv = trunc i64 %i.03 to i32
David Blaikie79e6c742015-02-27 19:29:02 +000096 %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +000097 store i32 %conv, i32* %arrayidx, align 4
98 %mul = mul i64 %i.03, %n
99 %add = add i64 %mul, 10
David Blaikie79e6c742015-02-27 19:29:02 +0000100 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000101 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000102 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000103 store i32 %0, i32* %B.addr.02, align 4
104 %inc = add i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000105 %exitcond = icmp ne i64 %inc, %n
106 br i1 %exitcond, label %for.body, label %for.end.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000107
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000108for.end.loopexit: ; preds = %for.body
109 br label %for.end
110
111for.end: ; preds = %for.end.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000112 ret void
113}
114
115
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000116;; for (long unsigned i = 0; i < 5; i++) {
117;; A[10] = i;
118;; *B++ = A[2*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000119
120define void @weakzerosrc2(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
121entry:
122 br label %for.body
123
Preston Briggs1084fa22012-11-27 06:41:46 +0000124; CHECK: da analyze - consistent output [S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000125; CHECK: da analyze - none!
126; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000127; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000128; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000129; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000130
131for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000132 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
133 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
134 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000135 %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000136 store i32 %conv, i32* %arrayidx, align 4
137 %mul = shl i64 %i.02, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000138 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
David Blaikiea79ac142015-02-27 21:17:42 +0000139 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000140 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000141 store i32 %0, i32* %B.addr.01, align 4
142 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000143 %exitcond = icmp ne i64 %inc, 5
144 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000145
146for.end: ; preds = %for.body
147 ret void
148}
149
150
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000151;; for (long unsigned i = 0; i < 6; i++) {
152;; A[10] = i;
153;; *B++ = A[2*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000154
155define void @weakzerosrc3(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
156entry:
157 br label %for.body
158
Preston Briggs1084fa22012-11-27 06:41:46 +0000159; CHECK: da analyze - consistent output [S]!
David Green2911b3a2018-05-31 14:55:29 +0000160; CHECK: da analyze - flow [<=p|<]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000161; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000162; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000163; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000164; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000165
166for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000167 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
168 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
169 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000170 %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000171 store i32 %conv, i32* %arrayidx, align 4
172 %mul = shl i64 %i.02, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000173 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
David Blaikiea79ac142015-02-27 21:17:42 +0000174 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000175 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000176 store i32 %0, i32* %B.addr.01, align 4
177 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000178 %exitcond = icmp ne i64 %inc, 6
179 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000180
181for.end: ; preds = %for.body
182 ret void
183}
184
185
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000186;; for (long unsigned i = 0; i < 7; i++) {
187;; A[10] = i;
188;; *B++ = A[2*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000189
190define void @weakzerosrc4(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
191entry:
192 br label %for.body
193
Preston Briggs1084fa22012-11-27 06:41:46 +0000194; CHECK: da analyze - consistent output [S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000195; CHECK: da analyze - flow [*|<]!
196; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000197; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000198; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000199; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000200
201for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000202 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
203 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
204 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000205 %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000206 store i32 %conv, i32* %arrayidx, align 4
207 %mul = shl i64 %i.02, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000208 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
David Blaikiea79ac142015-02-27 21:17:42 +0000209 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000210 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000211 store i32 %0, i32* %B.addr.01, align 4
212 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000213 %exitcond = icmp ne i64 %inc, 7
214 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000215
216for.end: ; preds = %for.body
217 ret void
218}
219
220
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000221;; for (long unsigned i = 0; i < 7; i++) {
222;; A[-10] = i;
223;; *B++ = A[2*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000224
225define void @weakzerosrc5(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
226entry:
227 br label %for.body
228
Preston Briggs1084fa22012-11-27 06:41:46 +0000229; CHECK: da analyze - consistent output [S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000230; CHECK: da analyze - none!
231; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000232; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000233; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000234; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000235
236for.body: ; preds = %entry, %for.body
Sebastian Pop59b61b92012-10-11 07:32:34 +0000237 %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]
238 %B.addr.01 = phi i32* [ %B, %entry ], [ %incdec.ptr, %for.body ]
239 %conv = trunc i64 %i.02 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000240 %arrayidx = getelementptr inbounds i32, i32* %A, i64 -10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000241 store i32 %conv, i32* %arrayidx, align 4
242 %mul = shl i64 %i.02, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000243 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
David Blaikiea79ac142015-02-27 21:17:42 +0000244 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000245 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.01, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000246 store i32 %0, i32* %B.addr.01, align 4
247 %inc = add i64 %i.02, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000248 %exitcond = icmp ne i64 %inc, 7
249 br i1 %exitcond, label %for.body, label %for.end
Sebastian Pop59b61b92012-10-11 07:32:34 +0000250
251for.end: ; preds = %for.body
252 ret void
253}
254
255
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000256;; for (long unsigned i = 0; i < n; i++) {
257;; A[10] = i;
258;; *B++ = A[3*i];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000259
260define void @weakzerosrc6(i32* %A, i32* %B, i64 %n) nounwind uwtable ssp {
261entry:
262 %cmp1 = icmp eq i64 %n, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000263 br i1 %cmp1, label %for.end, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000264
Preston Briggs1084fa22012-11-27 06:41:46 +0000265; CHECK: da analyze - consistent output [S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000266; CHECK: da analyze - none!
267; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000268; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000269; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000270; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000271
272for.body.preheader: ; preds = %entry
273 br label %for.body
274
275for.body: ; preds = %for.body.preheader, %for.body
276 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
277 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000278 %conv = trunc i64 %i.03 to i32
David Blaikie79e6c742015-02-27 19:29:02 +0000279 %arrayidx = getelementptr inbounds i32, i32* %A, i64 10
Sebastian Pop59b61b92012-10-11 07:32:34 +0000280 store i32 %conv, i32* %arrayidx, align 4
281 %mul = mul i64 %i.03, 3
David Blaikie79e6c742015-02-27 19:29:02 +0000282 %arrayidx1 = getelementptr inbounds i32, i32* %A, i64 %mul
David Blaikiea79ac142015-02-27 21:17:42 +0000283 %0 = load i32, i32* %arrayidx1, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000284 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000285 store i32 %0, i32* %B.addr.02, align 4
286 %inc = add i64 %i.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000287 %exitcond = icmp ne i64 %inc, %n
288 br i1 %exitcond, label %for.body, label %for.end.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000289
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000290for.end.loopexit: ; preds = %for.body
291 br label %for.end
292
293for.end: ; preds = %for.end.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000294 ret void
295}