1 ; RUN: opt < %s -analyze -basicaa -da -da-delinearize=false | FileCheck %s 2 ; RUN: opt < %s -analyze -basicaa -da -da-delinearize | FileCheck %s -check-prefix=DELIN 3 4 ; ModuleID = 'Banerjee.bc' 5 target 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" 6 target triple = "x86_64-apple-macosx10.6.0" 7 8 9 ;; for (long int i = 1; i <= 10; i++) 10 ;; for (long int j = 1; j <= 10; j++) { 11 ;; A[10*i + j] = 0; 12 ;; *B++ = A[10*i + j - 1]; 13 14 define void @banerjee0(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 15 entry: 16 br label %for.cond1.preheader 17 ; CHECK: 'Dependence Analysis' for function 'banerjee0': 18 ; CHECK: da analyze - none! 19 ; CHECK: da analyze - flow [<= <>]! 20 ; CHECK: da analyze - confused! 21 ; CHECK: da analyze - none! 22 ; CHECK: da analyze - confused! 23 ; CHECK: da analyze - none! 24 25 ; DELIN: 'Dependence Analysis' for function 'banerjee0': 26 ; DELIN: da analyze - none! 27 ; DELIN: da analyze - flow [<= <>]! 28 ; DELIN: da analyze - confused! 29 ; DELIN: da analyze - none! 30 ; DELIN: da analyze - confused! 31 ; DELIN: da analyze - none! 32 33 for.cond1.preheader: ; preds = %entry, %for.inc7 34 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ] 35 %i.03 = phi i64 [ 1, %entry ], [ %inc8, %for.inc7 ] 36 br label %for.body3 37 38 for.body3: ; preds = %for.cond1.preheader, %for.body3 39 %j.02 = phi i64 [ 1, %for.cond1.preheader ], [ %inc, %for.body3 ] 40 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 41 %mul = mul nsw i64 %i.03, 10 42 %add = add nsw i64 %mul, %j.02 43 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 44 store i64 0, i64* %arrayidx, align 8 45 %mul4 = mul nsw i64 %i.03, 10 46 %add5 = add nsw i64 %mul4, %j.02 47 %sub = add nsw i64 %add5, -1 48 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub 49 %0 = load i64, i64* %arrayidx6, align 8 50 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 51 store i64 %0, i64* %B.addr.11, align 8 52 %inc = add nsw i64 %j.02, 1 53 %exitcond = icmp ne i64 %inc, 11 54 br i1 %exitcond, label %for.body3, label %for.inc7 55 56 for.inc7: ; preds = %for.body3 57 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 58 %inc8 = add nsw i64 %i.03, 1 59 %exitcond5 = icmp ne i64 %inc8, 11 60 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9 61 62 for.end9: ; preds = %for.inc7 63 ret void 64 } 65 66 67 ;; for (long int i = 1; i <= n; i++) 68 ;; for (long int j = 1; j <= m; j++) { 69 ;; A[10*i + j] = 0; 70 ;; *B++ = A[10*i + j - 1]; 71 72 define void @banerjee1(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 73 entry: 74 %cmp4 = icmp sgt i64 %n, 0 75 br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end9 76 77 ; CHECK: 'Dependence Analysis' for function 'banerjee1': 78 ; CHECK: da analyze - output [* *]! 79 ; CHECK: da analyze - flow [* <>]! 80 ; CHECK: da analyze - confused! 81 ; CHECK: da analyze - input [* *]! 82 ; CHECK: da analyze - confused! 83 ; CHECK: da analyze - output [* *]! 84 85 ; DELIN: 'Dependence Analysis' for function 'banerjee1': 86 ; DELIN: da analyze - output [* *]! 87 ; DELIN: da analyze - flow [* <>]! 88 ; DELIN: da analyze - confused! 89 ; DELIN: da analyze - input [* *]! 90 ; DELIN: da analyze - confused! 91 ; DELIN: da analyze - output [* *]! 92 93 for.cond1.preheader.preheader: ; preds = %entry 94 %0 = add i64 %n, 1 95 br label %for.cond1.preheader 96 97 for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc7 98 %B.addr.06 = phi i64* [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ] 99 %i.05 = phi i64 [ %inc8, %for.inc7 ], [ 1, %for.cond1.preheader.preheader ] 100 %1 = add i64 %m, 1 101 %cmp21 = icmp sgt i64 %m, 0 102 br i1 %cmp21, label %for.body3.preheader, label %for.inc7 103 104 for.body3.preheader: ; preds = %for.cond1.preheader 105 br label %for.body3 106 107 for.body3: ; preds = %for.body3.preheader, %for.body3 108 %j.03 = phi i64 [ %inc, %for.body3 ], [ 1, %for.body3.preheader ] 109 %B.addr.12 = phi i64* [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ] 110 %mul = mul nsw i64 %i.05, 10 111 %add = add nsw i64 %mul, %j.03 112 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 113 store i64 0, i64* %arrayidx, align 8 114 %mul4 = mul nsw i64 %i.05, 10 115 %add5 = add nsw i64 %mul4, %j.03 116 %sub = add nsw i64 %add5, -1 117 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub 118 %2 = load i64, i64* %arrayidx6, align 8 119 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.12, i64 1 120 store i64 %2, i64* %B.addr.12, align 8 121 %inc = add nsw i64 %j.03, 1 122 %exitcond = icmp eq i64 %inc, %1 123 br i1 %exitcond, label %for.inc7.loopexit, label %for.body3 124 125 for.inc7.loopexit: ; preds = %for.body3 126 %scevgep = getelementptr i64, i64* %B.addr.06, i64 %m 127 br label %for.inc7 128 129 for.inc7: ; preds = %for.inc7.loopexit, %for.cond1.preheader 130 %B.addr.1.lcssa = phi i64* [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ] 131 %inc8 = add nsw i64 %i.05, 1 132 %exitcond7 = icmp eq i64 %inc8, %0 133 br i1 %exitcond7, label %for.end9.loopexit, label %for.cond1.preheader 134 135 for.end9.loopexit: ; preds = %for.inc7 136 br label %for.end9 137 138 for.end9: ; preds = %for.end9.loopexit, %entry 139 ret void 140 } 141 142 143 ;; for (long int i = 0; i < 10; i++) 144 ;; for (long int j = 0; j < 10; j++) { 145 ;; A[10*i + j] = 0; 146 ;; *B++ = A[10*i + j + 100]; 147 148 define void @banerjee2(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 149 entry: 150 br label %for.cond1.preheader 151 152 ; CHECK: 'Dependence Analysis' for function 'banerjee2': 153 ; CHECK: da analyze - none! 154 ; CHECK: da analyze - none! 155 ; CHECK: da analyze - confused! 156 ; CHECK: da analyze - none! 157 ; CHECK: da analyze - confused! 158 ; CHECK: da analyze - none! 159 160 ; DELIN: 'Dependence Analysis' for function 'banerjee2': 161 ; DELIN: da analyze - none! 162 ; DELIN: da analyze - none! 163 ; DELIN: da analyze - confused! 164 ; DELIN: da analyze - none! 165 ; DELIN: da analyze - confused! 166 ; DELIN: da analyze - none! 167 168 for.cond1.preheader: ; preds = %entry, %for.inc8 169 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ] 170 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 171 br label %for.body3 172 173 for.body3: ; preds = %for.cond1.preheader, %for.body3 174 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 175 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 176 %mul = mul nsw i64 %i.03, 10 177 %add = add nsw i64 %mul, %j.02 178 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 179 store i64 0, i64* %arrayidx, align 8 180 %mul4 = mul nsw i64 %i.03, 10 181 %add5 = add nsw i64 %mul4, %j.02 182 %add6 = add nsw i64 %add5, 100 183 %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6 184 %0 = load i64, i64* %arrayidx7, align 8 185 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 186 store i64 %0, i64* %B.addr.11, align 8 187 %inc = add nsw i64 %j.02, 1 188 %exitcond = icmp ne i64 %inc, 10 189 br i1 %exitcond, label %for.body3, label %for.inc8 190 191 for.inc8: ; preds = %for.body3 192 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 193 %inc9 = add nsw i64 %i.03, 1 194 %exitcond5 = icmp ne i64 %inc9, 10 195 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 196 197 for.end10: ; preds = %for.inc8 198 ret void 199 } 200 201 202 ;; for (long int i = 0; i < 10; i++) 203 ;; for (long int j = 0; j < 10; j++) { 204 ;; A[10*i + j] = 0; 205 ;; *B++ = A[10*i + j + 99]; 206 207 define void @banerjee3(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 208 entry: 209 br label %for.cond1.preheader 210 211 ; CHECK: 'Dependence Analysis' for function 'banerjee3': 212 ; CHECK: da analyze - none! 213 ; CHECK: da analyze - flow [> >]! 214 ; CHECK: da analyze - confused! 215 ; CHECK: da analyze - none! 216 ; CHECK: da analyze - confused! 217 ; CHECK: da analyze - none! 218 219 ; DELIN: 'Dependence Analysis' for function 'banerjee3': 220 ; DELIN: da analyze - none! 221 ; DELIN: da analyze - flow [> >]! 222 ; DELIN: da analyze - confused! 223 ; DELIN: da analyze - none! 224 ; DELIN: da analyze - confused! 225 ; DELIN: da analyze - none! 226 227 for.cond1.preheader: ; preds = %entry, %for.inc8 228 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ] 229 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 230 br label %for.body3 231 232 for.body3: ; preds = %for.cond1.preheader, %for.body3 233 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 234 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 235 %mul = mul nsw i64 %i.03, 10 236 %add = add nsw i64 %mul, %j.02 237 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 238 store i64 0, i64* %arrayidx, align 8 239 %mul4 = mul nsw i64 %i.03, 10 240 %add5 = add nsw i64 %mul4, %j.02 241 %add6 = add nsw i64 %add5, 99 242 %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6 243 %0 = load i64, i64* %arrayidx7, align 8 244 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 245 store i64 %0, i64* %B.addr.11, align 8 246 %inc = add nsw i64 %j.02, 1 247 %exitcond = icmp ne i64 %inc, 10 248 br i1 %exitcond, label %for.body3, label %for.inc8 249 250 for.inc8: ; preds = %for.body3 251 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 252 %inc9 = add nsw i64 %i.03, 1 253 %exitcond5 = icmp ne i64 %inc9, 10 254 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 255 256 for.end10: ; preds = %for.inc8 257 ret void 258 } 259 260 261 ;; for (long int i = 0; i < 10; i++) 262 ;; for (long int j = 0; j < 10; j++) { 263 ;; A[10*i + j] = 0; 264 ;; *B++ = A[10*i + j - 100]; 265 266 define void @banerjee4(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 267 entry: 268 br label %for.cond1.preheader 269 270 ; CHECK: 'Dependence Analysis' for function 'banerjee4': 271 ; CHECK: da analyze - none! 272 ; CHECK: da analyze - none! 273 ; CHECK: da analyze - confused! 274 ; CHECK: da analyze - none! 275 ; CHECK: da analyze - confused! 276 ; CHECK: da analyze - none! 277 278 ; DELIN: 'Dependence Analysis' for function 'banerjee4': 279 ; DELIN: da analyze - none! 280 ; DELIN: da analyze - none! 281 ; DELIN: da analyze - confused! 282 ; DELIN: da analyze - none! 283 ; DELIN: da analyze - confused! 284 ; DELIN: da analyze - none! 285 286 for.cond1.preheader: ; preds = %entry, %for.inc7 287 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ] 288 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ] 289 br label %for.body3 290 291 for.body3: ; preds = %for.cond1.preheader, %for.body3 292 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 293 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 294 %mul = mul nsw i64 %i.03, 10 295 %add = add nsw i64 %mul, %j.02 296 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 297 store i64 0, i64* %arrayidx, align 8 298 %mul4 = mul nsw i64 %i.03, 10 299 %add5 = add nsw i64 %mul4, %j.02 300 %sub = add nsw i64 %add5, -100 301 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub 302 %0 = load i64, i64* %arrayidx6, align 8 303 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 304 store i64 %0, i64* %B.addr.11, align 8 305 %inc = add nsw i64 %j.02, 1 306 %exitcond = icmp ne i64 %inc, 10 307 br i1 %exitcond, label %for.body3, label %for.inc7 308 309 for.inc7: ; preds = %for.body3 310 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 311 %inc8 = add nsw i64 %i.03, 1 312 %exitcond5 = icmp ne i64 %inc8, 10 313 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9 314 315 for.end9: ; preds = %for.inc7 316 ret void 317 } 318 319 320 ;; for (long int i = 0; i < 10; i++) 321 ;; for (long int j = 0; j < 10; j++) { 322 ;; A[10*i + j] = 0; 323 ;; *B++ = A[10*i + j - 99]; 324 325 define void @banerjee5(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 326 entry: 327 br label %for.cond1.preheader 328 329 ; CHECK: 'Dependence Analysis' for function 'banerjee5': 330 ; CHECK: da analyze - none! 331 ; CHECK: da analyze - flow [< <]! 332 ; CHECK: da analyze - confused! 333 ; CHECK: da analyze - none! 334 ; CHECK: da analyze - confused! 335 ; CHECK: da analyze - none! 336 337 ; DELIN: 'Dependence Analysis' for function 'banerjee5': 338 ; DELIN: da analyze - none! 339 ; DELIN: da analyze - flow [< <]! 340 ; DELIN: da analyze - confused! 341 ; DELIN: da analyze - none! 342 ; DELIN: da analyze - confused! 343 ; DELIN: da analyze - none! 344 345 for.cond1.preheader: ; preds = %entry, %for.inc7 346 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ] 347 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ] 348 br label %for.body3 349 350 for.body3: ; preds = %for.cond1.preheader, %for.body3 351 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 352 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 353 %mul = mul nsw i64 %i.03, 10 354 %add = add nsw i64 %mul, %j.02 355 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 356 store i64 0, i64* %arrayidx, align 8 357 %mul4 = mul nsw i64 %i.03, 10 358 %add5 = add nsw i64 %mul4, %j.02 359 %sub = add nsw i64 %add5, -99 360 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %sub 361 %0 = load i64, i64* %arrayidx6, align 8 362 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 363 store i64 %0, i64* %B.addr.11, align 8 364 %inc = add nsw i64 %j.02, 1 365 %exitcond = icmp ne i64 %inc, 10 366 br i1 %exitcond, label %for.body3, label %for.inc7 367 368 for.inc7: ; preds = %for.body3 369 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 370 %inc8 = add nsw i64 %i.03, 1 371 %exitcond5 = icmp ne i64 %inc8, 10 372 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9 373 374 for.end9: ; preds = %for.inc7 375 ret void 376 } 377 378 379 ;; for (long int i = 0; i < 10; i++) 380 ;; for (long int j = 0; j < 10; j++) { 381 ;; A[10*i + j] = 0; 382 ;; *B++ = A[10*i + j + 9]; 383 384 define void @banerjee6(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 385 entry: 386 br label %for.cond1.preheader 387 388 ; CHECK: 'Dependence Analysis' for function 'banerjee6': 389 ; CHECK: da analyze - none! 390 ; CHECK: da analyze - flow [=> <>]! 391 ; CHECK: da analyze - confused! 392 ; CHECK: da analyze - none! 393 ; CHECK: da analyze - confused! 394 ; CHECK: da analyze - none! 395 396 ; DELIN: 'Dependence Analysis' for function 'banerjee6': 397 ; DELIN: da analyze - none! 398 ; DELIN: da analyze - flow [=> <>]! 399 ; DELIN: da analyze - confused! 400 ; DELIN: da analyze - none! 401 ; DELIN: da analyze - confused! 402 ; DELIN: da analyze - none! 403 404 for.cond1.preheader: ; preds = %entry, %for.inc8 405 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ] 406 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 407 br label %for.body3 408 409 for.body3: ; preds = %for.cond1.preheader, %for.body3 410 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 411 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 412 %mul = mul nsw i64 %i.03, 10 413 %add = add nsw i64 %mul, %j.02 414 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 415 store i64 0, i64* %arrayidx, align 8 416 %mul4 = mul nsw i64 %i.03, 10 417 %add5 = add nsw i64 %mul4, %j.02 418 %add6 = add nsw i64 %add5, 9 419 %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6 420 %0 = load i64, i64* %arrayidx7, align 8 421 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 422 store i64 %0, i64* %B.addr.11, align 8 423 %inc = add nsw i64 %j.02, 1 424 %exitcond = icmp ne i64 %inc, 10 425 br i1 %exitcond, label %for.body3, label %for.inc8 426 427 for.inc8: ; preds = %for.body3 428 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 429 %inc9 = add nsw i64 %i.03, 1 430 %exitcond5 = icmp ne i64 %inc9, 10 431 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 432 433 for.end10: ; preds = %for.inc8 434 ret void 435 } 436 437 438 ;; for (long int i = 0; i < 10; i++) 439 ;; for (long int j = 0; j < 10; j++) { 440 ;; A[10*i + j] = 0; 441 ;; *B++ = A[10*i + j + 10]; 442 443 define void @banerjee7(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 444 entry: 445 br label %for.cond1.preheader 446 447 ; CHECK: 'Dependence Analysis' for function 'banerjee7': 448 ; CHECK: da analyze - none! 449 ; CHECK: da analyze - flow [> <=]! 450 ; CHECK: da analyze - confused! 451 ; CHECK: da analyze - none! 452 ; CHECK: da analyze - confused! 453 ; CHECK: da analyze - none! 454 455 ; DELIN: 'Dependence Analysis' for function 'banerjee7': 456 ; DELIN: da analyze - none! 457 ; DELIN: da analyze - flow [> <=]! 458 ; DELIN: da analyze - confused! 459 ; DELIN: da analyze - none! 460 ; DELIN: da analyze - confused! 461 ; DELIN: da analyze - none! 462 463 for.cond1.preheader: ; preds = %entry, %for.inc8 464 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ] 465 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 466 br label %for.body3 467 468 for.body3: ; preds = %for.cond1.preheader, %for.body3 469 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 470 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 471 %mul = mul nsw i64 %i.03, 10 472 %add = add nsw i64 %mul, %j.02 473 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 474 store i64 0, i64* %arrayidx, align 8 475 %mul4 = mul nsw i64 %i.03, 10 476 %add5 = add nsw i64 %mul4, %j.02 477 %add6 = add nsw i64 %add5, 10 478 %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6 479 %0 = load i64, i64* %arrayidx7, align 8 480 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 481 store i64 %0, i64* %B.addr.11, align 8 482 %inc = add nsw i64 %j.02, 1 483 %exitcond = icmp ne i64 %inc, 10 484 br i1 %exitcond, label %for.body3, label %for.inc8 485 486 for.inc8: ; preds = %for.body3 487 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 488 %inc9 = add nsw i64 %i.03, 1 489 %exitcond5 = icmp ne i64 %inc9, 10 490 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 491 492 for.end10: ; preds = %for.inc8 493 ret void 494 } 495 496 497 ;; for (long int i = 0; i < 10; i++) 498 ;; for (long int j = 0; j < 10; j++) { 499 ;; A[10*i + j] = 0; 500 ;; *B++ = A[10*i + j + 11]; 501 502 define void @banerjee8(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 503 entry: 504 br label %for.cond1.preheader 505 506 ; CHECK: 'Dependence Analysis' for function 'banerjee8': 507 ; CHECK: da analyze - none! 508 ; CHECK: da analyze - flow [> <>]! 509 ; CHECK: da analyze - confused! 510 ; CHECK: da analyze - none! 511 ; CHECK: da analyze - confused! 512 ; CHECK: da analyze - none! 513 514 ; DELIN: 'Dependence Analysis' for function 'banerjee8': 515 ; DELIN: da analyze - none! 516 ; DELIN: da analyze - flow [> <>]! 517 ; DELIN: da analyze - confused! 518 ; DELIN: da analyze - none! 519 ; DELIN: da analyze - confused! 520 ; DELIN: da analyze - none! 521 522 for.cond1.preheader: ; preds = %entry, %for.inc8 523 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ] 524 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 525 br label %for.body3 526 527 for.body3: ; preds = %for.cond1.preheader, %for.body3 528 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 529 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 530 %mul = mul nsw i64 %i.03, 10 531 %add = add nsw i64 %mul, %j.02 532 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 533 store i64 0, i64* %arrayidx, align 8 534 %mul4 = mul nsw i64 %i.03, 10 535 %add5 = add nsw i64 %mul4, %j.02 536 %add6 = add nsw i64 %add5, 11 537 %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6 538 %0 = load i64, i64* %arrayidx7, align 8 539 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 540 store i64 %0, i64* %B.addr.11, align 8 541 %inc = add nsw i64 %j.02, 1 542 %exitcond = icmp ne i64 %inc, 10 543 br i1 %exitcond, label %for.body3, label %for.inc8 544 545 for.inc8: ; preds = %for.body3 546 %scevgep = getelementptr i64, i64* %B.addr.04, i64 10 547 %inc9 = add nsw i64 %i.03, 1 548 %exitcond5 = icmp ne i64 %inc9, 10 549 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 550 551 for.end10: ; preds = %for.inc8 552 ret void 553 } 554 555 556 ;; for (long int i = 0; i < 20; i++) 557 ;; for (long int j = 0; j < 20; j++) { 558 ;; A[30*i + 500*j] = 0; 559 ;; *B++ = A[i - 500*j + 11]; 560 561 define void @banerjee9(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 562 entry: 563 br label %for.cond1.preheader 564 565 ; CHECK: 'Dependence Analysis' for function 'banerjee9': 566 ; CHECK: da analyze - output [* *]! 567 ; CHECK: da analyze - flow [<= =|<]! 568 ; CHECK: da analyze - confused! 569 ; CHECK: da analyze - none! 570 ; CHECK: da analyze - confused! 571 ; CHECK: da analyze - none! 572 573 ; DELIN: 'Dependence Analysis' for function 'banerjee9': 574 ; DELIN: da analyze - output [* *]! 575 ; DELIN: da analyze - flow [<= =|<]! 576 ; DELIN: da analyze - confused! 577 ; DELIN: da analyze - none! 578 ; DELIN: da analyze - confused! 579 ; DELIN: da analyze - none! 580 581 for.cond1.preheader: ; preds = %entry, %for.inc8 582 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc8 ] 583 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ] 584 br label %for.body3 585 586 for.body3: ; preds = %for.cond1.preheader, %for.body3 587 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 588 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 589 %mul = mul nsw i64 %i.03, 30 590 %mul4 = mul nsw i64 %j.02, 500 591 %add = add nsw i64 %mul, %mul4 592 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 593 store i64 0, i64* %arrayidx, align 8 594 %0 = mul i64 %j.02, -500 595 %sub = add i64 %i.03, %0 596 %add6 = add nsw i64 %sub, 11 597 %arrayidx7 = getelementptr inbounds i64, i64* %A, i64 %add6 598 %1 = load i64, i64* %arrayidx7, align 8 599 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 600 store i64 %1, i64* %B.addr.11, align 8 601 %inc = add nsw i64 %j.02, 1 602 %exitcond = icmp ne i64 %inc, 20 603 br i1 %exitcond, label %for.body3, label %for.inc8 604 605 for.inc8: ; preds = %for.body3 606 %scevgep = getelementptr i64, i64* %B.addr.04, i64 20 607 %inc9 = add nsw i64 %i.03, 1 608 %exitcond5 = icmp ne i64 %inc9, 20 609 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10 610 611 for.end10: ; preds = %for.inc8 612 ret void 613 } 614 615 616 ;; for (long int i = 0; i < 20; i++) 617 ;; for (long int j = 0; j < 20; j++) { 618 ;; A[i + 500*j] = 0; 619 ;; *B++ = A[i - 500*j + 11]; 620 621 define void @banerjee10(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 622 entry: 623 br label %for.cond1.preheader 624 625 ; CHECK: 'Dependence Analysis' for function 'banerjee10': 626 ; CHECK: da analyze - none! 627 ; CHECK: da analyze - flow [<> =]! 628 ; CHECK: da analyze - confused! 629 ; CHECK: da analyze - none! 630 ; CHECK: da analyze - confused! 631 ; CHECK: da analyze - none! 632 633 ; DELIN: 'Dependence Analysis' for function 'banerjee10': 634 ; DELIN: da analyze - none! 635 ; DELIN: da analyze - flow [<> =]! 636 ; DELIN: da analyze - confused! 637 ; DELIN: da analyze - none! 638 ; DELIN: da analyze - confused! 639 ; DELIN: da analyze - none! 640 641 for.cond1.preheader: ; preds = %entry, %for.inc7 642 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ] 643 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ] 644 br label %for.body3 645 646 for.body3: ; preds = %for.cond1.preheader, %for.body3 647 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 648 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 649 %mul = mul nsw i64 %j.02, 500 650 %add = add nsw i64 %i.03, %mul 651 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 652 store i64 0, i64* %arrayidx, align 8 653 %0 = mul i64 %j.02, -500 654 %sub = add i64 %i.03, %0 655 %add5 = add nsw i64 %sub, 11 656 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5 657 %1 = load i64, i64* %arrayidx6, align 8 658 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 659 store i64 %1, i64* %B.addr.11, align 8 660 %inc = add nsw i64 %j.02, 1 661 %exitcond = icmp ne i64 %inc, 20 662 br i1 %exitcond, label %for.body3, label %for.inc7 663 664 for.inc7: ; preds = %for.body3 665 %scevgep = getelementptr i64, i64* %B.addr.04, i64 20 666 %inc8 = add nsw i64 %i.03, 1 667 %exitcond5 = icmp ne i64 %inc8, 20 668 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9 669 670 for.end9: ; preds = %for.inc7 671 ret void 672 } 673 674 675 ;; for (long int i = 0; i < 20; i++) 676 ;; for (long int j = 0; j < 20; j++) { 677 ;; A[300*i + j] = 0; 678 ;; *B++ = A[250*i - j + 11]; 679 680 define void @banerjee11(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 681 entry: 682 br label %for.cond1.preheader 683 684 ; CHECK: 'Dependence Analysis' for function 'banerjee11': 685 ; CHECK: da analyze - none! 686 ; CHECK: da analyze - flow [<= <>]! 687 ; CHECK: da analyze - confused! 688 ; CHECK: da analyze - none! 689 ; CHECK: da analyze - confused! 690 ; CHECK: da analyze - none! 691 692 ; DELIN: 'Dependence Analysis' for function 'banerjee11': 693 ; DELIN: da analyze - none! 694 ; DELIN: da analyze - flow [<= <>]! 695 ; DELIN: da analyze - confused! 696 ; DELIN: da analyze - none! 697 ; DELIN: da analyze - confused! 698 ; DELIN: da analyze - none! 699 700 for.cond1.preheader: ; preds = %entry, %for.inc7 701 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ] 702 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ] 703 br label %for.body3 704 705 for.body3: ; preds = %for.cond1.preheader, %for.body3 706 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 707 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 708 %mul = mul nsw i64 %i.03, 300 709 %add = add nsw i64 %mul, %j.02 710 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 711 store i64 0, i64* %arrayidx, align 8 712 %mul4 = mul nsw i64 %i.03, 250 713 %sub = sub nsw i64 %mul4, %j.02 714 %add5 = add nsw i64 %sub, 11 715 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5 716 %0 = load i64, i64* %arrayidx6, align 8 717 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 718 store i64 %0, i64* %B.addr.11, align 8 719 %inc = add nsw i64 %j.02, 1 720 %exitcond = icmp ne i64 %inc, 20 721 br i1 %exitcond, label %for.body3, label %for.inc7 722 723 for.inc7: ; preds = %for.body3 724 %scevgep = getelementptr i64, i64* %B.addr.04, i64 20 725 %inc8 = add nsw i64 %i.03, 1 726 %exitcond5 = icmp ne i64 %inc8, 20 727 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9 728 729 for.end9: ; preds = %for.inc7 730 ret void 731 } 732 733 734 ;; for (long int i = 0; i < 20; i++) 735 ;; for (long int j = 0; j < 20; j++) { 736 ;; A[100*i + j] = 0; 737 ;; *B++ = A[100*i - j + 11]; 738 739 define void @banerjee12(i64* %A, i64* %B, i64 %m, i64 %n) nounwind uwtable ssp { 740 entry: 741 br label %for.cond1.preheader 742 743 ; CHECK: 'Dependence Analysis' for function 'banerjee12': 744 ; CHECK: da analyze - none! 745 ; CHECK: da analyze - flow [= <>]! 746 ; CHECK: da analyze - confused! 747 ; CHECK: da analyze - none! 748 ; CHECK: da analyze - confused! 749 ; CHECK: da analyze - none! 750 751 ; DELIN: 'Dependence Analysis' for function 'banerjee12': 752 ; DELIN: da analyze - none! 753 ; DELIN: da analyze - flow [= <>]! 754 ; DELIN: da analyze - confused! 755 ; DELIN: da analyze - none! 756 ; DELIN: da analyze - confused! 757 ; DELIN: da analyze - none! 758 759 for.cond1.preheader: ; preds = %entry, %for.inc7 760 %B.addr.04 = phi i64* [ %B, %entry ], [ %scevgep, %for.inc7 ] 761 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ] 762 br label %for.body3 763 764 for.body3: ; preds = %for.cond1.preheader, %for.body3 765 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ] 766 %B.addr.11 = phi i64* [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ] 767 %mul = mul nsw i64 %i.03, 100 768 %add = add nsw i64 %mul, %j.02 769 %arrayidx = getelementptr inbounds i64, i64* %A, i64 %add 770 store i64 0, i64* %arrayidx, align 8 771 %mul4 = mul nsw i64 %i.03, 100 772 %sub = sub nsw i64 %mul4, %j.02 773 %add5 = add nsw i64 %sub, 11 774 %arrayidx6 = getelementptr inbounds i64, i64* %A, i64 %add5 775 %0 = load i64, i64* %arrayidx6, align 8 776 %incdec.ptr = getelementptr inbounds i64, i64* %B.addr.11, i64 1 777 store i64 %0, i64* %B.addr.11, align 8 778 %inc = add nsw i64 %j.02, 1 779 %exitcond = icmp ne i64 %inc, 20 780 br i1 %exitcond, label %for.body3, label %for.inc7 781 782 for.inc7: ; preds = %for.body3 783 %scevgep = getelementptr i64, i64* %B.addr.04, i64 20 784 %inc8 = add nsw i64 %i.03, 1 785 %exitcond5 = icmp ne i64 %inc8, 20 786 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9 787 788 for.end9: ; preds = %for.inc7 789 ret void 790 } 791