brintos

brintos / llvm-project-archived public Read only

0
0
Text · 27.2 KiB · 17f2de4 Raw
606 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 < 100; j++) {11;;      A[i + 1][i + j] = i;12;;      *B++ = A[i][i + j];13 14define void @prop0(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {15; CHECK-LABEL: 'prop0'16; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx5, align 4 --> Dst: store i32 %conv, ptr %arrayidx5, align 417; CHECK-NEXT:    da analyze - none!18; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx5, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 419; CHECK-NEXT:    da analyze - flow [< >]!20; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx5, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 421; CHECK-NEXT:    da analyze - confused!22; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 423; CHECK-NEXT:    da analyze - none!24; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 425; CHECK-NEXT:    da analyze - confused!26; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 427; CHECK-NEXT:    da analyze - none!28;29entry:30  br label %for.cond1.preheader31 32for.cond1.preheader:                              ; preds = %entry, %for.inc933  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]34  %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]35  br label %for.body336 37for.body3:                                        ; preds = %for.cond1.preheader, %for.body338  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]39  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]40  %conv = trunc i64 %i.03 to i3241  %add = add nsw i64 %i.03, %j.0242  %add4 = add nsw i64 %i.03, 143  %arrayidx5 = getelementptr inbounds [100 x i32], ptr %A, i64 %add4, i64 %add44  store i32 %conv, ptr %arrayidx5, align 445  %add6 = add nsw i64 %i.03, %j.0246  %arrayidx8 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add647  %0 = load i32, ptr %arrayidx8, align 448  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 149  store i32 %0, ptr %B.addr.11, align 450  %inc = add nsw i64 %j.02, 151  %exitcond = icmp ne i64 %inc, 10052  br i1 %exitcond, label %for.body3, label %for.inc953 54for.inc9:                                         ; preds = %for.body355  %scevgep = getelementptr i32, ptr %B.addr.04, i64 10056  %inc10 = add nsw i64 %i.03, 157  %exitcond5 = icmp ne i64 %inc10, 10058  br i1 %exitcond5, label %for.cond1.preheader, label %for.end1159 60for.end11:                                        ; preds = %for.inc961  ret void62}63 64 65;;  for (long int i = 0; i < 100; i++)66;;    for (long int j = 0; j < 100; j++)67;;      for (long int k = 0; k < 100; k++) {68;;        A[j - i][i + 1][j + k] = i;69;;        *B++ = A[j - i][i][j + k];70 71define void @prop1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {72; CHECK-LABEL: 'prop1'73; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx9, align 4 --> Dst: store i32 %conv, ptr %arrayidx9, align 474; CHECK-NEXT:    da analyze - output [* * *]!75; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx9, align 4 --> Dst: %0 = load i32, ptr %arrayidx14, align 476; CHECK-NEXT:    da analyze - flow [<> <> *]!77; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx9, align 4 --> Dst: store i32 %0, ptr %B.addr.21, align 478; CHECK-NEXT:    da analyze - confused!79; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx14, align 4 --> Dst: %0 = load i32, ptr %arrayidx14, align 480; CHECK-NEXT:    da analyze - input [* * *]!81; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx14, align 4 --> Dst: store i32 %0, ptr %B.addr.21, align 482; CHECK-NEXT:    da analyze - confused!83; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.21, align 4 --> Dst: store i32 %0, ptr %B.addr.21, align 484; CHECK-NEXT:    da analyze - none!85;86entry:87  br label %for.cond1.preheader88 89for.cond1.preheader:                              ; preds = %entry, %for.inc1890  %B.addr.06 = phi ptr [ %B, %entry ], [ %scevgep7, %for.inc18 ]91  %i.05 = phi i64 [ 0, %entry ], [ %inc19, %for.inc18 ]92  br label %for.cond4.preheader93 94for.cond4.preheader:                              ; preds = %for.cond1.preheader, %for.inc1595  %B.addr.14 = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc15 ]96  %j.03 = phi i64 [ 0, %for.cond1.preheader ], [ %inc16, %for.inc15 ]97  br label %for.body698 99for.body6:                                        ; preds = %for.cond4.preheader, %for.body6100  %k.02 = phi i64 [ 0, %for.cond4.preheader ], [ %inc, %for.body6 ]101  %B.addr.21 = phi ptr [ %B.addr.14, %for.cond4.preheader ], [ %incdec.ptr, %for.body6 ]102  %conv = trunc i64 %i.05 to i32103  %add = add nsw i64 %j.03, %k.02104  %add7 = add nsw i64 %i.05, 1105  %sub = sub nsw i64 %j.03, %i.05106  %arrayidx9 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub, i64 %add7, i64 %add107  store i32 %conv, ptr %arrayidx9, align 4108  %add10 = add nsw i64 %j.03, %k.02109  %sub11 = sub nsw i64 %j.03, %i.05110  %arrayidx14 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub11, i64 %i.05, i64 %add10111  %0 = load i32, ptr %arrayidx14, align 4112  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.21, i64 1113  store i32 %0, ptr %B.addr.21, align 4114  %inc = add nsw i64 %k.02, 1115  %exitcond = icmp ne i64 %inc, 100116  br i1 %exitcond, label %for.body6, label %for.inc15117 118for.inc15:                                        ; preds = %for.body6119  %scevgep = getelementptr i32, ptr %B.addr.14, i64 100120  %inc16 = add nsw i64 %j.03, 1121  %exitcond8 = icmp ne i64 %inc16, 100122  br i1 %exitcond8, label %for.cond4.preheader, label %for.inc18123 124for.inc18:                                        ; preds = %for.inc15125  %scevgep7 = getelementptr i32, ptr %B.addr.06, i64 10000126  %inc19 = add nsw i64 %i.05, 1127  %exitcond9 = icmp ne i64 %inc19, 100128  br i1 %exitcond9, label %for.cond1.preheader, label %for.end20129 130for.end20:                                        ; preds = %for.inc18131  ret void132}133 134 135;;  for (long int i = 0; i < 100; i++)136;;    for (long int j = 0; j ptr]!137;;    for (long int j = 0; j < 100; j++) {138;;      A[i - 1][2*i] = i;139;;      *B++ = A[i][i + j + 110];140 141define void @prop2(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {142; CHECK-LABEL: 'prop2'143; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %conv, ptr %arrayidx4, align 4144; CHECK-NEXT:    da analyze - consistent output [0 S]!145; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4146; CHECK-NEXT:    da analyze - flow [> *]!147; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4148; CHECK-NEXT:    da analyze - confused!149; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx7, align 4150; CHECK-NEXT:    da analyze - none!151; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4152; CHECK-NEXT:    da analyze - confused!153; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4154; CHECK-NEXT:    da analyze - none!155;156entry:157  br label %for.cond1.preheader158 159for.cond1.preheader:                              ; preds = %entry, %for.inc8160  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]161  %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]162  br label %for.body3163 164for.body3:                                        ; preds = %for.cond1.preheader, %for.body3165  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]166  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]167  %conv = trunc i64 %i.03 to i32168  %mul = shl nsw i64 %i.03, 1169  %sub = add nsw i64 %i.03, -1170  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %sub, i64 %mul171  store i32 %conv, ptr %arrayidx4, align 4172  %add = add nsw i64 %i.03, %j.02173  %add5 = add nsw i64 %add, 110174  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add5175  %0 = load i32, ptr %arrayidx7, align 4176  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1177  store i32 %0, ptr %B.addr.11, align 4178  %inc = add nsw i64 %j.02, 1179  %exitcond = icmp ne i64 %inc, 100180  br i1 %exitcond, label %for.body3, label %for.inc8181 182for.inc8:                                         ; preds = %for.body3183  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100184  %inc9 = add nsw i64 %i.03, 1185  %exitcond5 = icmp ne i64 %inc9, 100186  br i1 %exitcond5, label %for.cond1.preheader, label %for.end10187 188for.end10:                                        ; preds = %for.inc8189  ret void190}191 192 193;;  for (long int i = 0; i < 100; i++)194;;    for (long int j = 0; j < 100; j++) {195;;      A[i][2*j + i] = i;196;;      *B++ = A[i][2*j - i + 5];197 198define void @prop3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {199; CHECK-LABEL: 'prop3'200; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %conv, ptr %arrayidx4, align 4201; CHECK-NEXT:    da analyze - output [* *]!202; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4203; CHECK-NEXT:    da analyze - flow [<> *]!204; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4205; CHECK-NEXT:    da analyze - confused!206; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: %0 = load i32, ptr %arrayidx8, align 4207; CHECK-NEXT:    da analyze - input [* *]!208; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx8, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4209; CHECK-NEXT:    da analyze - confused!210; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4211; CHECK-NEXT:    da analyze - none!212;213entry:214  br label %for.cond1.preheader215 216for.cond1.preheader:                              ; preds = %entry, %for.inc9217  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc9 ]218  %i.03 = phi i64 [ 0, %entry ], [ %inc10, %for.inc9 ]219  br label %for.body3220 221for.body3:                                        ; preds = %for.cond1.preheader, %for.body3222  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]223  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]224  %conv = trunc i64 %i.03 to i32225  %mul = shl nsw i64 %j.02, 1226  %add = add nsw i64 %mul, %i.03227  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add228  store i32 %conv, ptr %arrayidx4, align 4229  %mul5 = shl nsw i64 %j.02, 1230  %sub = sub nsw i64 %mul5, %i.03231  %add6 = add nsw i64 %sub, 5232  %arrayidx8 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add6233  %0 = load i32, ptr %arrayidx8, align 4234  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1235  store i32 %0, ptr %B.addr.11, align 4236  %inc = add nsw i64 %j.02, 1237  %exitcond = icmp ne i64 %inc, 100238  br i1 %exitcond, label %for.body3, label %for.inc9239 240for.inc9:                                         ; preds = %for.body3241  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100242  %inc10 = add nsw i64 %i.03, 1243  %exitcond5 = icmp ne i64 %inc10, 100244  br i1 %exitcond5, label %for.cond1.preheader, label %for.end11245 246for.end11:                                        ; preds = %for.inc9247  ret void248}249 250 251;;  for (long int i = 0; i < 100; i++)252;;    for (long int j = 0; j < 100; j++) {253;;      A[i + 2][2*i + j + 1] = i;254;;      *B++ = A[i][2*i + j];255 256define void @prop4(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {257; CHECK-LABEL: 'prop4'258; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %conv, ptr %arrayidx6, align 4259; CHECK-NEXT:    da analyze - none!260; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx10, align 4261; CHECK-NEXT:    da analyze - flow [< <>]!262; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4263; CHECK-NEXT:    da analyze - confused!264; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx10, align 4 --> Dst: %0 = load i32, ptr %arrayidx10, align 4265; CHECK-NEXT:    da analyze - none!266; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx10, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4267; CHECK-NEXT:    da analyze - confused!268; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4269; CHECK-NEXT:    da analyze - none!270;271entry:272  br label %for.cond1.preheader273 274for.cond1.preheader:                              ; preds = %entry, %for.inc11275  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc11 ]276  %i.03 = phi i64 [ 0, %entry ], [ %inc12, %for.inc11 ]277  br label %for.body3278 279for.body3:                                        ; preds = %for.cond1.preheader, %for.body3280  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]281  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]282  %conv = trunc i64 %i.03 to i32283  %mul = shl nsw i64 %i.03, 1284  %add = add nsw i64 %mul, %j.02285  %add4 = add nsw i64 %add, 1286  %add5 = add nsw i64 %i.03, 2287  %arrayidx6 = getelementptr inbounds [100 x i32], ptr %A, i64 %add5, i64 %add4288  store i32 %conv, ptr %arrayidx6, align 4289  %mul7 = shl nsw i64 %i.03, 1290  %add8 = add nsw i64 %mul7, %j.02291  %arrayidx10 = getelementptr inbounds [100 x i32], ptr %A, i64 %i.03, i64 %add8292  %0 = load i32, ptr %arrayidx10, align 4293  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1294  store i32 %0, ptr %B.addr.11, align 4295  %inc = add nsw i64 %j.02, 1296  %exitcond = icmp ne i64 %inc, 100297  br i1 %exitcond, label %for.body3, label %for.inc11298 299for.inc11:                                        ; preds = %for.body3300  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100301  %inc12 = add nsw i64 %i.03, 1302  %exitcond5 = icmp ne i64 %inc12, 100303  br i1 %exitcond5, label %for.cond1.preheader, label %for.end13304 305for.end13:                                        ; preds = %for.inc11306  ret void307}308 309 310;;  for (long int i = 0; i < 100; i++)311;;    for (long int j = 0; j < 100; j++) {312;;      A[3*i - 18][22 - i][2*i + j] = i;313;;      *B++ = A[i][i][3*i + j];314 315define void @prop5(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {316; CHECK-LABEL: 'prop5'317; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: store i32 %conv, ptr %arrayidx7, align 4318; CHECK-NEXT:    da analyze - none!319; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx12, align 4320; CHECK-NEXT:    da analyze - flow [* *|<]!321; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4322; CHECK-NEXT:    da analyze - confused!323; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx12, align 4 --> Dst: %0 = load i32, ptr %arrayidx12, align 4324; CHECK-NEXT:    da analyze - none!325; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx12, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4326; CHECK-NEXT:    da analyze - confused!327; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4328; CHECK-NEXT:    da analyze - none!329;330entry:331  br label %for.cond1.preheader332 333for.cond1.preheader:                              ; preds = %entry, %for.inc13334  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc13 ]335  %i.03 = phi i64 [ 0, %entry ], [ %inc14, %for.inc13 ]336  br label %for.body3337 338for.body3:                                        ; preds = %for.cond1.preheader, %for.body3339  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]340  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]341  %conv = trunc i64 %i.03 to i32342  %mul = shl nsw i64 %i.03, 1343  %add = add nsw i64 %mul, %j.02344  %sub = sub nsw i64 22, %i.03345  %mul4 = mul nsw i64 %i.03, 3346  %sub5 = add nsw i64 %mul4, -18347  %arrayidx7 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %sub5, i64 %sub, i64 %add348  store i32 %conv, ptr %arrayidx7, align 4349  %mul8 = mul nsw i64 %i.03, 3350  %add9 = add nsw i64 %mul8, %j.02351  %arrayidx12 = getelementptr inbounds [100 x [100 x i32]], ptr %A, i64 %i.03, i64 %i.03, i64 %add9352  %0 = load i32, ptr %arrayidx12, align 4353  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1354  store i32 %0, ptr %B.addr.11, align 4355  %inc = add nsw i64 %j.02, 1356  %exitcond = icmp ne i64 %inc, 100357  br i1 %exitcond, label %for.body3, label %for.inc13358 359for.inc13:                                        ; preds = %for.body3360  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100361  %inc14 = add nsw i64 %i.03, 1362  %exitcond5 = icmp ne i64 %inc14, 100363  br i1 %exitcond5, label %for.cond1.preheader, label %for.end15364 365for.end15:                                        ; preds = %for.inc13366  ret void367}368 369 370;;  for (long int i = 0; i < 100; i++)371;;    for (long int j = 0; j < 100; j++) {372;;      A[i + 1][4*i + j + 2] = i;373;;      *B++ = A[2*i][8*i + j];374 375define void @prop6(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {376; CHECK-LABEL: 'prop6'377; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %conv, ptr %arrayidx6, align 4378; CHECK-NEXT:    da analyze - none!379; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: %0 = load i32, ptr %arrayidx11, align 4380; CHECK-NEXT:    da analyze - flow [=> <>]!381; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx6, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4382; CHECK-NEXT:    da analyze - confused!383; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx11, align 4 --> Dst: %0 = load i32, ptr %arrayidx11, align 4384; CHECK-NEXT:    da analyze - none!385; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4386; CHECK-NEXT:    da analyze - confused!387; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4388; CHECK-NEXT:    da analyze - none!389;390entry:391  br label %for.cond1.preheader392 393for.cond1.preheader:                              ; preds = %entry, %for.inc12394  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc12 ]395  %i.03 = phi i64 [ 0, %entry ], [ %inc13, %for.inc12 ]396  br label %for.body3397 398for.body3:                                        ; preds = %for.cond1.preheader, %for.body3399  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]400  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]401  %conv = trunc i64 %i.03 to i32402  %mul = shl nsw i64 %i.03, 2403  %add = add nsw i64 %mul, %j.02404  %add4 = add nsw i64 %add, 2405  %add5 = add nsw i64 %i.03, 1406  %arrayidx6 = getelementptr inbounds [100 x i32], ptr %A, i64 %add5, i64 %add4407  store i32 %conv, ptr %arrayidx6, align 4408  %mul7 = shl nsw i64 %i.03, 3409  %add8 = add nsw i64 %mul7, %j.02410  %mul9 = shl nsw i64 %i.03, 1411  %arrayidx11 = getelementptr inbounds [100 x i32], ptr %A, i64 %mul9, i64 %add8412  %0 = load i32, ptr %arrayidx11, align 4413  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1414  store i32 %0, ptr %B.addr.11, align 4415  %inc = add nsw i64 %j.02, 1416  %exitcond = icmp ne i64 %inc, 100417  br i1 %exitcond, label %for.body3, label %for.inc12418 419for.inc12:                                        ; preds = %for.body3420  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100421  %inc13 = add nsw i64 %i.03, 1422  %exitcond5 = icmp ne i64 %inc13, 100423  br i1 %exitcond5, label %for.cond1.preheader, label %for.end14424 425for.end14:                                        ; preds = %for.inc12426  ret void427}428 429 430;;  for (long int i = 0; i < 100; i++)431;;    for (long int j = 0; j < 100; j++) {432;;      A[2*i + 4][-5*i + j + 2] = i;433;;      *B++ = A[-2*i + 20][5*i + j];434 435define void @prop7(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {436; CHECK-LABEL: 'prop7'437; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: store i32 %conv, ptr %arrayidx7, align 4438; CHECK-NEXT:    da analyze - none!439; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx13, align 4440; CHECK-NEXT:    da analyze - flow [* -38]!441; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4442; CHECK-NEXT:    da analyze - confused!443; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx13, align 4 --> Dst: %0 = load i32, ptr %arrayidx13, align 4444; CHECK-NEXT:    da analyze - none!445; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx13, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4446; CHECK-NEXT:    da analyze - confused!447; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4448; CHECK-NEXT:    da analyze - none!449;450entry:451  br label %for.cond1.preheader452 453for.cond1.preheader:                              ; preds = %entry, %for.inc14454  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc14 ]455  %i.03 = phi i64 [ 0, %entry ], [ %inc15, %for.inc14 ]456  br label %for.body3457 458for.body3:                                        ; preds = %for.cond1.preheader, %for.body3459  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]460  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]461  %conv = trunc i64 %i.03 to i32462  %mul = mul nsw i64 %i.03, -5463  %add = add nsw i64 %mul, %j.02464  %add4 = add nsw i64 %add, 2465  %mul5 = shl nsw i64 %i.03, 1466  %add6 = add nsw i64 %mul5, 4467  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %add6, i64 %add4468  store i32 %conv, ptr %arrayidx7, align 4469  %mul8 = mul nsw i64 %i.03, 5470  %add9 = add nsw i64 %mul8, %j.02471  %mul10 = mul nsw i64 %i.03, -2472  %add11 = add nsw i64 %mul10, 20473  %arrayidx13 = getelementptr inbounds [100 x i32], ptr %A, i64 %add11, i64 %add9474  %0 = load i32, ptr %arrayidx13, align 4475  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1476  store i32 %0, ptr %B.addr.11, align 4477  %inc = add nsw i64 %j.02, 1478  %exitcond = icmp ne i64 %inc, 100479  br i1 %exitcond, label %for.body3, label %for.inc14480 481for.inc14:                                        ; preds = %for.body3482  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100483  %inc15 = add nsw i64 %i.03, 1484  %exitcond5 = icmp ne i64 %inc15, 100485  br i1 %exitcond5, label %for.cond1.preheader, label %for.end16486 487for.end16:                                        ; preds = %for.inc14488  ret void489}490 491 492;;  for (long int i = 0; i < 100; i++)493;;    for (long int j = 0; j < 100; j++) {494;;      A[4][j + 2] = i;495;;      *B++ = A[-2*i + 4][5*i + j];496 497define void @prop8(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {498; CHECK-LABEL: 'prop8'499; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %conv, ptr %arrayidx4, align 4500; CHECK-NEXT:    da analyze - consistent output [S 0]!501; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 4502; CHECK-NEXT:    da analyze - flow [=> <]!503; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx4, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4504; CHECK-NEXT:    da analyze - confused!505; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 4506; CHECK-NEXT:    da analyze - none!507; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4508; CHECK-NEXT:    da analyze - confused!509; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4510; CHECK-NEXT:    da analyze - none!511;512entry:513  br label %for.cond1.preheader514 515for.cond1.preheader:                              ; preds = %entry, %for.inc10516  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc10 ]517  %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]518  br label %for.body3519 520for.body3:                                        ; preds = %for.cond1.preheader, %for.body3521  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]522  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]523  %conv = trunc i64 %i.03 to i32524  %add = add nsw i64 %j.02, 2525  %arrayidx4 = getelementptr inbounds [100 x i32], ptr %A, i64 4, i64 %add526  store i32 %conv, ptr %arrayidx4, align 4527  %mul = mul nsw i64 %i.03, 5528  %add5 = add nsw i64 %mul, %j.02529  %mul6 = mul nsw i64 %i.03, -2530  %add7 = add nsw i64 %mul6, 4531  %arrayidx9 = getelementptr inbounds [100 x i32], ptr %A, i64 %add7, i64 %add5532  %0 = load i32, ptr %arrayidx9, align 4533  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1534  store i32 %0, ptr %B.addr.11, align 4535  %inc = add nsw i64 %j.02, 1536  %exitcond = icmp ne i64 %inc, 100537  br i1 %exitcond, label %for.body3, label %for.inc10538 539for.inc10:                                        ; preds = %for.body3540  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100541  %inc11 = add nsw i64 %i.03, 1542  %exitcond5 = icmp ne i64 %inc11, 100543  br i1 %exitcond5, label %for.cond1.preheader, label %for.end12544 545for.end12:                                        ; preds = %for.inc10546  ret void547}548 549 550;;  for (long int i = 0; i < 100; i++)551;;    for (long int j = 0; j < 100; j++) {552;;      A[2*i + 4][5*i + j + 2] = i;553;;      *B++ = A[4][j];554 555define void @prop9(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {556; CHECK-LABEL: 'prop9'557; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: store i32 %conv, ptr %arrayidx7, align 4558; CHECK-NEXT:    da analyze - none!559; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 4560; CHECK-NEXT:    da analyze - flow [<= <]!561; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx7, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4562; CHECK-NEXT:    da analyze - confused!563; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: %0 = load i32, ptr %arrayidx9, align 4564; CHECK-NEXT:    da analyze - consistent input [S 0]!565; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx9, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4566; CHECK-NEXT:    da analyze - confused!567; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.11, align 4 --> Dst: store i32 %0, ptr %B.addr.11, align 4568; CHECK-NEXT:    da analyze - none!569;570entry:571  br label %for.cond1.preheader572 573for.cond1.preheader:                              ; preds = %entry, %for.inc10574  %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc10 ]575  %i.03 = phi i64 [ 0, %entry ], [ %inc11, %for.inc10 ]576  br label %for.body3577 578for.body3:                                        ; preds = %for.cond1.preheader, %for.body3579  %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]580  %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]581  %conv = trunc i64 %i.03 to i32582  %mul = mul nsw i64 %i.03, 5583  %add = add nsw i64 %mul, %j.02584  %add4 = add nsw i64 %add, 2585  %mul5 = shl nsw i64 %i.03, 1586  %add6 = add nsw i64 %mul5, 4587  %arrayidx7 = getelementptr inbounds [100 x i32], ptr %A, i64 %add6, i64 %add4588  store i32 %conv, ptr %arrayidx7, align 4589  %arrayidx9 = getelementptr inbounds [100 x i32], ptr %A, i64 4, i64 %j.02590  %0 = load i32, ptr %arrayidx9, align 4591  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.11, i64 1592  store i32 %0, ptr %B.addr.11, align 4593  %inc = add nsw i64 %j.02, 1594  %exitcond = icmp ne i64 %inc, 100595  br i1 %exitcond, label %for.body3, label %for.inc10596 597for.inc10:                                        ; preds = %for.body3598  %scevgep = getelementptr i32, ptr %B.addr.04, i64 100599  %inc11 = add nsw i64 %i.03, 1600  %exitcond5 = icmp ne i64 %inc11, 100601  br i1 %exitcond5, label %for.cond1.preheader, label %for.end12602 603for.end12:                                        ; preds = %for.inc10604  ret void605}606