brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.6 KiB · cb14d18 Raw
724 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 < 100; i++)10;;    for (long int j = 0; j ptr|<]!11;;    for (long int j = 0; j < 100; j++) {12;;      A[2*i - 4*j] = i;13;;      *B++ = A[6*i + 8*j];14 15define void @gcd0(ptr %A, ptr %B) nounwind uwtable ssp {16; CHECK-LABEL: 'gcd0'17; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 418; CHECK-NEXT:    da analyze - output [* *]!19; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 420; CHECK-NEXT:    da analyze - flow [=> *|<]!21; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 422; CHECK-NEXT:    da analyze - confused!23; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 424; CHECK-NEXT:    da analyze - input [* *]!25; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 426; CHECK-NEXT:    da analyze - confused!27; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 428; CHECK-NEXT:    da analyze - none!29;30entry:31  br label %for.cond1.preheader32 33for.cond1.preheader:                              ; preds = %entry, %for.inc834  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]35  %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]36  br label %for.body337 38for.body3:                                        ; preds = %for.cond1.preheader, %for.body339  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]40  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]41  %conv = trunc i64 %i.03 to i3242  %mul = shl nsw i64 %i.03, 143  %mul4 = shl nsw i64 %j.02, 244  %sub = sub nsw i64 %mul, %mul445  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub46  store i32 %conv, ptr %arrayidx, align 447  %mul5 = mul nsw i64 %i.03, 648  %mul6 = shl nsw i64 %j.02, 349  %add = add nsw i64 %mul5, %mul650  %arrayidx7 = getelementptr inbounds i32, ptr %A, i64 %add51  %0 = load i32, ptr %arrayidx7, align 452  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 153  store i32 %0, ptr %B.addr.11, align 454  %inc = add nsw i64 %j.02, 155  %exitcond = icmp ne i64 %inc, 10056  br i1 %exitcond, label %for.body3, label %for.inc857 58for.inc8:                                         ; preds = %for.body359  %scevgep = getelementptr i32, ptr %B.addr.04, i64 10060  %inc9 = add nsw i64 %i.03, 161  %exitcond5 = icmp ne i64 %inc9, 10062  br i1 %exitcond5, label %for.cond1.preheader, label %for.end1063 64for.end10:                                        ; preds = %for.inc865  ret void66}67 68 69;;  for (long int i = 0; i < 100; i++)70;;    for (long int j = 0; j < 100; j++) {71;;      A[2*i - 4*j] = i;72;;      *B++ = A[6*i + 8*j + 1];73 74define void @gcd1(ptr %A, ptr %B) nounwind uwtable ssp {75; CHECK-LABEL: 'gcd1'76; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 477; CHECK-NEXT:    da analyze - output [* *]!78; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 479; CHECK-NEXT:    da analyze - none!80; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 481; CHECK-NEXT:    da analyze - confused!82; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 483; CHECK-NEXT:    da analyze - input [* *]!84; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 485; CHECK-NEXT:    da analyze - confused!86; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 487; CHECK-NEXT:    da analyze - none!88;89entry:90  br label %for.cond1.preheader91 92for.cond1.preheader:                              ; preds = %entry, %for.inc993  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]94  %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]95  br label %for.body396 97for.body3:                                        ; preds = %for.cond1.preheader, %for.body398  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]99  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]100  %conv = trunc i64 %i.03 to i32101  %mul = shl nsw i64 %i.03, 1102  %mul4 = shl nsw i64 %j.02, 2103  %sub = sub nsw i64 %mul, %mul4104  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %sub105  store i32 %conv, ptr %arrayidx, align 4106  %mul5 = mul nsw i64 %i.03, 6107  %mul6 = shl nsw i64 %j.02, 3108  %add = add nsw i64 %mul5, %mul6109  %add7 = or disjoint i64 %add, 1110  %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7111  %0 = load i32, ptr %arrayidx8, align 4112  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1113  store i32 %0, ptr %B.addr.11, align 4114  %inc = add nsw i64 %j.02, 1115  %exitcond = icmp ne i64 %inc, 100116  br i1 %exitcond, label %for.body3, label %for.inc9117 118for.inc9:                                         ; preds = %for.body3119  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100120  %inc10 = add nsw i64 %i.03, 1121  %exitcond5 = icmp ne i64 %inc10, 100122  br i1 %exitcond5, label %for.cond1.preheader, label %for.end11123 124for.end11:                                        ; preds = %for.inc9125  ret void126}127 128 129;;  for (long int i = 0; i < 100; i++)130;;    for (long int j = 0; j < 100; j++) {131;;      A[2*i - 4*j + 1] = i;132;;      *B++ = A[6*i + 8*j];133 134define void @gcd2(ptr %A, ptr %B) nounwind uwtable ssp {135; CHECK-LABEL: 'gcd2'136; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4137; CHECK-NEXT:    da analyze - output [* *]!138; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4139; CHECK-NEXT:    da analyze - none!140; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4141; CHECK-NEXT:    da analyze - confused!142; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4143; CHECK-NEXT:    da analyze - input [* *]!144; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4145; CHECK-NEXT:    da analyze - confused!146; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4147; CHECK-NEXT:    da analyze - none!148;149entry:150  br label %for.cond1.preheader151 152for.cond1.preheader:                              ; preds = %entry, %for.inc9153  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]154  %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]155  br label %for.body3156 157for.body3:                                        ; preds = %for.cond1.preheader, %for.body3158  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]159  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]160  %conv = trunc i64 %i.03 to i32161  %mul = shl nsw i64 %i.03, 1162  %mul4 = shl nsw i64 %j.02, 2163  %sub = sub nsw i64 %mul, %mul4164  %add5 = or disjoint i64 %sub, 1165  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add5166  store i32 %conv, ptr %arrayidx, align 4167  %mul5 = mul nsw i64 %i.03, 6168  %mul6 = shl nsw i64 %j.02, 3169  %add7 = add nsw i64 %mul5, %mul6170  %arrayidx8 = getelementptr inbounds i32, ptr %A, i64 %add7171  %0 = load i32, ptr %arrayidx8, align 4172  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1173  store i32 %0, ptr %B.addr.11, align 4174  %inc = add nsw i64 %j.02, 1175  %exitcond = icmp ne i64 %inc, 100176  br i1 %exitcond, label %for.body3, label %for.inc9177 178for.inc9:                                         ; preds = %for.body3179  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100180  %inc10 = add nsw i64 %i.03, 1181  %exitcond6 = icmp ne i64 %inc10, 100182  br i1 %exitcond6, label %for.cond1.preheader, label %for.end11183 184for.end11:                                        ; preds = %for.inc9185  ret void186}187 188 189;;  for (long int i = 0; i < 100; i++)190;;    for (long int j = 0; j < 100; j++) {191;;      A[i + 2*j] = i;192;;      *B++ = A[i + 2*j - 1];193 194define void @gcd3(ptr %A, ptr %B) nounwind uwtable ssp {195; CHECK-LABEL: 'gcd3'196; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4197; CHECK-NEXT:    da analyze - output [* *]!198; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx6, align 4199; CHECK-NEXT:    da analyze - flow [<> *]!200; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4201; CHECK-NEXT:    da analyze - confused!202; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx6, align 4203; CHECK-NEXT:    da analyze - input [* *]!204; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx6, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4205; CHECK-NEXT:    da analyze - confused!206; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4207; CHECK-NEXT:    da analyze - none!208;209entry:210  br label %for.cond1.preheader211 212for.cond1.preheader:                              ; preds = %entry, %for.inc7213  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]214  %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]215  br label %for.body3216 217for.body3:                                        ; preds = %for.cond1.preheader, %for.body3218  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]219  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]220  %conv = trunc i64 %i.03 to i32221  %mul = shl nsw i64 %j.02, 1222  %add = add nsw i64 %i.03, %mul223  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add224  store i32 %conv, ptr %arrayidx, align 4225  %mul4 = shl nsw i64 %j.02, 1226  %add5 = add nsw i64 %i.03, %mul4227  %sub = add nsw i64 %add5, -1228  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %sub229  %0 = load i32, ptr %arrayidx6, align 4230  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1231  store i32 %0, ptr %B.addr.11, align 4232  %inc = add nsw i64 %j.02, 1233  %exitcond = icmp ne i64 %inc, 100234  br i1 %exitcond, label %for.body3, label %for.inc7235 236for.inc7:                                         ; preds = %for.body3237  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100238  %inc8 = add nsw i64 %i.03, 1239  %exitcond5 = icmp ne i64 %inc8, 100240  br i1 %exitcond5, label %for.cond1.preheader, label %for.end9241 242for.end9:                                         ; preds = %for.inc7243  ret void244}245 246 247;;  for (long int i = 0; i < 100; i++)248;;    for (long int j = 0; j < 100; j++) {249;;      A[5*i + 10*j*M + 9*M*N] = i;250;;      *B++ = A[15*i + 20*j*M - 21*N*M + 4];251 252define void @gcd4(ptr %A, ptr %B, i64 %M, i64 %N) nounwind uwtable ssp {253; CHECK-LABEL: 'gcd4'254; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4255; CHECK-NEXT:    da analyze - output [* *]!256; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx16, align 4257; CHECK-NEXT:    da analyze - flow [* *|<]!258; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4259; CHECK-NEXT:    da analyze - confused!260; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx16, align 4 --> Dst: %0 = load i32, ptr %arrayidx16, align 4261; CHECK-NEXT:    da analyze - input [* *]!262; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx16, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4263; CHECK-NEXT:    da analyze - confused!264; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4265; CHECK-NEXT:    da analyze - none!266;267entry:268  br label %for.cond1.preheader269 270for.cond1.preheader:                              ; preds = %entry, %for.inc17271  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc17 ]272  %i.03 = phi i64 [ 0, %entry ], [ %inc18, %for.inc17 ]273  br label %for.body3274 275for.body3:                                        ; preds = %for.cond1.preheader, %for.body3276  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]277  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]278  %conv = trunc i64 %i.03 to i32279  %mul = mul nsw i64 %i.03, 5280  %mul4 = mul nsw i64 %j.02, 10281  %mul5 = mul nsw i64 %mul4, %M282  %add = add nsw i64 %mul, %mul5283  %mul6 = mul nsw i64 %M, 9284  %mul7 = mul nsw i64 %mul6, %N285  %add8 = add nsw i64 %add, %mul7286  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add8287  store i32 %conv, ptr %arrayidx, align 4288  %mul9 = mul nsw i64 %i.03, 15289  %mul10 = mul nsw i64 %j.02, 20290  %mul11 = mul nsw i64 %mul10, %M291  %add12 = add nsw i64 %mul9, %mul11292  %mul13 = mul nsw i64 %N, 21293  %mul14 = mul nsw i64 %mul13, %M294  %sub = sub nsw i64 %add12, %mul14295  %add15 = add nsw i64 %sub, 4296  %arrayidx16 = getelementptr inbounds i32, ptr %A, i64 %add15297  %0 = load i32, ptr %arrayidx16, align 4298  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1299  store i32 %0, ptr %B.addr.11, align 4300  %inc = add nsw i64 %j.02, 1301  %exitcond = icmp ne i64 %inc, 100302  br i1 %exitcond, label %for.body3, label %for.inc17303 304for.inc17:                                        ; preds = %for.body3305  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100306  %inc18 = add nsw i64 %i.03, 1307  %exitcond5 = icmp ne i64 %inc18, 100308  br i1 %exitcond5, label %for.cond1.preheader, label %for.end19309 310for.end19:                                        ; preds = %for.inc17311  ret void312}313 314 315;;  for (long int i = 0; i < 100; i++)316;;    for (long int j = 0; j < 100; j++) {317;;      A[5*i + 10*j*M + 9*M*N] = i;318;;      *B++ = A[15*i + 20*j*M - 21*N*M + 5];319 320define void @gcd5(ptr %A, ptr %B, i64 %M, i64 %N) nounwind uwtable ssp {321; CHECK-LABEL: 'gcd5'322; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4323; CHECK-NEXT:    da analyze - output [* *]!324; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx16, align 4325; CHECK-NEXT:    da analyze - flow [* *|<]!326; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4327; CHECK-NEXT:    da analyze - confused!328; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx16, align 4 --> Dst: %0 = load i32, ptr %arrayidx16, align 4329; CHECK-NEXT:    da analyze - input [* *]!330; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx16, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4331; CHECK-NEXT:    da analyze - confused!332; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4333; CHECK-NEXT:    da analyze - none!334;335entry:336  br label %for.cond1.preheader337 338for.cond1.preheader:                              ; preds = %entry, %for.inc17339  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc17 ]340  %i.03 = phi i64 [ 0, %entry ], [ %inc18, %for.inc17 ]341  br label %for.body3342 343for.body3:                                        ; preds = %for.cond1.preheader, %for.body3344  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]345  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]346  %conv = trunc i64 %i.03 to i32347  %mul = mul nsw i64 %i.03, 5348  %mul4 = mul nsw i64 %j.02, 10349  %mul5 = mul nsw i64 %mul4, %M350  %add = add nsw i64 %mul, %mul5351  %mul6 = mul nsw i64 %M, 9352  %mul7 = mul nsw i64 %mul6, %N353  %add8 = add nsw i64 %add, %mul7354  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add8355  store i32 %conv, ptr %arrayidx, align 4356  %mul9 = mul nsw i64 %i.03, 15357  %mul10 = mul nsw i64 %j.02, 20358  %mul11 = mul nsw i64 %mul10, %M359  %add12 = add nsw i64 %mul9, %mul11360  %mul13 = mul nsw i64 %N, 21361  %mul14 = mul nsw i64 %mul13, %M362  %sub = sub nsw i64 %add12, %mul14363  %add15 = add nsw i64 %sub, 5364  %arrayidx16 = getelementptr inbounds i32, ptr %A, i64 %add15365  %0 = load i32, ptr %arrayidx16, align 4366  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1367  store i32 %0, ptr %B.addr.11, align 4368  %inc = add nsw i64 %j.02, 1369  %exitcond = icmp ne i64 %inc, 100370  br i1 %exitcond, label %for.body3, label %for.inc17371 372for.inc17:                                        ; preds = %for.body3373  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100374  %inc18 = add nsw i64 %i.03, 1375  %exitcond5 = icmp ne i64 %inc18, 100376  br i1 %exitcond5, label %for.cond1.preheader, label %for.end19377 378for.end19:                                        ; preds = %for.inc17379  ret void380}381 382 383;;  for (long int i = 0; i < n; i++)384;;    for (long int j = 0; j < n; j++) {385;;      A[2*i][4*j] = i;386;;      *B++ = A[8*i][6*j + 1];387 388define void @gcd6(i64 %n, ptr %A, ptr %B) nounwind uwtable ssp {389; CHECK-LABEL: 'gcd6'390; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx5, align 4 --> Dst: store i32 %conv, ptr %arrayidx5, align 4391; CHECK-NEXT:    da analyze - output [* *]!392; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx5, align 4 --> Dst: %2 = load i32, ptr %arrayidx9, align 4393; CHECK-NEXT:    da analyze - flow [* *|<]!394; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx5, align 4 --> Dst: store i32 %2, ptr %B.addr.12, align 4395; CHECK-NEXT:    da analyze - confused!396; CHECK-NEXT:  Src: %2 = load i32, ptr %arrayidx9, align 4 --> Dst: %2 = load i32, ptr %arrayidx9, align 4397; CHECK-NEXT:    da analyze - input [* *]!398; CHECK-NEXT:  Src: %2 = load i32, ptr %arrayidx9, align 4 --> Dst: store i32 %2, ptr %B.addr.12, align 4399; CHECK-NEXT:    da analyze - confused!400; CHECK-NEXT:  Src: store i32 %2, ptr %B.addr.12, align 4 --> Dst: store i32 %2, ptr %B.addr.12, align 4401; CHECK-NEXT:    da analyze - confused!402;403entry:404  %cmp4 = icmp sgt i64 %n, 0405  br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end12406 407for.cond1.preheader.preheader:                    ; preds = %entry408  br label %for.cond1.preheader409 410for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc10411  %i.06 = phi i64 [ %inc11, %for.inc10 ], [ 0, %for.cond1.preheader.preheader ]412  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc10 ], [ %B, %for.cond1.preheader.preheader ]413  %cmp21 = icmp sgt i64 %n, 0414  br i1 %cmp21, label %for.body3.preheader, label %for.inc10415 416for.body3.preheader:                              ; preds = %for.cond1.preheader417  br label %for.body3418 419for.body3:                                        ; preds = %for.body3.preheader, %for.body3420  %j.03 = phi i64 [ %inc, %for.body3 ], [ 0, %for.body3.preheader ]421  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]422  %conv = trunc i64 %i.06 to i32423  %mul = shl nsw i64 %j.03, 2424  %mul4 = shl nsw i64 %i.06, 1425  %0 = mul nsw i64 %mul4, %n426  %arrayidx.sum = add i64 %0, %mul427  %arrayidx5 = getelementptr inbounds i32, ptr %A, i64 %arrayidx.sum428  store i32 %conv, ptr %arrayidx5, align 4429  %mul6 = mul nsw i64 %j.03, 6430  %add7 = or disjoint i64 %mul6, 1431  %mul7 = shl nsw i64 %i.06, 3432  %1 = mul nsw i64 %mul7, %n433  %arrayidx8.sum = add i64 %1, %add7434  %arrayidx9 = getelementptr inbounds i32, ptr %A, i64 %arrayidx8.sum435  %2 = load i32, ptr %arrayidx9, align 4436  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1437  store i32 %2, ptr %B.addr.12, align 4438  %inc = add nsw i64 %j.03, 1439  %exitcond = icmp ne i64 %inc, %n440  br i1 %exitcond, label %for.body3, label %for.inc10.loopexit441 442for.inc10.loopexit:                               ; preds = %for.body3443  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %n444  br label %for.inc10445 446for.inc10:                                        ; preds = %for.inc10.loopexit, %for.cond1.preheader447  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc10.loopexit ]448  %inc11 = add nsw i64 %i.06, 1449  %exitcond8 = icmp ne i64 %inc11, %n450  br i1 %exitcond8, label %for.cond1.preheader, label %for.end12.loopexit451 452for.end12.loopexit:                               ; preds = %for.inc10453  br label %for.end12454 455for.end12:                                        ; preds = %for.end12.loopexit, %entry456  ret void457}458 459 460;;  for (int i = 0; i < n; i++)461;;   for (int j = 0; j < n; j++) {462;;    A[2*i][4*j] = i;463;;   *B++ = A[8*i][6*j + 1];464 465define void @gcd7(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {466; CHECK-LABEL: 'gcd7'467; CHECK-NEXT:  Src: store i32 %7, ptr %arrayidx6, align 4 --> Dst: store i32 %7, ptr %arrayidx6, align 4468; CHECK-NEXT:    da analyze - output [* *]!469; CHECK-NEXT:  Src: store i32 %7, ptr %arrayidx6, align 4 --> Dst: %11 = load i32, ptr %arrayidx12, align 4470; CHECK-NEXT:    da analyze - flow [* *|<]!471; CHECK-NEXT:  Src: store i32 %7, ptr %arrayidx6, align 4 --> Dst: store i32 %11, ptr %B.addr.12, align 4472; CHECK-NEXT:    da analyze - confused!473; CHECK-NEXT:  Src: %11 = load i32, ptr %arrayidx12, align 4 --> Dst: %11 = load i32, ptr %arrayidx12, align 4474; CHECK-NEXT:    da analyze - input [* *]!475; CHECK-NEXT:  Src: %11 = load i32, ptr %arrayidx12, align 4 --> Dst: store i32 %11, ptr %B.addr.12, align 4476; CHECK-NEXT:    da analyze - confused!477; CHECK-NEXT:  Src: store i32 %11, ptr %B.addr.12, align 4 --> Dst: store i32 %11, ptr %B.addr.12, align 4478; CHECK-NEXT:    da analyze - confused!479;480entry:481  %0 = zext i32 %n to i64482  %cmp4 = icmp sgt i32 %n, 0483  br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end15484 485for.cond1.preheader.preheader:                    ; preds = %entry486  br label %for.cond1.preheader487 488for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc13489  %indvars.iv8 = phi i64 [ 0, %for.cond1.preheader.preheader ], [ %indvars.iv.next9, %for.inc13 ]490  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]491  %1 = add i32 %n, -1492  %2 = zext i32 %1 to i64493  %3 = add i64 %2, 1494  %cmp21 = icmp sgt i32 %n, 0495  br i1 %cmp21, label %for.body3.preheader, label %for.inc13496 497for.body3.preheader:                              ; preds = %for.cond1.preheader498  br label %for.body3499 500for.body3:                                        ; preds = %for.body3.preheader, %for.body3501  %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]502  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]503  %4 = trunc i64 %indvars.iv to i32504  %mul = shl nsw i32 %4, 2505  %idxprom = sext i32 %mul to i64506  %5 = trunc i64 %indvars.iv8 to i32507  %mul4 = shl nsw i32 %5, 1508  %idxprom5 = sext i32 %mul4 to i64509  %6 = mul nsw i64 %idxprom5, %0510  %arrayidx.sum = add i64 %6, %idxprom511  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %arrayidx.sum512  %7 = trunc i64 %indvars.iv8 to i32513  store i32 %7, ptr %arrayidx6, align 4514  %8 = trunc i64 %indvars.iv to i32515  %mul7 = mul nsw i32 %8, 6516  %add7 = or disjoint i32 %mul7, 1517  %idxprom8 = sext i32 %add7 to i64518  %9 = trunc i64 %indvars.iv8 to i32519  %mul9 = shl nsw i32 %9, 3520  %idxprom10 = sext i32 %mul9 to i64521  %10 = mul nsw i64 %idxprom10, %0522  %arrayidx11.sum = add i64 %10, %idxprom8523  %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %arrayidx11.sum524  %11 = load i32, ptr %arrayidx12, align 4525  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1526  store i32 %11, ptr %B.addr.12, align 4527  %indvars.iv.next = add i64 %indvars.iv, 1528  %lftr.wideiv = trunc i64 %indvars.iv.next to i32529  %exitcond = icmp ne i32 %lftr.wideiv, %n530  br i1 %exitcond, label %for.body3, label %for.inc13.loopexit531 532for.inc13.loopexit:                               ; preds = %for.body3533  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %3534  br label %for.inc13535 536for.inc13:                                        ; preds = %for.inc13.loopexit, %for.cond1.preheader537  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]538  %indvars.iv.next9 = add i64 %indvars.iv8, 1539  %lftr.wideiv10 = trunc i64 %indvars.iv.next9 to i32540  %exitcond11 = icmp ne i32 %lftr.wideiv10, %n541  br i1 %exitcond11, label %for.cond1.preheader, label %for.end15.loopexit542 543for.end15.loopexit:                               ; preds = %for.inc13544  br label %for.end15545 546for.end15:                                        ; preds = %for.end15.loopexit, %entry547  ret void548}549 550 551;;  for (int i = 0; i < n; i++)552;;    for (int j = 0; j < n; j++) {553;;      A[n*2*i + 4*j] = i;554;;      *B++ = A[n*8*i + 6*j + 1];555 556define void @gcd8(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {557; CHECK-LABEL: 'gcd8'558; CHECK-NEXT:  Src: store i32 %i.06, ptr %arrayidx, align 4 --> Dst: store i32 %i.06, ptr %arrayidx, align 4559; CHECK-NEXT:    da analyze - output [* *]!560; CHECK-NEXT:  Src: store i32 %i.06, ptr %arrayidx, align 4 --> Dst: %5 = load i32, ptr %arrayidx12, align 4561; CHECK-NEXT:    da analyze - flow [* *|<]!562; CHECK-NEXT:  Src: store i32 %i.06, ptr %arrayidx, align 4 --> Dst: store i32 %5, ptr %B.addr.12, align 4563; CHECK-NEXT:    da analyze - confused!564; CHECK-NEXT:  Src: %5 = load i32, ptr %arrayidx12, align 4 --> Dst: %5 = load i32, ptr %arrayidx12, align 4565; CHECK-NEXT:    da analyze - input [* *]!566; CHECK-NEXT:  Src: %5 = load i32, ptr %arrayidx12, align 4 --> Dst: store i32 %5, ptr %B.addr.12, align 4567; CHECK-NEXT:    da analyze - confused!568; CHECK-NEXT:  Src: store i32 %5, ptr %B.addr.12, align 4 --> Dst: store i32 %5, ptr %B.addr.12, align 4569; CHECK-NEXT:    da analyze - confused!570;571entry:572  %cmp4 = icmp sgt i32 %n, 0573  br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end15574 575for.cond1.preheader.preheader:                    ; preds = %entry576  br label %for.cond1.preheader577 578for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc13579  %i.06 = phi i32 [ %inc14, %for.inc13 ], [ 0, %for.cond1.preheader.preheader ]580  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]581  %0 = add i32 %n, -1582  %1 = zext i32 %0 to i64583  %2 = add i64 %1, 1584  %cmp21 = icmp sgt i32 %n, 0585  br i1 %cmp21, label %for.body3.preheader, label %for.inc13586 587for.body3.preheader:                              ; preds = %for.cond1.preheader588  br label %for.body3589 590for.body3:                                        ; preds = %for.body3.preheader, %for.body3591  %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]592  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]593  %mul = shl nsw i32 %n, 1594  %mul4 = mul nsw i32 %mul, %i.06595  %3 = trunc i64 %indvars.iv to i32596  %mul5 = shl nsw i32 %3, 2597  %add = add nsw i32 %mul4, %mul5598  %idxprom = sext i32 %add to i64599  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %idxprom600  store i32 %i.06, ptr %arrayidx, align 4601  %mul6 = shl nsw i32 %n, 3602  %mul7 = mul nsw i32 %mul6, %i.06603  %4 = trunc i64 %indvars.iv to i32604  %mul8 = mul nsw i32 %4, 6605  %add9 = add nsw i32 %mul7, %mul8606  %add10 = or disjoint i32 %add9, 1607  %idxprom11 = sext i32 %add10 to i64608  %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %idxprom11609  %5 = load i32, ptr %arrayidx12, align 4610  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1611  store i32 %5, ptr %B.addr.12, align 4612  %indvars.iv.next = add i64 %indvars.iv, 1613  %lftr.wideiv = trunc i64 %indvars.iv.next to i32614  %exitcond = icmp ne i32 %lftr.wideiv, %n615  br i1 %exitcond, label %for.body3, label %for.inc13.loopexit616 617for.inc13.loopexit:                               ; preds = %for.body3618  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %2619  br label %for.inc13620 621for.inc13:                                        ; preds = %for.inc13.loopexit, %for.cond1.preheader622  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]623  %inc14 = add nsw i32 %i.06, 1624  %exitcond7 = icmp ne i32 %inc14, %n625  br i1 %exitcond7, label %for.cond1.preheader, label %for.end15.loopexit626 627for.end15.loopexit:                               ; preds = %for.inc13628  br label %for.end15629 630for.end15:                                        ; preds = %for.end15.loopexit, %entry631  ret void632}633 634 635;;  for (unsigned i = 0; i < n; i++)636;;    for (unsigned j = 0; j < n; j++) {637;;      A[2*i][4*j] = i;638;;      *B++ = A[8*i][6*j + 1];639 640define void @gcd9(i32 %n, ptr %A, ptr %B) nounwind uwtable ssp {641; CHECK-LABEL: 'gcd9'642; CHECK-NEXT:  Src: store i32 %7, ptr %arrayidx6, align 4 --> Dst: store i32 %7, ptr %arrayidx6, align 4643; CHECK-NEXT:    da analyze - output [* *]!644; CHECK-NEXT:  Src: store i32 %7, ptr %arrayidx6, align 4 --> Dst: %11 = load i32, ptr %arrayidx12, align 4645; CHECK-NEXT:    da analyze - flow [* *|<]!646; CHECK-NEXT:  Src: store i32 %7, ptr %arrayidx6, align 4 --> Dst: store i32 %11, ptr %B.addr.12, align 4647; CHECK-NEXT:    da analyze - confused!648; CHECK-NEXT:  Src: %11 = load i32, ptr %arrayidx12, align 4 --> Dst: %11 = load i32, ptr %arrayidx12, align 4649; CHECK-NEXT:    da analyze - input [* *]!650; CHECK-NEXT:  Src: %11 = load i32, ptr %arrayidx12, align 4 --> Dst: store i32 %11, ptr %B.addr.12, align 4651; CHECK-NEXT:    da analyze - confused!652; CHECK-NEXT:  Src: store i32 %11, ptr %B.addr.12, align 4 --> Dst: store i32 %11, ptr %B.addr.12, align 4653; CHECK-NEXT:    da analyze - confused!654;655entry:656  %0 = zext i32 %n to i64657  %cmp4 = icmp eq i32 %n, 0658  br i1 %cmp4, label %for.end15, label %for.cond1.preheader.preheader659 660for.cond1.preheader.preheader:                    ; preds = %entry661  br label %for.cond1.preheader662 663for.cond1.preheader:                              ; preds = %for.cond1.preheader.preheader, %for.inc13664  %indvars.iv8 = phi i64 [ 0, %for.cond1.preheader.preheader ], [ %indvars.iv.next9, %for.inc13 ]665  %B.addr.05 = phi ptr [ %B.addr.1.lcssa, %for.inc13 ], [ %B, %for.cond1.preheader.preheader ]666  %1 = add i32 %n, -1667  %2 = zext i32 %1 to i64668  %3 = add i64 %2, 1669  %cmp21 = icmp eq i32 %n, 0670  br i1 %cmp21, label %for.inc13, label %for.body3.preheader671 672for.body3.preheader:                              ; preds = %for.cond1.preheader673  br label %for.body3674 675for.body3:                                        ; preds = %for.body3.preheader, %for.body3676  %indvars.iv = phi i64 [ 0, %for.body3.preheader ], [ %indvars.iv.next, %for.body3 ]677  %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.05, %for.body3.preheader ]678  %4 = trunc i64 %indvars.iv to i32679  %mul = shl i32 %4, 2680  %idxprom = zext i32 %mul to i64681  %5 = trunc i64 %indvars.iv8 to i32682  %mul4 = shl i32 %5, 1683  %idxprom5 = zext i32 %mul4 to i64684  %6 = mul nsw i64 %idxprom5, %0685  %arrayidx.sum = add i64 %6, %idxprom686  %arrayidx6 = getelementptr inbounds i32, ptr %A, i64 %arrayidx.sum687  %7 = trunc i64 %indvars.iv8 to i32688  store i32 %7, ptr %arrayidx6, align 4689  %8 = trunc i64 %indvars.iv to i32690  %mul7 = mul i32 %8, 6691  %add7 = or disjoint i32 %mul7, 1692  %idxprom8 = zext i32 %add7 to i64693  %9 = trunc i64 %indvars.iv8 to i32694  %mul9 = shl i32 %9, 3695  %idxprom10 = zext i32 %mul9 to i64696  %10 = mul nsw i64 %idxprom10, %0697  %arrayidx11.sum = add i64 %10, %idxprom8698  %arrayidx12 = getelementptr inbounds i32, ptr %A, i64 %arrayidx11.sum699  %11 = load i32, ptr %arrayidx12, align 4700  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.12, i64 1701  store i32 %11, ptr %B.addr.12, align 4702  %indvars.iv.next = add i64 %indvars.iv, 1703  %lftr.wideiv = trunc i64 %indvars.iv.next to i32704  %exitcond = icmp ne i32 %lftr.wideiv, %n705  br i1 %exitcond, label %for.body3, label %for.inc13.loopexit706 707for.inc13.loopexit:                               ; preds = %for.body3708  %scevgep = getelementptr i32, ptr %B.addr.05, i64 %3709  br label %for.inc13710 711for.inc13:                                        ; preds = %for.inc13.loopexit, %for.cond1.preheader712  %B.addr.1.lcssa = phi ptr [ %B.addr.05, %for.cond1.preheader ], [ %scevgep, %for.inc13.loopexit ]713  %indvars.iv.next9 = add i64 %indvars.iv8, 1714  %lftr.wideiv10 = trunc i64 %indvars.iv.next9 to i32715  %exitcond11 = icmp ne i32 %lftr.wideiv10, %n716  br i1 %exitcond11, label %for.cond1.preheader, label %for.end15.loopexit717 718for.end15.loopexit:                               ; preds = %for.inc13719  br label %for.end15720 721for.end15:                                        ; preds = %for.end15.loopexit, %entry722  ret void723}724