blob: 6e8b98ca26433c44206509e11441c0af963747bc [file] [log] [blame]
Sebastian Pop59b61b92012-10-11 07:32:34 +00001; RUN: opt < %s -analyze -basicaa -da | FileCheck %s
2
3; ModuleID = 'SymbolicRDIV.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
8;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +00009;; A[2*i + n1] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000010;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000011;; *B++ = A[3*j + 3*n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +000012
13define void @symbolicrdiv0(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
14entry:
15 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000016 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000017
Sebastian Popa1cc34b2013-11-12 22:47:30 +000018; CHECK: 'Dependence Analysis' for function 'symbolicrdiv0'
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000019; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000020; CHECK: da analyze - none!
21; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000022; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000023; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000024; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000025
26for.body.preheader: ; preds = %entry
27 br label %for.body
28
29for.cond1.preheader.loopexit: ; preds = %for.body
30 br label %for.cond1.preheader
31
32for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +000033 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000034 br i1 %cmp21, label %for.end11, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000035
Benjamin Kramer3eb15632012-11-13 12:12:02 +000036for.body4.preheader: ; preds = %for.cond1.preheader
37 br label %for.body4
38
39for.body: ; preds = %for.body.preheader, %for.body
40 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000041 %conv = trunc i64 %i.05 to i32
42 %mul = shl nsw i64 %i.05, 1
43 %add = add i64 %mul, %n1
David Blaikie79e6c742015-02-27 19:29:02 +000044 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +000045 store i32 %conv, i32* %arrayidx, align 4
46 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000047 %exitcond = icmp ne i64 %inc, %n1
48 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +000049
Benjamin Kramer3eb15632012-11-13 12:12:02 +000050for.body4: ; preds = %for.body4.preheader, %for.body4
51 %j.03 = phi i64 [ %inc10, %for.body4 ], [ 0, %for.body4.preheader ]
52 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +000053 %mul56 = add i64 %j.03, %n1
54 %add7 = mul i64 %mul56, 3
David Blaikie79e6c742015-02-27 19:29:02 +000055 %arrayidx8 = getelementptr inbounds i32, i32* %A, i64 %add7
David Blaikiea79ac142015-02-27 21:17:42 +000056 %0 = load i32, i32* %arrayidx8, align 4
David Blaikie79e6c742015-02-27 19:29:02 +000057 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +000058 store i32 %0, i32* %B.addr.02, align 4
59 %inc10 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +000060 %exitcond7 = icmp ne i64 %inc10, %n2
61 br i1 %exitcond7, label %for.body4, label %for.end11.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +000062
Benjamin Kramer3eb15632012-11-13 12:12:02 +000063for.end11.loopexit: ; preds = %for.body4
64 br label %for.end11
65
66for.end11: ; preds = %for.end11.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000067 ret void
68}
69
70
71;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000072;; A[2*i + 5*n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +000073;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +000074;; *B++ = A[3*j + 2*n2];
Sebastian Pop59b61b92012-10-11 07:32:34 +000075
76define void @symbolicrdiv1(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
77entry:
78 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000079 br i1 %cmp4, label %for.cond2.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000080
Sebastian Popa1cc34b2013-11-12 22:47:30 +000081; CHECK: 'Dependence Analysis' for function 'symbolicrdiv1'
Preston Briggs5cb8cfa2012-11-27 19:12:26 +000082; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +000083; CHECK: da analyze - none!
84; 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.cond2.preheader.loopexit: ; preds = %for.body
93 br label %for.cond2.preheader
94
95for.cond2.preheader: ; preds = %for.cond2.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +000096 %cmp31 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +000097 br i1 %cmp31, label %for.end12, label %for.body5.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +000098
Benjamin Kramer3eb15632012-11-13 12:12:02 +000099for.body5.preheader: ; preds = %for.cond2.preheader
100 br label %for.body5
101
102for.body: ; preds = %for.body.preheader, %for.body
103 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000104 %conv = trunc i64 %i.05 to i32
105 %mul = shl nsw i64 %i.05, 1
106 %mul1 = mul i64 %n2, 5
107 %add = add i64 %mul, %mul1
David Blaikie79e6c742015-02-27 19:29:02 +0000108 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000109 store i32 %conv, i32* %arrayidx, align 4
110 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000111 %exitcond = icmp ne i64 %inc, %n1
112 br i1 %exitcond, label %for.body, label %for.cond2.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000113
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000114for.body5: ; preds = %for.body5.preheader, %for.body5
115 %j.03 = phi i64 [ %inc11, %for.body5 ], [ 0, %for.body5.preheader ]
116 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body5 ], [ %B, %for.body5.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000117 %mul6 = mul nsw i64 %j.03, 3
118 %mul7 = shl i64 %n2, 1
119 %add8 = add i64 %mul6, %mul7
David Blaikie79e6c742015-02-27 19:29:02 +0000120 %arrayidx9 = getelementptr inbounds i32, i32* %A, i64 %add8
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %0 = load i32, i32* %arrayidx9, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000122 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000123 store i32 %0, i32* %B.addr.02, align 4
124 %inc11 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000125 %exitcond6 = icmp ne i64 %inc11, %n2
126 br i1 %exitcond6, label %for.body5, label %for.end12.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000127
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000128for.end12.loopexit: ; preds = %for.body5
129 br label %for.end12
130
131for.end12: ; preds = %for.end12.loopexit, %for.cond2.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000132 ret void
133}
134
135
136;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000137;; A[2*i - n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000138;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000139;; *B++ = A[-j + 2*n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000140
141define void @symbolicrdiv2(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
142entry:
143 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000144 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000145
Sebastian Popa1cc34b2013-11-12 22:47:30 +0000146; CHECK: 'Dependence Analysis' for function 'symbolicrdiv2'
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000147; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000148; CHECK: da analyze - none!
149; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000150; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000151; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000152; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000153
154for.body.preheader: ; preds = %entry
155 br label %for.body
156
157for.cond1.preheader.loopexit: ; preds = %for.body
158 br label %for.cond1.preheader
159
160for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000161 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000162 br i1 %cmp21, label %for.end10, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000163
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000164for.body4.preheader: ; preds = %for.cond1.preheader
165 br label %for.body4
166
167for.body: ; preds = %for.body.preheader, %for.body
168 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000169 %conv = trunc i64 %i.05 to i32
170 %mul = shl nsw i64 %i.05, 1
171 %sub = sub i64 %mul, %n2
David Blaikie79e6c742015-02-27 19:29:02 +0000172 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %sub
Sebastian Pop59b61b92012-10-11 07:32:34 +0000173 store i32 %conv, i32* %arrayidx, align 4
174 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000175 %exitcond = icmp ne i64 %inc, %n1
176 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000177
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000178for.body4: ; preds = %for.body4.preheader, %for.body4
179 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
180 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000181 %mul6 = shl i64 %n1, 1
182 %add = sub i64 %mul6, %j.03
David Blaikie79e6c742015-02-27 19:29:02 +0000183 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add
David Blaikiea79ac142015-02-27 21:17:42 +0000184 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000185 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000186 store i32 %0, i32* %B.addr.02, align 4
187 %inc9 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000188 %exitcond6 = icmp ne i64 %inc9, %n2
189 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000190
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000191for.end10.loopexit: ; preds = %for.body4
192 br label %for.end10
193
194for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000195 ret void
196}
197
198
199;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000200;; A[-i + n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000201;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000202;; *B++ = A[j - n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000203
204define void @symbolicrdiv3(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
205entry:
206 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000207 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000208
Sebastian Popa1cc34b2013-11-12 22:47:30 +0000209; CHECK: 'Dependence Analysis' for function 'symbolicrdiv3'
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000210; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000211; CHECK: da analyze - none!
212; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000213; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000214; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000215; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000216
217for.body.preheader: ; preds = %entry
218 br label %for.body
219
220for.cond1.preheader.loopexit: ; preds = %for.body
221 br label %for.cond1.preheader
222
223for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000224 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000225 br i1 %cmp21, label %for.end9, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000226
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000227for.body4.preheader: ; preds = %for.cond1.preheader
228 br label %for.body4
229
230for.body: ; preds = %for.body.preheader, %for.body
231 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000232 %conv = trunc i64 %i.05 to i32
233 %add = sub i64 %n2, %i.05
David Blaikie79e6c742015-02-27 19:29:02 +0000234 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000235 store i32 %conv, i32* %arrayidx, align 4
236 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000237 %exitcond = icmp ne i64 %inc, %n1
238 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000239
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000240for.body4: ; preds = %for.body4.preheader, %for.body4
241 %j.03 = phi i64 [ %inc8, %for.body4 ], [ 0, %for.body4.preheader ]
242 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000243 %sub5 = sub i64 %j.03, %n1
David Blaikie79e6c742015-02-27 19:29:02 +0000244 %arrayidx6 = getelementptr inbounds i32, i32* %A, i64 %sub5
David Blaikiea79ac142015-02-27 21:17:42 +0000245 %0 = load i32, i32* %arrayidx6, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000246 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000247 store i32 %0, i32* %B.addr.02, align 4
248 %inc8 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000249 %exitcond6 = icmp ne i64 %inc8, %n2
250 br i1 %exitcond6, label %for.body4, label %for.end9.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000251
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000252for.end9.loopexit: ; preds = %for.body4
253 br label %for.end9
254
255for.end9: ; preds = %for.end9.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000256 ret void
257}
258
259
260;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000261;; A[-i + 2*n1] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000262;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000263;; *B++ = A[-j + n1];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000264
265define void @symbolicrdiv4(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
266entry:
267 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000268 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000269
Sebastian Popa1cc34b2013-11-12 22:47:30 +0000270; CHECK: 'Dependence Analysis' for function 'symbolicrdiv4'
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000271; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000272; CHECK: da analyze - none!
273; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000274; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000275; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000276; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000277
278for.body.preheader: ; preds = %entry
279 br label %for.body
280
281for.cond1.preheader.loopexit: ; preds = %for.body
282 br label %for.cond1.preheader
283
284for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000285 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000286 br i1 %cmp21, label %for.end10, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000287
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000288for.body4.preheader: ; preds = %for.cond1.preheader
289 br label %for.body4
290
291for.body: ; preds = %for.body.preheader, %for.body
292 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000293 %conv = trunc i64 %i.05 to i32
294 %mul = shl i64 %n1, 1
295 %add = sub i64 %mul, %i.05
David Blaikie79e6c742015-02-27 19:29:02 +0000296 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000297 store i32 %conv, i32* %arrayidx, align 4
298 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000299 %exitcond = icmp ne i64 %inc, %n1
300 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000301
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000302for.body4: ; preds = %for.body4.preheader, %for.body4
303 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
304 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000305 %add6 = sub i64 %n1, %j.03
David Blaikie79e6c742015-02-27 19:29:02 +0000306 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add6
David Blaikiea79ac142015-02-27 21:17:42 +0000307 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000308 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000309 store i32 %0, i32* %B.addr.02, align 4
310 %inc9 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000311 %exitcond6 = icmp ne i64 %inc9, %n2
312 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000313
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000314for.end10.loopexit: ; preds = %for.body4
315 br label %for.end10
316
317for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000318 ret void
319}
320
321
322;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000323;; A[-i + n2] = i;
Sebastian Pop59b61b92012-10-11 07:32:34 +0000324;; for (long int j = 0; j < n2; j++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000325;; *B++ = A[-j + 2*n2];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000326
327define void @symbolicrdiv5(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
328entry:
329 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000330 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000331
Sebastian Popa1cc34b2013-11-12 22:47:30 +0000332; CHECK: 'Dependence Analysis' for function 'symbolicrdiv5'
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000333; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000334; CHECK: da analyze - none!
335; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000336; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000337; CHECK: da analyze - confused!
Preston Briggs5cb8cfa2012-11-27 19:12:26 +0000338; CHECK: da analyze - none!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000339
340for.body.preheader: ; preds = %entry
341 br label %for.body
342
343for.cond1.preheader.loopexit: ; preds = %for.body
344 br label %for.cond1.preheader
345
346for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000347 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000348 br i1 %cmp21, label %for.end10, label %for.body4.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000349
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000350for.body4.preheader: ; preds = %for.cond1.preheader
351 br label %for.body4
352
353for.body: ; preds = %for.body.preheader, %for.body
354 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000355 %conv = trunc i64 %i.05 to i32
356 %add = sub i64 %n2, %i.05
David Blaikie79e6c742015-02-27 19:29:02 +0000357 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000358 store i32 %conv, i32* %arrayidx, align 4
359 %inc = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000360 %exitcond = icmp ne i64 %inc, %n1
361 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000362
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000363for.body4: ; preds = %for.body4.preheader, %for.body4
364 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ]
365 %B.addr.02 = phi i32* [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000366 %mul = shl i64 %n2, 1
367 %add6 = sub i64 %mul, %j.03
David Blaikie79e6c742015-02-27 19:29:02 +0000368 %arrayidx7 = getelementptr inbounds i32, i32* %A, i64 %add6
David Blaikiea79ac142015-02-27 21:17:42 +0000369 %0 = load i32, i32* %arrayidx7, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000370 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.02, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000371 store i32 %0, i32* %B.addr.02, align 4
372 %inc9 = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000373 %exitcond6 = icmp ne i64 %inc9, %n2
374 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000375
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000376for.end10.loopexit: ; preds = %for.body4
377 br label %for.end10
378
379for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000380 ret void
381}
382
383
384;; for (long int i = 0; i < n1; i++)
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000385;; for (long int j = 0; j < n2; j++) {
386;; A[j -i + n2] = i;
387;; *B++ = A[2*n2];
Sebastian Pop59b61b92012-10-11 07:32:34 +0000388
389define void @symbolicrdiv6(i32* %A, i32* %B, i64 %n1, i64 %n2) nounwind uwtable ssp {
390entry:
391 %cmp4 = icmp eq i64 %n1, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000392 br i1 %cmp4, label %for.end7, label %for.cond1.preheader.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000393
Sebastian Popa1cc34b2013-11-12 22:47:30 +0000394; CHECK: 'Dependence Analysis' for function 'symbolicrdiv6'
Preston Briggs1084fa22012-11-27 06:41:46 +0000395; CHECK: da analyze - output [* *]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000396; CHECK: da analyze - none!
397; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000398; CHECK: da analyze - consistent input [S S]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000399; CHECK: da analyze - confused!
Preston Briggs1084fa22012-11-27 06:41:46 +0000400; CHECK: da analyze - output [* *]!
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000401
402for.cond1.preheader.preheader: ; preds = %entry
403 br label %for.cond1.preheader
404
405for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc5
406 %B.addr.06 = phi i32* [ %B.addr.1.lcssa, %for.inc5 ], [ %B, %for.cond1.preheader.preheader ]
407 %i.05 = phi i64 [ %inc6, %for.inc5 ], [ 0, %for.cond1.preheader.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000408 %cmp21 = icmp eq i64 %n2, 0
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000409 br i1 %cmp21, label %for.inc5, label %for.body3.preheader
Sebastian Pop59b61b92012-10-11 07:32:34 +0000410
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000411for.body3.preheader: ; preds = %for.cond1.preheader
412 br label %for.body3
413
414for.body3: ; preds = %for.body3.preheader, %for.body3
415 %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]
416 %B.addr.12 = phi i32* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000417 %conv = trunc i64 %i.05 to i32
418 %sub = sub nsw i64 %j.03, %i.05
419 %add = add i64 %sub, %n2
David Blaikie79e6c742015-02-27 19:29:02 +0000420 %arrayidx = getelementptr inbounds i32, i32* %A, i64 %add
Sebastian Pop59b61b92012-10-11 07:32:34 +0000421 store i32 %conv, i32* %arrayidx, align 4
422 %mul = shl i64 %n2, 1
David Blaikie79e6c742015-02-27 19:29:02 +0000423 %arrayidx4 = getelementptr inbounds i32, i32* %A, i64 %mul
David Blaikiea79ac142015-02-27 21:17:42 +0000424 %0 = load i32, i32* %arrayidx4, align 4
David Blaikie79e6c742015-02-27 19:29:02 +0000425 %incdec.ptr = getelementptr inbounds i32, i32* %B.addr.12, i64 1
Sebastian Pop59b61b92012-10-11 07:32:34 +0000426 store i32 %0, i32* %B.addr.12, align 4
427 %inc = add nsw i64 %j.03, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000428 %exitcond = icmp ne i64 %inc, %n2
429 br i1 %exitcond, label %for.body3, label %for.inc5.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000430
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000431for.inc5.loopexit: ; preds = %for.body3
David Blaikie79e6c742015-02-27 19:29:02 +0000432 %scevgep = getelementptr i32, i32* %B.addr.06, i64 %n2
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000433 br label %for.inc5
434
435for.inc5: ; preds = %for.inc5.loopexit, %for.cond1.preheader
436 %B.addr.1.lcssa = phi i32* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc5.loopexit ]
Sebastian Pop59b61b92012-10-11 07:32:34 +0000437 %inc6 = add nsw i64 %i.05, 1
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000438 %exitcond7 = icmp ne i64 %inc6, %n1
439 br i1 %exitcond7, label %for.cond1.preheader, label %for.end7.loopexit
Sebastian Pop59b61b92012-10-11 07:32:34 +0000440
Benjamin Kramer3eb15632012-11-13 12:12:02 +0000441for.end7.loopexit: ; preds = %for.inc5
442 br label %for.end7
443
444for.end7: ; preds = %for.end7.loopexit, %entry
Sebastian Pop59b61b92012-10-11 07:32:34 +0000445 ret void
446}