brintos

brintos / llvm-project-archived public Read only

0
0
Text · 20.6 KiB · e43aa0f Raw
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