1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5 2; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \ 3; RUN: | FileCheck %s 4 5; ModuleID = 'SymbolicRDIV.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 10;; for (long int i = 0; i < n1; i++) 11;; A[2*i + n1] = i; 12;; for (long int j = 0; j < n2; j++) 13;; *B++ = A[3*j + 3*n1]; 14 15define void @symbolicrdiv0(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 16; CHECK-LABEL: 'symbolicrdiv0' 17; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 18; CHECK-NEXT: da analyze - none! 19; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4 20; CHECK-NEXT: da analyze - none! 21; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 22; CHECK-NEXT: da analyze - confused! 23; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4 24; CHECK-NEXT: da analyze - none! 25; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 26; CHECK-NEXT: da analyze - confused! 27; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 28; CHECK-NEXT: da analyze - none! 29; 30entry: 31 %cmp4 = icmp eq i64 %n1, 0 32 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader 33 34for.body.preheader: ; preds = %entry 35 br label %for.body 36 37for.cond1.preheader.loopexit: ; preds = %for.body 38 br label %for.cond1.preheader 39 40for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry 41 %cmp21 = icmp eq i64 %n2, 0 42 br i1 %cmp21, label %for.end11, label %for.body4.preheader 43 44for.body4.preheader: ; preds = %for.cond1.preheader 45 br label %for.body4 46 47for.body: ; preds = %for.body.preheader, %for.body 48 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 49 %conv = trunc i64 %i.05 to i32 50 %mul = shl nsw i64 %i.05, 1 51 %add = add i64 %mul, %n1 52 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 53 store i32 %conv, ptr %arrayidx, align 4 54 %inc = add nsw i64 %i.05, 1 55 %exitcond = icmp ne i64 %inc, %n1 56 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit 57 58for.body4: ; preds = %for.body4.preheader, %for.body4 59 %j.03 = phi i64 [ %inc10, %for.body4 ], [ 0, %for.body4.preheader ] 60 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ] 61 %mul56 = add i64 %j.03, %n1 62 %add7 = mul i64 %mul56, 3 63 %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7 64 %0 = load i32, ptr %arrayidx8, align 4 65 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1 66 store i32 %0, ptr %B.addr.02, align 4 67 %inc10 = add nsw i64 %j.03, 1 68 %exitcond7 = icmp ne i64 %inc10, %n2 69 br i1 %exitcond7, label %for.body4, label %for.end11.loopexit 70 71for.end11.loopexit: ; preds = %for.body4 72 br label %for.end11 73 74for.end11: ; preds = %for.end11.loopexit, %for.cond1.preheader 75 ret void 76} 77 78 79;; for (long int i = 0; i < n1; i++) 80;; A[2*i + 5*n2] = i; 81;; for (long int j = 0; j < n2; j++) 82;; *B++ = A[3*j + 2*n2]; 83 84define void @symbolicrdiv1(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 85; CHECK-LABEL: 'symbolicrdiv1' 86; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 87; CHECK-NEXT: da analyze - none! 88; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 4 89; CHECK-NEXT: da analyze - none! 90; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 91; CHECK-NEXT: da analyze - confused! 92; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 4 93; CHECK-NEXT: da analyze - none! 94; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 95; CHECK-NEXT: da analyze - confused! 96; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 97; CHECK-NEXT: da analyze - none! 98; 99entry: 100 %cmp4 = icmp eq i64 %n1, 0 101 br i1 %cmp4, label %for.cond2.preheader, label %for.body.preheader 102 103for.body.preheader: ; preds = %entry 104 br label %for.body 105 106for.cond2.preheader.loopexit: ; preds = %for.body 107 br label %for.cond2.preheader 108 109for.cond2.preheader: ; preds = %for.cond2.preheader.loopexit, %entry 110 %cmp31 = icmp eq i64 %n2, 0 111 br i1 %cmp31, label %for.end12, label %for.body5.preheader 112 113for.body5.preheader: ; preds = %for.cond2.preheader 114 br label %for.body5 115 116for.body: ; preds = %for.body.preheader, %for.body 117 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 118 %conv = trunc i64 %i.05 to i32 119 %mul = shl nsw i64 %i.05, 1 120 %mul1 = mul i64 %n2, 5 121 %add = add i64 %mul, %mul1 122 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 123 store i32 %conv, ptr %arrayidx, align 4 124 %inc = add nsw i64 %i.05, 1 125 %exitcond = icmp ne i64 %inc, %n1 126 br i1 %exitcond, label %for.body, label %for.cond2.preheader.loopexit 127 128for.body5: ; preds = %for.body5.preheader, %for.body5 129 %j.03 = phi i64 [ %inc11, %for.body5 ], [ 0, %for.body5.preheader ] 130 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body5 ], [ %B, %for.body5.preheader ] 131 %mul6 = mul nsw i64 %j.03, 3 132 %mul7 = shl i64 %n2, 1 133 %add8 = add i64 %mul6, %mul7 134 %arrayidx9 = getelementptr inbounds i32, ptr %A, i64 %add8 135 %0 = load i32, ptr %arrayidx9, align 4 136 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1 137 store i32 %0, ptr %B.addr.02, align 4 138 %inc11 = add nsw i64 %j.03, 1 139 %exitcond6 = icmp ne i64 %inc11, %n2 140 br i1 %exitcond6, label %for.body5, label %for.end12.loopexit 141 142for.end12.loopexit: ; preds = %for.body5 143 br label %for.end12 144 145for.end12: ; preds = %for.end12.loopexit, %for.cond2.preheader 146 ret void 147} 148 149 150;; for (long int i = 0; i < n1; i++) 151;; A[2*i - n2] = i; 152;; for (long int j = 0; j < n2; j++) 153;; *B++ = A[-j + 2*n1]; 154 155define void @symbolicrdiv2(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 156; CHECK-LABEL: 'symbolicrdiv2' 157; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 158; CHECK-NEXT: da analyze - none! 159; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4 160; CHECK-NEXT: da analyze - none! 161; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 162; CHECK-NEXT: da analyze - confused! 163; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4 164; CHECK-NEXT: da analyze - none! 165; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 166; CHECK-NEXT: da analyze - confused! 167; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 168; CHECK-NEXT: da analyze - none! 169; 170entry: 171 %cmp4 = icmp eq i64 %n1, 0 172 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader 173 174for.body.preheader: ; preds = %entry 175 br label %for.body 176 177for.cond1.preheader.loopexit: ; preds = %for.body 178 br label %for.cond1.preheader 179 180for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry 181 %cmp21 = icmp eq i64 %n2, 0 182 br i1 %cmp21, label %for.end10, label %for.body4.preheader 183 184for.body4.preheader: ; preds = %for.cond1.preheader 185 br label %for.body4 186 187for.body: ; preds = %for.body.preheader, %for.body 188 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 189 %conv = trunc i64 %i.05 to i32 190 %mul = shl nsw i64 %i.05, 1 191 %sub = sub i64 %mul, %n2 192 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub 193 store i32 %conv, ptr %arrayidx, align 4 194 %inc = add nsw i64 %i.05, 1 195 %exitcond = icmp ne i64 %inc, %n1 196 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit 197 198for.body4: ; preds = %for.body4.preheader, %for.body4 199 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ] 200 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ] 201 %mul6 = shl i64 %n1, 1 202 %add = sub i64 %mul6, %j.03 203 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add 204 %0 = load i32, ptr %arrayidx7, align 4 205 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1 206 store i32 %0, ptr %B.addr.02, align 4 207 %inc9 = add nsw i64 %j.03, 1 208 %exitcond6 = icmp ne i64 %inc9, %n2 209 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit 210 211for.end10.loopexit: ; preds = %for.body4 212 br label %for.end10 213 214for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader 215 ret void 216} 217 218 219;; for (long int i = 0; i < n1; i++) 220;; A[-i + n2] = i; 221;; for (long int j = 0; j < n2; j++) 222;; *B++ = A[j - n1]; 223 224define void @symbolicrdiv3(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 225; CHECK-LABEL: 'symbolicrdiv3' 226; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 227; CHECK-NEXT: da analyze - none! 228; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx6, align 4 229; CHECK-NEXT: da analyze - none! 230; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 231; CHECK-NEXT: da analyze - confused! 232; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx6, align 4 233; CHECK-NEXT: da analyze - none! 234; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx6, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 235; CHECK-NEXT: da analyze - confused! 236; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 237; CHECK-NEXT: da analyze - none! 238; 239entry: 240 %cmp4 = icmp eq i64 %n1, 0 241 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader 242 243for.body.preheader: ; preds = %entry 244 br label %for.body 245 246for.cond1.preheader.loopexit: ; preds = %for.body 247 br label %for.cond1.preheader 248 249for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry 250 %cmp21 = icmp eq i64 %n2, 0 251 br i1 %cmp21, label %for.end9, label %for.body4.preheader 252 253for.body4.preheader: ; preds = %for.cond1.preheader 254 br label %for.body4 255 256for.body: ; preds = %for.body.preheader, %for.body 257 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 258 %conv = trunc i64 %i.05 to i32 259 %add = sub i64 %n2, %i.05 260 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 261 store i32 %conv, ptr %arrayidx, align 4 262 %inc = add nsw i64 %i.05, 1 263 %exitcond = icmp ne i64 %inc, %n1 264 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit 265 266for.body4: ; preds = %for.body4.preheader, %for.body4 267 %j.03 = phi i64 [ %inc8, %for.body4 ], [ 0, %for.body4.preheader ] 268 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ] 269 %sub5 = sub i64 %j.03, %n1 270 %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %sub5 271 %0 = load i32, ptr %arrayidx6, align 4 272 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1 273 store i32 %0, ptr %B.addr.02, align 4 274 %inc8 = add nsw i64 %j.03, 1 275 %exitcond6 = icmp ne i64 %inc8, %n2 276 br i1 %exitcond6, label %for.body4, label %for.end9.loopexit 277 278for.end9.loopexit: ; preds = %for.body4 279 br label %for.end9 280 281for.end9: ; preds = %for.end9.loopexit, %for.cond1.preheader 282 ret void 283} 284 285 286;; for (long int i = 0; i < n1; i++) 287;; A[-i + 2*n1] = i; 288;; for (long int j = 0; j < n2; j++) 289;; *B++ = A[-j + n1]; 290 291define void @symbolicrdiv4(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 292; CHECK-LABEL: 'symbolicrdiv4' 293; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 294; CHECK-NEXT: da analyze - none! 295; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4 296; CHECK-NEXT: da analyze - none! 297; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 298; CHECK-NEXT: da analyze - confused! 299; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4 300; CHECK-NEXT: da analyze - none! 301; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 302; CHECK-NEXT: da analyze - confused! 303; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 304; CHECK-NEXT: da analyze - none! 305; 306entry: 307 %cmp4 = icmp eq i64 %n1, 0 308 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader 309 310for.body.preheader: ; preds = %entry 311 br label %for.body 312 313for.cond1.preheader.loopexit: ; preds = %for.body 314 br label %for.cond1.preheader 315 316for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry 317 %cmp21 = icmp eq i64 %n2, 0 318 br i1 %cmp21, label %for.end10, label %for.body4.preheader 319 320for.body4.preheader: ; preds = %for.cond1.preheader 321 br label %for.body4 322 323for.body: ; preds = %for.body.preheader, %for.body 324 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 325 %conv = trunc i64 %i.05 to i32 326 %mul = shl i64 %n1, 1 327 %add = sub i64 %mul, %i.05 328 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 329 store i32 %conv, ptr %arrayidx, align 4 330 %inc = add nsw i64 %i.05, 1 331 %exitcond = icmp ne i64 %inc, %n1 332 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit 333 334for.body4: ; preds = %for.body4.preheader, %for.body4 335 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ] 336 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ] 337 %add6 = sub i64 %n1, %j.03 338 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6 339 %0 = load i32, ptr %arrayidx7, align 4 340 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1 341 store i32 %0, ptr %B.addr.02, align 4 342 %inc9 = add nsw i64 %j.03, 1 343 %exitcond6 = icmp ne i64 %inc9, %n2 344 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit 345 346for.end10.loopexit: ; preds = %for.body4 347 br label %for.end10 348 349for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader 350 ret void 351} 352 353 354;; for (long int i = 0; i < n1; i++) 355;; A[-i + n2] = i; 356;; for (long int j = 0; j < n2; j++) 357;; *B++ = A[-j + 2*n2]; 358 359define void @symbolicrdiv5(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 360; CHECK-LABEL: 'symbolicrdiv5' 361; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 362; CHECK-NEXT: da analyze - none! 363; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4 364; CHECK-NEXT: da analyze - none! 365; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 366; CHECK-NEXT: da analyze - confused! 367; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4 368; CHECK-NEXT: da analyze - none! 369; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 370; CHECK-NEXT: da analyze - confused! 371; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 372; CHECK-NEXT: da analyze - none! 373; 374entry: 375 %cmp4 = icmp eq i64 %n1, 0 376 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader 377 378for.body.preheader: ; preds = %entry 379 br label %for.body 380 381for.cond1.preheader.loopexit: ; preds = %for.body 382 br label %for.cond1.preheader 383 384for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry 385 %cmp21 = icmp eq i64 %n2, 0 386 br i1 %cmp21, label %for.end10, label %for.body4.preheader 387 388for.body4.preheader: ; preds = %for.cond1.preheader 389 br label %for.body4 390 391for.body: ; preds = %for.body.preheader, %for.body 392 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ] 393 %conv = trunc i64 %i.05 to i32 394 %add = sub i64 %n2, %i.05 395 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 396 store i32 %conv, ptr %arrayidx, align 4 397 %inc = add nsw i64 %i.05, 1 398 %exitcond = icmp ne i64 %inc, %n1 399 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit 400 401for.body4: ; preds = %for.body4.preheader, %for.body4 402 %j.03 = phi i64 [ %inc9, %for.body4 ], [ 0, %for.body4.preheader ] 403 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body4 ], [ %B, %for.body4.preheader ] 404 %mul = shl i64 %n2, 1 405 %add6 = sub i64 %mul, %j.03 406 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6 407 %0 = load i32, ptr %arrayidx7, align 4 408 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1 409 store i32 %0, ptr %B.addr.02, align 4 410 %inc9 = add nsw i64 %j.03, 1 411 %exitcond6 = icmp ne i64 %inc9, %n2 412 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit 413 414for.end10.loopexit: ; preds = %for.body4 415 br label %for.end10 416 417for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader 418 ret void 419} 420 421 422;; for (long int i = 0; i < n1; i++) 423;; for (long int j = 0; j < n2; j++) { 424;; A[j -i + n2] = i; 425;; *B++ = A[2*n2]; 426 427define void @symbolicrdiv6(ptr %A, ptr %B, i64 %n1, i64 %n2) nounwind uwtable ssp { 428; CHECK-LABEL: 'symbolicrdiv6' 429; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 430; CHECK-NEXT: da analyze - output [* *]! 431; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4 432; CHECK-NEXT: da analyze - none! 433; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.12, align 4 434; CHECK-NEXT: da analyze - confused! 435; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4 436; CHECK-NEXT: da analyze - consistent input [S S]! 437; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.12, align 4 438; CHECK-NEXT: da analyze - confused! 439; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.12, align 4 --> Dst: store i32 %0, ptr %B.addr.12, align 4 440; CHECK-NEXT: da analyze - output [* *]! 441; 442entry: 443 %cmp4 = icmp eq i64 %n1, 0 444 br i1 %cmp4, label %for.end7, label %for.cond1.preheader.preheader 445 446for.cond1.preheader.preheader: ; preds = %entry 447 br label %for.cond1.preheader 448 449for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc5 450 %B.addr.06 = phi ptr [ %B.addr.1.lcssa, %for.inc5 ], [ %B, %for.cond1.preheader.preheader ] 451 %i.05 = phi i64 [ %inc6, %for.inc5 ], [ 0, %for.cond1.preheader.preheader ] 452 %cmp21 = icmp eq i64 %n2, 0 453 br i1 %cmp21, label %for.inc5, label %for.body3.preheader 454 455for.body3.preheader: ; preds = %for.cond1.preheader 456 br label %for.body3 457 458for.body3: ; preds = %for.body3.preheader, %for.body3 459 %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ] 460 %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ] 461 %conv = trunc i64 %i.05 to i32 462 %sub = sub nsw i64 %j.03, %i.05 463 %add = add i64 %sub, %n2 464 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 465 store i32 %conv, ptr %arrayidx, align 4 466 %mul = shl i64 %n2, 1 467 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %mul 468 %0 = load i32, ptr %arrayidx4, align 4 469 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1 470 store i32 %0, ptr %B.addr.12, align 4 471 %inc = add nsw i64 %j.03, 1 472 %exitcond = icmp ne i64 %inc, %n2 473 br i1 %exitcond, label %for.body3, label %for.inc5.loopexit 474 475for.inc5.loopexit: ; preds = %for.body3 476 %scevgep = getelementptr i32, ptr %B.addr.06, i64 %n2 477 br label %for.inc5 478 479for.inc5: ; preds = %for.inc5.loopexit, %for.cond1.preheader 480 %B.addr.1.lcssa = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc5.loopexit ] 481 %inc6 = add nsw i64 %i.05, 1 482 %exitcond7 = icmp ne i64 %inc6, %n1 483 br i1 %exitcond7, label %for.cond1.preheader, label %for.end7.loopexit 484 485for.end7.loopexit: ; preds = %for.inc5 486 br label %for.end7 487 488for.end7: ; preds = %for.end7.loopexit, %entry 489 ret void 490} 491