491 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \3; RUN: | FileCheck %s4 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 418; CHECK-NEXT: da analyze - none!19; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 420; 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 422; CHECK-NEXT: da analyze - confused!23; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 424; 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 426; 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 428; CHECK-NEXT: da analyze - none!29;30entry:31 %cmp4 = icmp eq i64 %n1, 032 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader33 34for.body.preheader: ; preds = %entry35 br label %for.body36 37for.cond1.preheader.loopexit: ; preds = %for.body38 br label %for.cond1.preheader39 40for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry41 %cmp21 = icmp eq i64 %n2, 042 br i1 %cmp21, label %for.end11, label %for.body4.preheader43 44for.body4.preheader: ; preds = %for.cond1.preheader45 br label %for.body446 47for.body: ; preds = %for.body.preheader, %for.body48 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]49 %conv = trunc i64 %i.05 to i3250 %mul = shl nsw i64 %i.05, 151 %add = add i64 %mul, %n152 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add53 store i32 %conv, ptr %arrayidx, align 454 %inc = add nsw i64 %i.05, 155 %exitcond = icmp ne i64 %inc, %n156 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit57 58for.body4: ; preds = %for.body4.preheader, %for.body459 %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, %n162 %add7 = mul i64 %mul56, 363 %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add764 %0 = load i32, ptr %arrayidx8, align 465 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 166 store i32 %0, ptr %B.addr.02, align 467 %inc10 = add nsw i64 %j.03, 168 %exitcond7 = icmp ne i64 %inc10, %n269 br i1 %exitcond7, label %for.body4, label %for.end11.loopexit70 71for.end11.loopexit: ; preds = %for.body472 br label %for.end1173 74for.end11: ; preds = %for.end11.loopexit, %for.cond1.preheader75 ret void76}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 487; CHECK-NEXT: da analyze - none!88; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 489; 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 491; CHECK-NEXT: da analyze - confused!92; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 493; 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 495; 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 497; CHECK-NEXT: da analyze - none!98;99entry:100 %cmp4 = icmp eq i64 %n1, 0101 br i1 %cmp4, label %for.cond2.preheader, label %for.body.preheader102 103for.body.preheader: ; preds = %entry104 br label %for.body105 106for.cond2.preheader.loopexit: ; preds = %for.body107 br label %for.cond2.preheader108 109for.cond2.preheader: ; preds = %for.cond2.preheader.loopexit, %entry110 %cmp31 = icmp eq i64 %n2, 0111 br i1 %cmp31, label %for.end12, label %for.body5.preheader112 113for.body5.preheader: ; preds = %for.cond2.preheader114 br label %for.body5115 116for.body: ; preds = %for.body.preheader, %for.body117 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]118 %conv = trunc i64 %i.05 to i32119 %mul = shl nsw i64 %i.05, 1120 %mul1 = mul i64 %n2, 5121 %add = add i64 %mul, %mul1122 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add123 store i32 %conv, ptr %arrayidx, align 4124 %inc = add nsw i64 %i.05, 1125 %exitcond = icmp ne i64 %inc, %n1126 br i1 %exitcond, label %for.body, label %for.cond2.preheader.loopexit127 128for.body5: ; preds = %for.body5.preheader, %for.body5129 %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, 3132 %mul7 = shl i64 %n2, 1133 %add8 = add i64 %mul6, %mul7134 %arrayidx9 = getelementptr inbounds i32, ptr %A, i64 %add8135 %0 = load i32, ptr %arrayidx9, align 4136 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1137 store i32 %0, ptr %B.addr.02, align 4138 %inc11 = add nsw i64 %j.03, 1139 %exitcond6 = icmp ne i64 %inc11, %n2140 br i1 %exitcond6, label %for.body5, label %for.end12.loopexit141 142for.end12.loopexit: ; preds = %for.body5143 br label %for.end12144 145for.end12: ; preds = %for.end12.loopexit, %for.cond2.preheader146 ret void147}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 4158; CHECK-NEXT: da analyze - none!159; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4160; 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 4162; CHECK-NEXT: da analyze - confused!163; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4164; 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 4166; 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 4168; CHECK-NEXT: da analyze - none!169;170entry:171 %cmp4 = icmp eq i64 %n1, 0172 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader173 174for.body.preheader: ; preds = %entry175 br label %for.body176 177for.cond1.preheader.loopexit: ; preds = %for.body178 br label %for.cond1.preheader179 180for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry181 %cmp21 = icmp eq i64 %n2, 0182 br i1 %cmp21, label %for.end10, label %for.body4.preheader183 184for.body4.preheader: ; preds = %for.cond1.preheader185 br label %for.body4186 187for.body: ; preds = %for.body.preheader, %for.body188 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]189 %conv = trunc i64 %i.05 to i32190 %mul = shl nsw i64 %i.05, 1191 %sub = sub i64 %mul, %n2192 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub193 store i32 %conv, ptr %arrayidx, align 4194 %inc = add nsw i64 %i.05, 1195 %exitcond = icmp ne i64 %inc, %n1196 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit197 198for.body4: ; preds = %for.body4.preheader, %for.body4199 %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, 1202 %add = sub i64 %mul6, %j.03203 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add204 %0 = load i32, ptr %arrayidx7, align 4205 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1206 store i32 %0, ptr %B.addr.02, align 4207 %inc9 = add nsw i64 %j.03, 1208 %exitcond6 = icmp ne i64 %inc9, %n2209 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit210 211for.end10.loopexit: ; preds = %for.body4212 br label %for.end10213 214for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader215 ret void216}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 4227; CHECK-NEXT: da analyze - none!228; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx6, align 4229; 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 4231; CHECK-NEXT: da analyze - confused!232; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx6, align 4233; 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 4235; 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 4237; CHECK-NEXT: da analyze - none!238;239entry:240 %cmp4 = icmp eq i64 %n1, 0241 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader242 243for.body.preheader: ; preds = %entry244 br label %for.body245 246for.cond1.preheader.loopexit: ; preds = %for.body247 br label %for.cond1.preheader248 249for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry250 %cmp21 = icmp eq i64 %n2, 0251 br i1 %cmp21, label %for.end9, label %for.body4.preheader252 253for.body4.preheader: ; preds = %for.cond1.preheader254 br label %for.body4255 256for.body: ; preds = %for.body.preheader, %for.body257 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]258 %conv = trunc i64 %i.05 to i32259 %add = sub i64 %n2, %i.05260 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add261 store i32 %conv, ptr %arrayidx, align 4262 %inc = add nsw i64 %i.05, 1263 %exitcond = icmp ne i64 %inc, %n1264 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit265 266for.body4: ; preds = %for.body4.preheader, %for.body4267 %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, %n1270 %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %sub5271 %0 = load i32, ptr %arrayidx6, align 4272 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1273 store i32 %0, ptr %B.addr.02, align 4274 %inc8 = add nsw i64 %j.03, 1275 %exitcond6 = icmp ne i64 %inc8, %n2276 br i1 %exitcond6, label %for.body4, label %for.end9.loopexit277 278for.end9.loopexit: ; preds = %for.body4279 br label %for.end9280 281for.end9: ; preds = %for.end9.loopexit, %for.cond1.preheader282 ret void283}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 4294; CHECK-NEXT: da analyze - none!295; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4296; 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 4298; CHECK-NEXT: da analyze - confused!299; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4300; 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 4302; 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 4304; CHECK-NEXT: da analyze - none!305;306entry:307 %cmp4 = icmp eq i64 %n1, 0308 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader309 310for.body.preheader: ; preds = %entry311 br label %for.body312 313for.cond1.preheader.loopexit: ; preds = %for.body314 br label %for.cond1.preheader315 316for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry317 %cmp21 = icmp eq i64 %n2, 0318 br i1 %cmp21, label %for.end10, label %for.body4.preheader319 320for.body4.preheader: ; preds = %for.cond1.preheader321 br label %for.body4322 323for.body: ; preds = %for.body.preheader, %for.body324 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]325 %conv = trunc i64 %i.05 to i32326 %mul = shl i64 %n1, 1327 %add = sub i64 %mul, %i.05328 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add329 store i32 %conv, ptr %arrayidx, align 4330 %inc = add nsw i64 %i.05, 1331 %exitcond = icmp ne i64 %inc, %n1332 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit333 334for.body4: ; preds = %for.body4.preheader, %for.body4335 %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.03338 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6339 %0 = load i32, ptr %arrayidx7, align 4340 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1341 store i32 %0, ptr %B.addr.02, align 4342 %inc9 = add nsw i64 %j.03, 1343 %exitcond6 = icmp ne i64 %inc9, %n2344 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit345 346for.end10.loopexit: ; preds = %for.body4347 br label %for.end10348 349for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader350 ret void351}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 4362; CHECK-NEXT: da analyze - none!363; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4364; 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 4366; CHECK-NEXT: da analyze - confused!367; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4368; 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 4370; 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 4372; CHECK-NEXT: da analyze - none!373;374entry:375 %cmp4 = icmp eq i64 %n1, 0376 br i1 %cmp4, label %for.cond1.preheader, label %for.body.preheader377 378for.body.preheader: ; preds = %entry379 br label %for.body380 381for.cond1.preheader.loopexit: ; preds = %for.body382 br label %for.cond1.preheader383 384for.cond1.preheader: ; preds = %for.cond1.preheader.loopexit, %entry385 %cmp21 = icmp eq i64 %n2, 0386 br i1 %cmp21, label %for.end10, label %for.body4.preheader387 388for.body4.preheader: ; preds = %for.cond1.preheader389 br label %for.body4390 391for.body: ; preds = %for.body.preheader, %for.body392 %i.05 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]393 %conv = trunc i64 %i.05 to i32394 %add = sub i64 %n2, %i.05395 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add396 store i32 %conv, ptr %arrayidx, align 4397 %inc = add nsw i64 %i.05, 1398 %exitcond = icmp ne i64 %inc, %n1399 br i1 %exitcond, label %for.body, label %for.cond1.preheader.loopexit400 401for.body4: ; preds = %for.body4.preheader, %for.body4402 %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, 1405 %add6 = sub i64 %mul, %j.03406 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6407 %0 = load i32, ptr %arrayidx7, align 4408 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1409 store i32 %0, ptr %B.addr.02, align 4410 %inc9 = add nsw i64 %j.03, 1411 %exitcond6 = icmp ne i64 %inc9, %n2412 br i1 %exitcond6, label %for.body4, label %for.end10.loopexit413 414for.end10.loopexit: ; preds = %for.body4415 br label %for.end10416 417for.end10: ; preds = %for.end10.loopexit, %for.cond1.preheader418 ret void419}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 4430; CHECK-NEXT: da analyze - output [* *]!431; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4432; 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 4434; CHECK-NEXT: da analyze - confused!435; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4436; 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 4438; 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 4440; CHECK-NEXT: da analyze - confused!441;442entry:443 %cmp4 = icmp eq i64 %n1, 0444 br i1 %cmp4, label %for.end7, label %for.cond1.preheader.preheader445 446for.cond1.preheader.preheader: ; preds = %entry447 br label %for.cond1.preheader448 449for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc5450 %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, 0453 br i1 %cmp21, label %for.inc5, label %for.body3.preheader454 455for.body3.preheader: ; preds = %for.cond1.preheader456 br label %for.body3457 458for.body3: ; preds = %for.body3.preheader, %for.body3459 %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 i32462 %sub = sub nsw i64 %j.03, %i.05463 %add = add i64 %sub, %n2464 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add465 store i32 %conv, ptr %arrayidx, align 4466 %mul = shl i64 %n2, 1467 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %mul468 %0 = load i32, ptr %arrayidx4, align 4469 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1470 store i32 %0, ptr %B.addr.12, align 4471 %inc = add nsw i64 %j.03, 1472 %exitcond = icmp ne i64 %inc, %n2473 br i1 %exitcond, label %for.body3, label %for.inc5.loopexit474 475for.inc5.loopexit: ; preds = %for.body3476 %scevgep = getelementptr i32, ptr %B.addr.06, i64 %n2477 br label %for.inc5478 479for.inc5: ; preds = %for.inc5.loopexit, %for.cond1.preheader480 %B.addr.1.lcssa = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc5.loopexit ]481 %inc6 = add nsw i64 %i.05, 1482 %exitcond7 = icmp ne i64 %inc6, %n1483 br i1 %exitcond7, label %for.cond1.preheader, label %for.end7.loopexit484 485for.end7.loopexit: ; preds = %for.inc5486 br label %for.end7487 488for.end7: ; preds = %for.end7.loopexit, %entry489 ret void490}491