487 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 5target 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"6target triple = "x86_64-apple-macosx10.6.0"7 8 9;; for (long int i = 0; i < n; i++) {10;; A[2*i + n] = i;11;; *B++ = A[3*i + 3*n];12 13define void @symbolicsiv0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {14; CHECK-LABEL: 'symbolicsiv0'15; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 416; CHECK-NEXT: da analyze - none!17; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 418; CHECK-NEXT: da analyze - none!19; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 420; CHECK-NEXT: da analyze - confused!21; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 422; CHECK-NEXT: da analyze - none!23; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 424; CHECK-NEXT: da analyze - confused!25; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 426; CHECK-NEXT: da analyze - none!27;28entry:29 %cmp1 = icmp eq i64 %n, 030 br i1 %cmp1, label %for.end, label %for.body.preheader31 32for.body.preheader: ; preds = %entry33 br label %for.body34 35for.body: ; preds = %for.body.preheader, %for.body36 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]37 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]38 %conv = trunc i64 %i.03 to i3239 %mul = shl nsw i64 %i.03, 140 %add = add i64 %mul, %n41 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add42 store i32 %conv, ptr %arrayidx, align 443 %mul14 = add i64 %i.03, %n44 %add3 = mul i64 %mul14, 345 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %add346 %0 = load i32, ptr %arrayidx4, align 447 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 148 store i32 %0, ptr %B.addr.02, align 449 %inc = add nsw i64 %i.03, 150 %exitcond = icmp ne i64 %inc, %n51 br i1 %exitcond, label %for.body, label %for.end.loopexit52 53for.end.loopexit: ; preds = %for.body54 br label %for.end55 56for.end: ; preds = %for.end.loopexit, %entry57 ret void58}59 60 61;; for (long int i = 0; i < n; i++) {62;; A[2*i + 5*n] = i;63;; *B++ = A[3*i + 2*n];64 65define void @symbolicsiv1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {66; CHECK-LABEL: 'symbolicsiv1'67; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 468; CHECK-NEXT: da analyze - none!69; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 470; CHECK-NEXT: da analyze - none!71; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 472; CHECK-NEXT: da analyze - confused!73; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx5, align 474; CHECK-NEXT: da analyze - none!75; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 476; CHECK-NEXT: da analyze - confused!77; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 478; CHECK-NEXT: da analyze - none!79;80entry:81 %cmp1 = icmp eq i64 %n, 082 br i1 %cmp1, label %for.end, label %for.body.preheader83 84for.body.preheader: ; preds = %entry85 br label %for.body86 87for.body: ; preds = %for.body.preheader, %for.body88 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]89 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]90 %conv = trunc i64 %i.03 to i3291 %mul = shl nsw i64 %i.03, 192 %mul1 = mul i64 %n, 593 %add = add i64 %mul, %mul194 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add95 store i32 %conv, ptr %arrayidx, align 496 %mul2 = mul nsw i64 %i.03, 397 %mul3 = shl i64 %n, 198 %add4 = add i64 %mul2, %mul399 %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %add4100 %0 = load i32, ptr %arrayidx5, align 4101 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1102 store i32 %0, ptr %B.addr.02, align 4103 %inc = add nsw i64 %i.03, 1104 %exitcond = icmp ne i64 %inc, %n105 br i1 %exitcond, label %for.body, label %for.end.loopexit106 107for.end.loopexit: ; preds = %for.body108 br label %for.end109 110for.end: ; preds = %for.end.loopexit, %entry111 ret void112}113 114 115;; for (long int i = 0; i < n; i++) {116;; A[2*i - n] = i;117;; *B++ = A[-i + 2*n];118 119define void @symbolicsiv2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {120; CHECK-LABEL: 'symbolicsiv2'121; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4122; CHECK-NEXT: da analyze - none!123; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4124; CHECK-NEXT: da analyze - none!125; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4126; CHECK-NEXT: da analyze - confused!127; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4128; CHECK-NEXT: da analyze - none!129; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4130; CHECK-NEXT: da analyze - confused!131; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4132; CHECK-NEXT: da analyze - none!133;134entry:135 %cmp1 = icmp eq i64 %n, 0136 br i1 %cmp1, label %for.end, label %for.body.preheader137 138for.body.preheader: ; preds = %entry139 br label %for.body140 141for.body: ; preds = %for.body.preheader, %for.body142 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]143 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]144 %conv = trunc i64 %i.03 to i32145 %mul = shl nsw i64 %i.03, 1146 %sub = sub i64 %mul, %n147 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub148 store i32 %conv, ptr %arrayidx, align 4149 %mul2 = shl i64 %n, 1150 %add = sub i64 %mul2, %i.03151 %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add152 %0 = load i32, ptr %arrayidx3, align 4153 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1154 store i32 %0, ptr %B.addr.02, align 4155 %inc = add nsw i64 %i.03, 1156 %exitcond = icmp ne i64 %inc, %n157 br i1 %exitcond, label %for.body, label %for.end.loopexit158 159for.end.loopexit: ; preds = %for.body160 br label %for.end161 162for.end: ; preds = %for.end.loopexit, %entry163 ret void164}165 166 167;; for (long int i = 0; i < n; i++) {168;; A[-2*i + n + 1] = i;169;; *B++ = A[i - 2*n];170 171define void @symbolicsiv3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {172; CHECK-LABEL: 'symbolicsiv3'173; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4174; CHECK-NEXT: da analyze - none!175; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4176; CHECK-NEXT: da analyze - none!177; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4178; CHECK-NEXT: da analyze - confused!179; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4180; CHECK-NEXT: da analyze - none!181; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4182; CHECK-NEXT: da analyze - confused!183; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4184; CHECK-NEXT: da analyze - none!185;186entry:187 %cmp1 = icmp eq i64 %n, 0188 br i1 %cmp1, label %for.end, label %for.body.preheader189 190for.body.preheader: ; preds = %entry191 br label %for.body192 193for.body: ; preds = %for.body.preheader, %for.body194 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]195 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]196 %conv = trunc i64 %i.03 to i32197 %mul = mul nsw i64 %i.03, -2198 %add = add i64 %mul, %n199 %add1 = add i64 %add, 1200 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add1201 store i32 %conv, ptr %arrayidx, align 4202 %mul2 = shl i64 %n, 1203 %sub = sub i64 %i.03, %mul2204 %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %sub205 %0 = load i32, ptr %arrayidx3, align 4206 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1207 store i32 %0, ptr %B.addr.02, align 4208 %inc = add nsw i64 %i.03, 1209 %exitcond = icmp ne i64 %inc, %n210 br i1 %exitcond, label %for.body, label %for.end.loopexit211 212for.end.loopexit: ; preds = %for.body213 br label %for.end214 215for.end: ; preds = %for.end.loopexit, %entry216 ret void217}218 219 220;; for (long int i = 0; i < n; i++) {221;; A[-2*i + 3*n] = i;222;; *B++ = A[-i + n];223 224define void @symbolicsiv4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {225; CHECK-LABEL: 'symbolicsiv4'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 %arrayidx3, 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 %arrayidx3, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4233; CHECK-NEXT: da analyze - none!234; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx3, 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 %cmp1 = icmp eq i64 %n, 0241 br i1 %cmp1, label %for.end, label %for.body.preheader242 243for.body.preheader: ; preds = %entry244 br label %for.body245 246for.body: ; preds = %for.body.preheader, %for.body247 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]248 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]249 %conv = trunc i64 %i.03 to i32250 %mul = mul nsw i64 %i.03, -2251 %mul1 = mul i64 %n, 3252 %add = add i64 %mul, %mul1253 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add254 store i32 %conv, ptr %arrayidx, align 4255 %add2 = sub i64 %n, %i.03256 %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add2257 %0 = load i32, ptr %arrayidx3, align 4258 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1259 store i32 %0, ptr %B.addr.02, align 4260 %inc = add nsw i64 %i.03, 1261 %exitcond = icmp ne i64 %inc, %n262 br i1 %exitcond, label %for.body, label %for.end.loopexit263 264for.end.loopexit: ; preds = %for.body265 br label %for.end266 267for.end: ; preds = %for.end.loopexit, %entry268 ret void269}270 271 272;; for (long int i = 0; i < n; i++) {273;; A[-2*i - 2*n] = i;274;; *B++ = A[-i - n];275 276define void @symbolicsiv5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {277; CHECK-LABEL: 'symbolicsiv5'278; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4279; CHECK-NEXT: da analyze - none!280; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4281; CHECK-NEXT: da analyze - none!282; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4283; CHECK-NEXT: da analyze - confused!284; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx4, align 4285; CHECK-NEXT: da analyze - none!286; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4287; CHECK-NEXT: da analyze - confused!288; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4289; CHECK-NEXT: da analyze - none!290;291entry:292 %cmp1 = icmp eq i64 %n, 0293 br i1 %cmp1, label %for.end, label %for.body.preheader294 295for.body.preheader: ; preds = %entry296 br label %for.body297 298for.body: ; preds = %for.body.preheader, %for.body299 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]300 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]301 %conv = trunc i64 %i.03 to i32302 %mul = mul nsw i64 %i.03, -2303 %mul1 = shl i64 %n, 1304 %sub = sub i64 %mul, %mul1305 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub306 store i32 %conv, ptr %arrayidx, align 4307 %sub2 = sub nsw i64 0, %i.03308 %sub3 = sub i64 %sub2, %n309 %arrayidx4 = getelementptr inbounds i32, ptr %A, i64 %sub3310 %0 = load i32, ptr %arrayidx4, align 4311 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1312 store i32 %0, ptr %B.addr.02, align 4313 %inc = add nsw i64 %i.03, 1314 %exitcond = icmp ne i64 %inc, %n315 br i1 %exitcond, label %for.body, label %for.end.loopexit316 317for.end.loopexit: ; preds = %for.body318 br label %for.end319 320for.end: ; preds = %for.end.loopexit, %entry321 ret void322}323 324 325;; why doesn't SCEV package understand that n >= 0?326;; for (long unsigned i = 0; i < n; i++) {327;; A[i + n + 1] = i;328;; *B++ = A[-i];329 330define void @weaktest(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {331; CHECK-LABEL: 'weaktest'332; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4333; CHECK-NEXT: da analyze - none!334; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4335; CHECK-NEXT: da analyze - flow [*|<]!336; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4337; CHECK-NEXT: da analyze - confused!338; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4339; CHECK-NEXT: da analyze - none!340; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4341; CHECK-NEXT: da analyze - confused!342; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4343; CHECK-NEXT: da analyze - none!344;345entry:346 %cmp1 = icmp eq i64 %n, 0347 br i1 %cmp1, label %for.end, label %for.body.preheader348 349for.body.preheader: ; preds = %entry350 br label %for.body351 352for.body: ; preds = %for.body.preheader, %for.body353 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]354 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]355 %conv = trunc i64 %i.03 to i32356 %add = add i64 %i.03, %n357 %add1 = add i64 %add, 1358 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add1359 store i32 %conv, ptr %arrayidx, align 4360 %sub = sub i64 0, %i.03361 %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub362 %0 = load i32, ptr %arrayidx2, align 4363 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1364 store i32 %0, ptr %B.addr.02, align 4365 %inc = add i64 %i.03, 1366 %exitcond = icmp ne i64 %inc, %n367 br i1 %exitcond, label %for.body, label %for.end.loopexit368 369for.end.loopexit: ; preds = %for.body370 br label %for.end371 372for.end: ; preds = %for.end.loopexit, %entry373 ret void374}375 376 377;; for (long int i = 0; i < n; i++) {378;; A[4*N*i + M] = i;379;; *B++ = A[4*N*i + 3*M + 1];380 381define void @symbolicsiv6(ptr %A, ptr %B, i64 %n, i64 %N, i64 %M) nounwind uwtable ssp {382; CHECK-LABEL: 'symbolicsiv6'383; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4384; CHECK-NEXT: da analyze - none!385; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4386; CHECK-NEXT: da analyze - flow [*|<]!387; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4388; CHECK-NEXT: da analyze - confused!389; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4390; CHECK-NEXT: da analyze - none!391; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4392; CHECK-NEXT: da analyze - confused!393; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4394; CHECK-NEXT: da analyze - none!395;396entry:397 %cmp1 = icmp eq i64 %n, 0398 br i1 %cmp1, label %for.end, label %for.body.preheader399 400for.body.preheader: ; preds = %entry401 br label %for.body402 403for.body: ; preds = %for.body.preheader, %for.body404 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]405 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]406 %conv = trunc i64 %i.03 to i32407 %mul = shl i64 %N, 2408 %mul1 = mul i64 %mul, %i.03409 %add = add i64 %mul1, %M410 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add411 store i32 %conv, ptr %arrayidx, align 4412 %mul2 = shl i64 %N, 2413 %mul3 = mul i64 %mul2, %i.03414 %mul4 = mul i64 %M, 3415 %add5 = add i64 %mul3, %mul4416 %add6 = add i64 %add5, 1417 %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add6418 %0 = load i32, ptr %arrayidx7, align 4419 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1420 store i32 %0, ptr %B.addr.02, align 4421 %inc = add nsw i64 %i.03, 1422 %exitcond = icmp ne i64 %inc, %n423 br i1 %exitcond, label %for.body, label %for.end.loopexit424 425for.end.loopexit: ; preds = %for.body426 br label %for.end427 428for.end: ; preds = %for.end.loopexit, %entry429 ret void430}431 432 433;; for (long int i = 0; i < n; i++) {434;; A[2*N*i + M] = i;435;; *B++ = A[2*N*i - 3*M + 2];436 437define void @symbolicsiv7(ptr %A, ptr %B, i64 %n, i64 %N, i64 %M) nounwind uwtable ssp {438; CHECK-LABEL: 'symbolicsiv7'439; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4440; CHECK-NEXT: da analyze - none!441; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %1 = load i32, ptr %arrayidx6, align 4442; CHECK-NEXT: da analyze - flow [*|<]!443; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4444; CHECK-NEXT: da analyze - confused!445; CHECK-NEXT: Src: %1 = load i32, ptr %arrayidx6, align 4 --> Dst: %1 = load i32, ptr %arrayidx6, align 4446; CHECK-NEXT: da analyze - none!447; CHECK-NEXT: Src: %1 = load i32, ptr %arrayidx6, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4448; CHECK-NEXT: da analyze - confused!449; CHECK-NEXT: Src: store i32 %1, ptr %B.addr.02, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4450; CHECK-NEXT: da analyze - none!451;452entry:453 %cmp1 = icmp eq i64 %n, 0454 br i1 %cmp1, label %for.end, label %for.body.preheader455 456for.body.preheader: ; preds = %entry457 br label %for.body458 459for.body: ; preds = %for.body.preheader, %for.body460 %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]461 %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]462 %conv = trunc i64 %i.03 to i32463 %mul = shl i64 %N, 1464 %mul1 = mul i64 %mul, %i.03465 %add = add i64 %mul1, %M466 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add467 store i32 %conv, ptr %arrayidx, align 4468 %mul2 = shl i64 %N, 1469 %mul3 = mul i64 %mul2, %i.03470 %0 = mul i64 %M, -3471 %sub = add i64 %mul3, %0472 %add5 = add i64 %sub, 2473 %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %add5474 %1 = load i32, ptr %arrayidx6, align 4475 %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1476 store i32 %1, ptr %B.addr.02, align 4477 %inc = add nsw i64 %i.03, 1478 %exitcond = icmp ne i64 %inc, %n479 br i1 %exitcond, label %for.body, label %for.end.loopexit480 481for.end.loopexit: ; preds = %for.body482 br label %for.end483 484for.end: ; preds = %for.end.loopexit, %entry485 ret void486}487