1134 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -disable-output -da-delinearize=false "-passes=print<da>" \3; RUN: -aa-pipeline=basic-aa 2>&1 | FileCheck %s4; RUN: opt < %s -disable-output -da-delinearize=false -passes='print<da><normalized-results>' \5; RUN: -aa-pipeline=basic-aa 2>&1 | FileCheck %s -check-prefix=NORMALIZE6; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \7; RUN: | FileCheck %s -check-prefix=DELIN8 9target 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"10target triple = "x86_64-apple-macosx10.6.0"11 12 13;; for (long int i = 1; i <= 10; i++)14;; for (long int j = 1; j <= 10; j++) {15;; A[10*i + j] = 0;16;; *B++ = A[10*i + j - 1];17 18define void @banerjee0(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {19; CHECK-LABEL: 'banerjee0'20; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 821; CHECK-NEXT: da analyze - none!22; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 823; CHECK-NEXT: da analyze - flow [<= <>]!24; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 825; CHECK-NEXT: da analyze - confused!26; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 827; CHECK-NEXT: da analyze - none!28; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 829; CHECK-NEXT: da analyze - confused!30; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 831; CHECK-NEXT: da analyze - none!32;33; NORMALIZE-LABEL: 'banerjee0'34; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 835; NORMALIZE-NEXT: da analyze - none!36; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 837; NORMALIZE-NEXT: da analyze - flow [<= <>]!38; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 839; NORMALIZE-NEXT: da analyze - confused!40; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 841; NORMALIZE-NEXT: da analyze - none!42; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 843; NORMALIZE-NEXT: da analyze - confused!44; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 845; NORMALIZE-NEXT: da analyze - none!46;47; DELIN-LABEL: 'banerjee0'48; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 849; DELIN-NEXT: da analyze - none!50; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 851; DELIN-NEXT: da analyze - flow [<= <>]!52; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 853; DELIN-NEXT: da analyze - confused!54; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 855; DELIN-NEXT: da analyze - none!56; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 857; DELIN-NEXT: da analyze - confused!58; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 859; DELIN-NEXT: da analyze - none!60;61entry:62 br label %for.cond1.preheader63 64for.cond1.preheader: ; preds = %entry, %for.inc765 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]66 %i.03 = phi i64 [ 1, %entry ], [ %inc8, %for.inc7 ]67 br label %for.body368 69for.body3: ; preds = %for.cond1.preheader, %for.body370 %j.02 = phi i64 [ 1, %for.cond1.preheader ], [ %inc, %for.body3 ]71 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]72 %mul = mul nsw i64 %i.03, 1073 %add = add nsw i64 %mul, %j.0274 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add75 store i64 0, ptr %arrayidx, align 876 %mul4 = mul nsw i64 %i.03, 1077 %add5 = add nsw i64 %mul4, %j.0278 %sub = add nsw i64 %add5, -179 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub80 %0 = load i64, ptr %arrayidx6, align 881 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 182 store i64 %0, ptr %B.addr.11, align 883 %inc = add nsw i64 %j.02, 184 %exitcond = icmp ne i64 %inc, 1185 br i1 %exitcond, label %for.body3, label %for.inc786 87for.inc7: ; preds = %for.body388 %scevgep = getelementptr i64, ptr %B.addr.04, i64 1089 %inc8 = add nsw i64 %i.03, 190 %exitcond5 = icmp ne i64 %inc8, 1191 br i1 %exitcond5, label %for.cond1.preheader, label %for.end992 93for.end9: ; preds = %for.inc794 ret void95}96 97 98;; for (long int i = 1; i <= n; i++)99;; for (long int j = 1; j <= m; j++) {100;; A[10*i + j] = 0;101;; *B++ = A[10*i + j - 1];102 103define void @banerjee1(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {104; CHECK-LABEL: 'banerjee1'105; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8106; CHECK-NEXT: da analyze - output [* *]!107; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %2 = load i64, ptr %arrayidx6, align 8108; CHECK-NEXT: da analyze - flow [* <>]!109; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8110; CHECK-NEXT: da analyze - confused!111; CHECK-NEXT: Src: %2 = load i64, ptr %arrayidx6, align 8 --> Dst: %2 = load i64, ptr %arrayidx6, align 8112; CHECK-NEXT: da analyze - input [* *]!113; CHECK-NEXT: Src: %2 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8114; CHECK-NEXT: da analyze - confused!115; CHECK-NEXT: Src: store i64 %2, ptr %B.addr.12, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8116; CHECK-NEXT: da analyze - confused!117;118; NORMALIZE-LABEL: 'banerjee1'119; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8120; NORMALIZE-NEXT: da analyze - output [* *]!121; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %2 = load i64, ptr %arrayidx6, align 8122; NORMALIZE-NEXT: da analyze - flow [* <>]!123; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8124; NORMALIZE-NEXT: da analyze - confused!125; NORMALIZE-NEXT: Src: %2 = load i64, ptr %arrayidx6, align 8 --> Dst: %2 = load i64, ptr %arrayidx6, align 8126; NORMALIZE-NEXT: da analyze - input [* *]!127; NORMALIZE-NEXT: Src: %2 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8128; NORMALIZE-NEXT: da analyze - confused!129; NORMALIZE-NEXT: Src: store i64 %2, ptr %B.addr.12, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8130; NORMALIZE-NEXT: da analyze - confused!131;132; DELIN-LABEL: 'banerjee1'133; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8134; DELIN-NEXT: da analyze - output [* *]!135; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %2 = load i64, ptr %arrayidx6, align 8136; DELIN-NEXT: da analyze - flow [* <>]!137; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8138; DELIN-NEXT: da analyze - confused!139; DELIN-NEXT: Src: %2 = load i64, ptr %arrayidx6, align 8 --> Dst: %2 = load i64, ptr %arrayidx6, align 8140; DELIN-NEXT: da analyze - input [* *]!141; DELIN-NEXT: Src: %2 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8142; DELIN-NEXT: da analyze - confused!143; DELIN-NEXT: Src: store i64 %2, ptr %B.addr.12, align 8 --> Dst: store i64 %2, ptr %B.addr.12, align 8144; DELIN-NEXT: da analyze - confused!145;146entry:147 %cmp4 = icmp sgt i64 %n, 0148 br i1 %cmp4, label %for.cond1.preheader.preheader, label %for.end9149 150for.cond1.preheader.preheader: ; preds = %entry151 %0 = add i64 %n, 1152 br label %for.cond1.preheader153 154for.cond1.preheader: ; preds = %for.cond1.preheader.preheader, %for.inc7155 %B.addr.06 = phi ptr [ %B.addr.1.lcssa, %for.inc7 ], [ %B, %for.cond1.preheader.preheader ]156 %i.05 = phi i64 [ %inc8, %for.inc7 ], [ 1, %for.cond1.preheader.preheader ]157 %1 = add i64 %m, 1158 %cmp21 = icmp sgt i64 %m, 0159 br i1 %cmp21, label %for.body3.preheader, label %for.inc7160 161for.body3.preheader: ; preds = %for.cond1.preheader162 br label %for.body3163 164for.body3: ; preds = %for.body3.preheader, %for.body3165 %j.03 = phi i64 [ %inc, %for.body3 ], [ 1, %for.body3.preheader ]166 %B.addr.12 = phi ptr [ %incdec.ptr, %for.body3 ], [ %B.addr.06, %for.body3.preheader ]167 %mul = mul nsw i64 %i.05, 10168 %add = add nsw i64 %mul, %j.03169 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add170 store i64 0, ptr %arrayidx, align 8171 %mul4 = mul nsw i64 %i.05, 10172 %add5 = add nsw i64 %mul4, %j.03173 %sub = add nsw i64 %add5, -1174 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub175 %2 = load i64, ptr %arrayidx6, align 8176 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.12, i64 1177 store i64 %2, ptr %B.addr.12, align 8178 %inc = add nsw i64 %j.03, 1179 %exitcond = icmp eq i64 %inc, %1180 br i1 %exitcond, label %for.inc7.loopexit, label %for.body3181 182for.inc7.loopexit: ; preds = %for.body3183 %scevgep = getelementptr i64, ptr %B.addr.06, i64 %m184 br label %for.inc7185 186for.inc7: ; preds = %for.inc7.loopexit, %for.cond1.preheader187 %B.addr.1.lcssa = phi ptr [ %B.addr.06, %for.cond1.preheader ], [ %scevgep, %for.inc7.loopexit ]188 %inc8 = add nsw i64 %i.05, 1189 %exitcond7 = icmp eq i64 %inc8, %0190 br i1 %exitcond7, label %for.end9.loopexit, label %for.cond1.preheader191 192for.end9.loopexit: ; preds = %for.inc7193 br label %for.end9194 195for.end9: ; preds = %for.end9.loopexit, %entry196 ret void197}198 199 200;; for (long int i = 0; i < 10; i++)201;; for (long int j = 0; j < 10; j++) {202;; A[10*i + j] = 0;203;; *B++ = A[10*i + j + 100];204 205define void @banerjee2(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {206; CHECK-LABEL: 'banerjee2'207; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8208; CHECK-NEXT: da analyze - none!209; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8210; CHECK-NEXT: da analyze - none!211; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8212; CHECK-NEXT: da analyze - confused!213; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8214; CHECK-NEXT: da analyze - none!215; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8216; CHECK-NEXT: da analyze - confused!217; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8218; CHECK-NEXT: da analyze - none!219;220; NORMALIZE-LABEL: 'banerjee2'221; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8222; NORMALIZE-NEXT: da analyze - none!223; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8224; NORMALIZE-NEXT: da analyze - none!225; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8226; NORMALIZE-NEXT: da analyze - confused!227; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8228; NORMALIZE-NEXT: da analyze - none!229; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8230; NORMALIZE-NEXT: da analyze - confused!231; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8232; NORMALIZE-NEXT: da analyze - none!233;234; DELIN-LABEL: 'banerjee2'235; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8236; DELIN-NEXT: da analyze - none!237; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8238; DELIN-NEXT: da analyze - none!239; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8240; DELIN-NEXT: da analyze - confused!241; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8242; DELIN-NEXT: da analyze - none!243; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8244; DELIN-NEXT: da analyze - confused!245; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8246; DELIN-NEXT: da analyze - none!247;248entry:249 br label %for.cond1.preheader250 251for.cond1.preheader: ; preds = %entry, %for.inc8252 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]253 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]254 br label %for.body3255 256for.body3: ; preds = %for.cond1.preheader, %for.body3257 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]258 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]259 %mul = mul nsw i64 %i.03, 10260 %add = add nsw i64 %mul, %j.02261 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add262 store i64 0, ptr %arrayidx, align 8263 %mul4 = mul nsw i64 %i.03, 10264 %add5 = add nsw i64 %mul4, %j.02265 %add6 = add nsw i64 %add5, 100266 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6267 %0 = load i64, ptr %arrayidx7, align 8268 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1269 store i64 %0, ptr %B.addr.11, align 8270 %inc = add nsw i64 %j.02, 1271 %exitcond = icmp ne i64 %inc, 10272 br i1 %exitcond, label %for.body3, label %for.inc8273 274for.inc8: ; preds = %for.body3275 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10276 %inc9 = add nsw i64 %i.03, 1277 %exitcond5 = icmp ne i64 %inc9, 10278 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10279 280for.end10: ; preds = %for.inc8281 ret void282}283 284 285;; for (long int i = 0; i < 10; i++)286;; for (long int j = 0; j < 10; j++) {287;; A[10*i + j] = 0;288;; *B++ = A[10*i + j + 99];289 290define void @banerjee3(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {291; CHECK-LABEL: 'banerjee3'292; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8293; CHECK-NEXT: da analyze - none!294; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8295; CHECK-NEXT: da analyze - flow [> >]!296; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8297; CHECK-NEXT: da analyze - confused!298; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8299; CHECK-NEXT: da analyze - none!300; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8301; CHECK-NEXT: da analyze - confused!302; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8303; CHECK-NEXT: da analyze - none!304;305; NORMALIZE-LABEL: 'banerjee3'306; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8307; NORMALIZE-NEXT: da analyze - none!308; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8309; NORMALIZE-NEXT: da analyze - normalized - anti [< <]!310; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8311; NORMALIZE-NEXT: da analyze - confused!312; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8313; NORMALIZE-NEXT: da analyze - none!314; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8315; NORMALIZE-NEXT: da analyze - confused!316; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8317; NORMALIZE-NEXT: da analyze - none!318;319; DELIN-LABEL: 'banerjee3'320; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8321; DELIN-NEXT: da analyze - none!322; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8323; DELIN-NEXT: da analyze - flow [> >]!324; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8325; DELIN-NEXT: da analyze - confused!326; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8327; DELIN-NEXT: da analyze - none!328; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8329; DELIN-NEXT: da analyze - confused!330; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8331; DELIN-NEXT: da analyze - none!332;333entry:334 br label %for.cond1.preheader335 336for.cond1.preheader: ; preds = %entry, %for.inc8337 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]338 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]339 br label %for.body3340 341for.body3: ; preds = %for.cond1.preheader, %for.body3342 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]343 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]344 %mul = mul nsw i64 %i.03, 10345 %add = add nsw i64 %mul, %j.02346 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add347 store i64 0, ptr %arrayidx, align 8348 %mul4 = mul nsw i64 %i.03, 10349 %add5 = add nsw i64 %mul4, %j.02350 %add6 = add nsw i64 %add5, 99351 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6352 %0 = load i64, ptr %arrayidx7, align 8353 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1354 store i64 %0, ptr %B.addr.11, align 8355 %inc = add nsw i64 %j.02, 1356 %exitcond = icmp ne i64 %inc, 10357 br i1 %exitcond, label %for.body3, label %for.inc8358 359for.inc8: ; preds = %for.body3360 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10361 %inc9 = add nsw i64 %i.03, 1362 %exitcond5 = icmp ne i64 %inc9, 10363 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10364 365for.end10: ; preds = %for.inc8366 ret void367}368 369 370;; for (long int i = 0; i < 10; i++)371;; for (long int j = 0; j < 10; j++) {372;; A[10*i + j] = 0;373;; *B++ = A[10*i + j - 100];374 375define void @banerjee4(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {376; CHECK-LABEL: 'banerjee4'377; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8378; CHECK-NEXT: da analyze - none!379; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8380; CHECK-NEXT: da analyze - none!381; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8382; CHECK-NEXT: da analyze - confused!383; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8384; CHECK-NEXT: da analyze - none!385; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8386; CHECK-NEXT: da analyze - confused!387; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8388; CHECK-NEXT: da analyze - none!389;390; NORMALIZE-LABEL: 'banerjee4'391; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8392; NORMALIZE-NEXT: da analyze - none!393; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8394; NORMALIZE-NEXT: da analyze - none!395; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8396; NORMALIZE-NEXT: da analyze - confused!397; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8398; NORMALIZE-NEXT: da analyze - none!399; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8400; NORMALIZE-NEXT: da analyze - confused!401; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8402; NORMALIZE-NEXT: da analyze - none!403;404; DELIN-LABEL: 'banerjee4'405; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8406; DELIN-NEXT: da analyze - none!407; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8408; DELIN-NEXT: da analyze - none!409; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8410; DELIN-NEXT: da analyze - confused!411; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8412; DELIN-NEXT: da analyze - none!413; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8414; DELIN-NEXT: da analyze - confused!415; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8416; DELIN-NEXT: da analyze - none!417;418entry:419 br label %for.cond1.preheader420 421for.cond1.preheader: ; preds = %entry, %for.inc7422 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]423 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]424 br label %for.body3425 426for.body3: ; preds = %for.cond1.preheader, %for.body3427 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]428 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]429 %mul = mul nsw i64 %i.03, 10430 %add = add nsw i64 %mul, %j.02431 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add432 store i64 0, ptr %arrayidx, align 8433 %mul4 = mul nsw i64 %i.03, 10434 %add5 = add nsw i64 %mul4, %j.02435 %sub = add nsw i64 %add5, -100436 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub437 %0 = load i64, ptr %arrayidx6, align 8438 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1439 store i64 %0, ptr %B.addr.11, align 8440 %inc = add nsw i64 %j.02, 1441 %exitcond = icmp ne i64 %inc, 10442 br i1 %exitcond, label %for.body3, label %for.inc7443 444for.inc7: ; preds = %for.body3445 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10446 %inc8 = add nsw i64 %i.03, 1447 %exitcond5 = icmp ne i64 %inc8, 10448 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9449 450for.end9: ; preds = %for.inc7451 ret void452}453 454 455;; for (long int i = 0; i < 10; i++)456;; for (long int j = 0; j < 10; j++) {457;; A[10*i + j] = 0;458;; *B++ = A[10*i + j - 99];459 460define void @banerjee5(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {461; CHECK-LABEL: 'banerjee5'462; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8463; CHECK-NEXT: da analyze - none!464; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8465; CHECK-NEXT: da analyze - flow [< <]!466; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8467; CHECK-NEXT: da analyze - confused!468; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8469; CHECK-NEXT: da analyze - none!470; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8471; CHECK-NEXT: da analyze - confused!472; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8473; CHECK-NEXT: da analyze - none!474;475; NORMALIZE-LABEL: 'banerjee5'476; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8477; NORMALIZE-NEXT: da analyze - none!478; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8479; NORMALIZE-NEXT: da analyze - flow [< <]!480; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8481; NORMALIZE-NEXT: da analyze - confused!482; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8483; NORMALIZE-NEXT: da analyze - none!484; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8485; NORMALIZE-NEXT: da analyze - confused!486; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8487; NORMALIZE-NEXT: da analyze - none!488;489; DELIN-LABEL: 'banerjee5'490; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8491; DELIN-NEXT: da analyze - none!492; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8493; DELIN-NEXT: da analyze - flow [< <]!494; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8495; DELIN-NEXT: da analyze - confused!496; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8497; DELIN-NEXT: da analyze - none!498; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8499; DELIN-NEXT: da analyze - confused!500; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8501; DELIN-NEXT: da analyze - none!502;503entry:504 br label %for.cond1.preheader505 506for.cond1.preheader: ; preds = %entry, %for.inc7507 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]508 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]509 br label %for.body3510 511for.body3: ; preds = %for.cond1.preheader, %for.body3512 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]513 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]514 %mul = mul nsw i64 %i.03, 10515 %add = add nsw i64 %mul, %j.02516 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add517 store i64 0, ptr %arrayidx, align 8518 %mul4 = mul nsw i64 %i.03, 10519 %add5 = add nsw i64 %mul4, %j.02520 %sub = add nsw i64 %add5, -99521 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %sub522 %0 = load i64, ptr %arrayidx6, align 8523 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1524 store i64 %0, ptr %B.addr.11, align 8525 %inc = add nsw i64 %j.02, 1526 %exitcond = icmp ne i64 %inc, 10527 br i1 %exitcond, label %for.body3, label %for.inc7528 529for.inc7: ; preds = %for.body3530 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10531 %inc8 = add nsw i64 %i.03, 1532 %exitcond5 = icmp ne i64 %inc8, 10533 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9534 535for.end9: ; preds = %for.inc7536 ret void537}538 539 540;; for (long int i = 0; i < 10; i++)541;; for (long int j = 0; j < 10; j++) {542;; A[10*i + j] = 0;543;; *B++ = A[10*i + j + 9];544 545define void @banerjee6(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {546; CHECK-LABEL: 'banerjee6'547; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8548; CHECK-NEXT: da analyze - none!549; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8550; CHECK-NEXT: da analyze - flow [=> <>]!551; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8552; CHECK-NEXT: da analyze - confused!553; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8554; CHECK-NEXT: da analyze - none!555; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8556; CHECK-NEXT: da analyze - confused!557; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8558; CHECK-NEXT: da analyze - none!559;560; NORMALIZE-LABEL: 'banerjee6'561; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8562; NORMALIZE-NEXT: da analyze - none!563; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8564; NORMALIZE-NEXT: da analyze - normalized - anti [<= <>]!565; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8566; NORMALIZE-NEXT: da analyze - confused!567; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8568; NORMALIZE-NEXT: da analyze - none!569; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8570; NORMALIZE-NEXT: da analyze - confused!571; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8572; NORMALIZE-NEXT: da analyze - none!573;574; DELIN-LABEL: 'banerjee6'575; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8576; DELIN-NEXT: da analyze - none!577; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8578; DELIN-NEXT: da analyze - flow [=> <>]!579; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8580; DELIN-NEXT: da analyze - confused!581; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8582; DELIN-NEXT: da analyze - none!583; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8584; DELIN-NEXT: da analyze - confused!585; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8586; DELIN-NEXT: da analyze - none!587;588entry:589 br label %for.cond1.preheader590 591for.cond1.preheader: ; preds = %entry, %for.inc8592 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]593 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]594 br label %for.body3595 596for.body3: ; preds = %for.cond1.preheader, %for.body3597 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]598 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]599 %mul = mul nsw i64 %i.03, 10600 %add = add nsw i64 %mul, %j.02601 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add602 store i64 0, ptr %arrayidx, align 8603 %mul4 = mul nsw i64 %i.03, 10604 %add5 = add nsw i64 %mul4, %j.02605 %add6 = add nsw i64 %add5, 9606 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6607 %0 = load i64, ptr %arrayidx7, align 8608 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1609 store i64 %0, ptr %B.addr.11, align 8610 %inc = add nsw i64 %j.02, 1611 %exitcond = icmp ne i64 %inc, 10612 br i1 %exitcond, label %for.body3, label %for.inc8613 614for.inc8: ; preds = %for.body3615 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10616 %inc9 = add nsw i64 %i.03, 1617 %exitcond5 = icmp ne i64 %inc9, 10618 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10619 620for.end10: ; preds = %for.inc8621 ret void622}623 624 625;; for (long int i = 0; i < 10; i++)626;; for (long int j = 0; j < 10; j++) {627;; A[10*i + j] = 0;628;; *B++ = A[10*i + j + 10];629 630define void @banerjee7(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {631; CHECK-LABEL: 'banerjee7'632; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8633; CHECK-NEXT: da analyze - none!634; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8635; CHECK-NEXT: da analyze - flow [> <=]!636; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8637; CHECK-NEXT: da analyze - confused!638; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8639; CHECK-NEXT: da analyze - none!640; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8641; CHECK-NEXT: da analyze - confused!642; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8643; CHECK-NEXT: da analyze - none!644;645; NORMALIZE-LABEL: 'banerjee7'646; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8647; NORMALIZE-NEXT: da analyze - none!648; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8649; NORMALIZE-NEXT: da analyze - normalized - anti [< =>]!650; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8651; NORMALIZE-NEXT: da analyze - confused!652; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8653; NORMALIZE-NEXT: da analyze - none!654; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8655; NORMALIZE-NEXT: da analyze - confused!656; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8657; NORMALIZE-NEXT: da analyze - none!658;659; DELIN-LABEL: 'banerjee7'660; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8661; DELIN-NEXT: da analyze - none!662; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8663; DELIN-NEXT: da analyze - consistent flow [-1 0]!664; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8665; DELIN-NEXT: da analyze - confused!666; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8667; DELIN-NEXT: da analyze - none!668; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8669; DELIN-NEXT: da analyze - confused!670; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8671; DELIN-NEXT: da analyze - none!672;673entry:674 br label %for.cond1.preheader675 676for.cond1.preheader: ; preds = %entry, %for.inc8677 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]678 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]679 br label %for.body3680 681for.body3: ; preds = %for.cond1.preheader, %for.body3682 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]683 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]684 %mul = mul nsw i64 %i.03, 10685 %add = add nsw i64 %mul, %j.02686 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add687 store i64 0, ptr %arrayidx, align 8688 %mul4 = mul nsw i64 %i.03, 10689 %add5 = add nsw i64 %mul4, %j.02690 %add6 = add nsw i64 %add5, 10691 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6692 %0 = load i64, ptr %arrayidx7, align 8693 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1694 store i64 %0, ptr %B.addr.11, align 8695 %inc = add nsw i64 %j.02, 1696 %exitcond = icmp ne i64 %inc, 10697 br i1 %exitcond, label %for.body3, label %for.inc8698 699for.inc8: ; preds = %for.body3700 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10701 %inc9 = add nsw i64 %i.03, 1702 %exitcond5 = icmp ne i64 %inc9, 10703 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10704 705for.end10: ; preds = %for.inc8706 ret void707}708 709 710;; for (long int i = 0; i < 10; i++)711;; for (long int j = 0; j < 10; j++) {712;; A[10*i + j] = 0;713;; *B++ = A[10*i + j + 11];714 715define void @banerjee8(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {716; CHECK-LABEL: 'banerjee8'717; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8718; CHECK-NEXT: da analyze - none!719; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8720; CHECK-NEXT: da analyze - flow [> <>]!721; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8722; CHECK-NEXT: da analyze - confused!723; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8724; CHECK-NEXT: da analyze - none!725; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8726; CHECK-NEXT: da analyze - confused!727; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8728; CHECK-NEXT: da analyze - none!729;730; NORMALIZE-LABEL: 'banerjee8'731; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8732; NORMALIZE-NEXT: da analyze - none!733; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8734; NORMALIZE-NEXT: da analyze - normalized - anti [< <>]!735; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8736; NORMALIZE-NEXT: da analyze - confused!737; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8738; NORMALIZE-NEXT: da analyze - none!739; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8740; NORMALIZE-NEXT: da analyze - confused!741; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8742; NORMALIZE-NEXT: da analyze - none!743;744; DELIN-LABEL: 'banerjee8'745; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8746; DELIN-NEXT: da analyze - none!747; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8748; DELIN-NEXT: da analyze - flow [> <>]!749; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8750; DELIN-NEXT: da analyze - confused!751; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: %0 = load i64, ptr %arrayidx7, align 8752; DELIN-NEXT: da analyze - none!753; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8754; DELIN-NEXT: da analyze - confused!755; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8756; DELIN-NEXT: da analyze - none!757;758entry:759 br label %for.cond1.preheader760 761for.cond1.preheader: ; preds = %entry, %for.inc8762 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]763 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]764 br label %for.body3765 766for.body3: ; preds = %for.cond1.preheader, %for.body3767 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]768 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]769 %mul = mul nsw i64 %i.03, 10770 %add = add nsw i64 %mul, %j.02771 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add772 store i64 0, ptr %arrayidx, align 8773 %mul4 = mul nsw i64 %i.03, 10774 %add5 = add nsw i64 %mul4, %j.02775 %add6 = add nsw i64 %add5, 11776 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6777 %0 = load i64, ptr %arrayidx7, align 8778 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1779 store i64 %0, ptr %B.addr.11, align 8780 %inc = add nsw i64 %j.02, 1781 %exitcond = icmp ne i64 %inc, 10782 br i1 %exitcond, label %for.body3, label %for.inc8783 784for.inc8: ; preds = %for.body3785 %scevgep = getelementptr i64, ptr %B.addr.04, i64 10786 %inc9 = add nsw i64 %i.03, 1787 %exitcond5 = icmp ne i64 %inc9, 10788 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10789 790for.end10: ; preds = %for.inc8791 ret void792}793 794 795;; for (long int i = 0; i < 20; i++)796;; for (long int j = 0; j < 20; j++) {797;; A[30*i + 500*j] = 0;798;; *B++ = A[i - 500*j + 11];799 800define void @banerjee9(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {801; CHECK-LABEL: 'banerjee9'802; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8803; CHECK-NEXT: da analyze - output [* *]!804; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx7, align 8805; CHECK-NEXT: da analyze - flow [<= 0|<]!806; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8807; CHECK-NEXT: da analyze - confused!808; CHECK-NEXT: Src: %1 = load i64, ptr %arrayidx7, align 8 --> Dst: %1 = load i64, ptr %arrayidx7, align 8809; CHECK-NEXT: da analyze - none!810; CHECK-NEXT: Src: %1 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8811; CHECK-NEXT: da analyze - confused!812; CHECK-NEXT: Src: store i64 %1, ptr %B.addr.11, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8813; CHECK-NEXT: da analyze - none!814;815; NORMALIZE-LABEL: 'banerjee9'816; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8817; NORMALIZE-NEXT: da analyze - output [* *]!818; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx7, align 8819; NORMALIZE-NEXT: da analyze - flow [<= 0|<]!820; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8821; NORMALIZE-NEXT: da analyze - confused!822; NORMALIZE-NEXT: Src: %1 = load i64, ptr %arrayidx7, align 8 --> Dst: %1 = load i64, ptr %arrayidx7, align 8823; NORMALIZE-NEXT: da analyze - none!824; NORMALIZE-NEXT: Src: %1 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8825; NORMALIZE-NEXT: da analyze - confused!826; NORMALIZE-NEXT: Src: store i64 %1, ptr %B.addr.11, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8827; NORMALIZE-NEXT: da analyze - none!828;829; DELIN-LABEL: 'banerjee9'830; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8831; DELIN-NEXT: da analyze - output [* *]!832; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx7, align 8833; DELIN-NEXT: da analyze - flow [<= 0|<]!834; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8835; DELIN-NEXT: da analyze - confused!836; DELIN-NEXT: Src: %1 = load i64, ptr %arrayidx7, align 8 --> Dst: %1 = load i64, ptr %arrayidx7, align 8837; DELIN-NEXT: da analyze - none!838; DELIN-NEXT: Src: %1 = load i64, ptr %arrayidx7, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8839; DELIN-NEXT: da analyze - confused!840; DELIN-NEXT: Src: store i64 %1, ptr %B.addr.11, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8841; DELIN-NEXT: da analyze - none!842;843entry:844 br label %for.cond1.preheader845 846for.cond1.preheader: ; preds = %entry, %for.inc8847 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc8 ]848 %i.03 = phi i64 [ 0, %entry ], [ %inc9, %for.inc8 ]849 br label %for.body3850 851for.body3: ; preds = %for.cond1.preheader, %for.body3852 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]853 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]854 %mul = mul nsw i64 %i.03, 30855 %mul4 = mul nsw i64 %j.02, 500856 %add = add nsw i64 %mul, %mul4857 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add858 store i64 0, ptr %arrayidx, align 8859 %0 = mul i64 %j.02, -500860 %sub = add i64 %i.03, %0861 %add6 = add nsw i64 %sub, 11862 %arrayidx7 = getelementptr inbounds i64, ptr %A, i64 %add6863 %1 = load i64, ptr %arrayidx7, align 8864 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1865 store i64 %1, ptr %B.addr.11, align 8866 %inc = add nsw i64 %j.02, 1867 %exitcond = icmp ne i64 %inc, 20868 br i1 %exitcond, label %for.body3, label %for.inc8869 870for.inc8: ; preds = %for.body3871 %scevgep = getelementptr i64, ptr %B.addr.04, i64 20872 %inc9 = add nsw i64 %i.03, 1873 %exitcond5 = icmp ne i64 %inc9, 20874 br i1 %exitcond5, label %for.cond1.preheader, label %for.end10875 876for.end10: ; preds = %for.inc8877 ret void878}879 880 881;; for (long int i = 0; i < 20; i++)882;; for (long int j = 0; j < 20; j++) {883;; A[i + 500*j] = 0;884;; *B++ = A[i - 500*j + 11];885 886define void @banerjee10(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {887; CHECK-LABEL: 'banerjee10'888; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8889; CHECK-NEXT: da analyze - none!890; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8891; CHECK-NEXT: da analyze - flow [<> 0]!892; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8893; CHECK-NEXT: da analyze - confused!894; CHECK-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8895; CHECK-NEXT: da analyze - none!896; CHECK-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8897; CHECK-NEXT: da analyze - confused!898; CHECK-NEXT: Src: store i64 %1, ptr %B.addr.11, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8899; CHECK-NEXT: da analyze - none!900;901; NORMALIZE-LABEL: 'banerjee10'902; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8903; NORMALIZE-NEXT: da analyze - none!904; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8905; NORMALIZE-NEXT: da analyze - flow [<> 0]!906; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8907; NORMALIZE-NEXT: da analyze - confused!908; NORMALIZE-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8909; NORMALIZE-NEXT: da analyze - none!910; NORMALIZE-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8911; NORMALIZE-NEXT: da analyze - confused!912; NORMALIZE-NEXT: Src: store i64 %1, ptr %B.addr.11, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8913; NORMALIZE-NEXT: da analyze - none!914;915; DELIN-LABEL: 'banerjee10'916; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8917; DELIN-NEXT: da analyze - none!918; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8919; DELIN-NEXT: da analyze - flow [-11 0]!920; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8921; DELIN-NEXT: da analyze - confused!922; DELIN-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: %1 = load i64, ptr %arrayidx6, align 8923; DELIN-NEXT: da analyze - none!924; DELIN-NEXT: Src: %1 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8925; DELIN-NEXT: da analyze - confused!926; DELIN-NEXT: Src: store i64 %1, ptr %B.addr.11, align 8 --> Dst: store i64 %1, ptr %B.addr.11, align 8927; DELIN-NEXT: da analyze - none!928;929entry:930 br label %for.cond1.preheader931 932for.cond1.preheader: ; preds = %entry, %for.inc7933 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]934 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]935 br label %for.body3936 937for.body3: ; preds = %for.cond1.preheader, %for.body3938 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]939 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]940 %mul = mul nsw i64 %j.02, 500941 %add = add nsw i64 %i.03, %mul942 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add943 store i64 0, ptr %arrayidx, align 8944 %0 = mul i64 %j.02, -500945 %sub = add i64 %i.03, %0946 %add5 = add nsw i64 %sub, 11947 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %add5948 %1 = load i64, ptr %arrayidx6, align 8949 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 1950 store i64 %1, ptr %B.addr.11, align 8951 %inc = add nsw i64 %j.02, 1952 %exitcond = icmp ne i64 %inc, 20953 br i1 %exitcond, label %for.body3, label %for.inc7954 955for.inc7: ; preds = %for.body3956 %scevgep = getelementptr i64, ptr %B.addr.04, i64 20957 %inc8 = add nsw i64 %i.03, 1958 %exitcond5 = icmp ne i64 %inc8, 20959 br i1 %exitcond5, label %for.cond1.preheader, label %for.end9960 961for.end9: ; preds = %for.inc7962 ret void963}964 965 966;; for (long int i = 0; i < 20; i++)967;; for (long int j = 0; j < 20; j++) {968;; A[300*i + j] = 0;969;; *B++ = A[250*i - j + 11];970 971define void @banerjee11(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {972; CHECK-LABEL: 'banerjee11'973; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8974; CHECK-NEXT: da analyze - none!975; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8976; CHECK-NEXT: da analyze - flow [<= <>]!977; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8978; CHECK-NEXT: da analyze - confused!979; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8980; CHECK-NEXT: da analyze - none!981; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8982; CHECK-NEXT: da analyze - confused!983; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8984; CHECK-NEXT: da analyze - none!985;986; NORMALIZE-LABEL: 'banerjee11'987; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 8988; NORMALIZE-NEXT: da analyze - none!989; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8990; NORMALIZE-NEXT: da analyze - flow [<= <>]!991; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8992; NORMALIZE-NEXT: da analyze - confused!993; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 8994; NORMALIZE-NEXT: da analyze - none!995; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8996; NORMALIZE-NEXT: da analyze - confused!997; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 8998; NORMALIZE-NEXT: da analyze - none!999;1000; DELIN-LABEL: 'banerjee11'1001; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 81002; DELIN-NEXT: da analyze - none!1003; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81004; DELIN-NEXT: da analyze - flow [<= <>]!1005; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81006; DELIN-NEXT: da analyze - confused!1007; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81008; DELIN-NEXT: da analyze - none!1009; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81010; DELIN-NEXT: da analyze - confused!1011; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81012; DELIN-NEXT: da analyze - none!1013;1014entry:1015 br label %for.cond1.preheader1016 1017for.cond1.preheader: ; preds = %entry, %for.inc71018 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]1019 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]1020 br label %for.body31021 1022for.body3: ; preds = %for.cond1.preheader, %for.body31023 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]1024 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]1025 %mul = mul nsw i64 %i.03, 3001026 %add = add nsw i64 %mul, %j.021027 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add1028 store i64 0, ptr %arrayidx, align 81029 %mul4 = mul nsw i64 %i.03, 2501030 %sub = sub nsw i64 %mul4, %j.021031 %add5 = add nsw i64 %sub, 111032 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %add51033 %0 = load i64, ptr %arrayidx6, align 81034 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 11035 store i64 %0, ptr %B.addr.11, align 81036 %inc = add nsw i64 %j.02, 11037 %exitcond = icmp ne i64 %inc, 201038 br i1 %exitcond, label %for.body3, label %for.inc71039 1040for.inc7: ; preds = %for.body31041 %scevgep = getelementptr i64, ptr %B.addr.04, i64 201042 %inc8 = add nsw i64 %i.03, 11043 %exitcond5 = icmp ne i64 %inc8, 201044 br i1 %exitcond5, label %for.cond1.preheader, label %for.end91045 1046for.end9: ; preds = %for.inc71047 ret void1048}1049 1050 1051;; for (long int i = 0; i < 20; i++)1052;; for (long int j = 0; j < 20; j++) {1053;; A[100*i + j] = 0;1054;; *B++ = A[100*i - j + 11];1055 1056define void @banerjee12(ptr %A, ptr %B, i64 %m, i64 %n) nounwind uwtable ssp {1057; CHECK-LABEL: 'banerjee12'1058; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 81059; CHECK-NEXT: da analyze - none!1060; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81061; CHECK-NEXT: da analyze - flow [0 <>]!1062; CHECK-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81063; CHECK-NEXT: da analyze - confused!1064; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81065; CHECK-NEXT: da analyze - none!1066; CHECK-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81067; CHECK-NEXT: da analyze - confused!1068; CHECK-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81069; CHECK-NEXT: da analyze - none!1070;1071; NORMALIZE-LABEL: 'banerjee12'1072; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 81073; NORMALIZE-NEXT: da analyze - none!1074; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81075; NORMALIZE-NEXT: da analyze - flow [0 <>]!1076; NORMALIZE-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81077; NORMALIZE-NEXT: da analyze - confused!1078; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81079; NORMALIZE-NEXT: da analyze - none!1080; NORMALIZE-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81081; NORMALIZE-NEXT: da analyze - confused!1082; NORMALIZE-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81083; NORMALIZE-NEXT: da analyze - none!1084;1085; DELIN-LABEL: 'banerjee12'1086; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 0, ptr %arrayidx, align 81087; DELIN-NEXT: da analyze - none!1088; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81089; DELIN-NEXT: da analyze - flow [0 <>]!1090; DELIN-NEXT: Src: store i64 0, ptr %arrayidx, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81091; DELIN-NEXT: da analyze - confused!1092; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: %0 = load i64, ptr %arrayidx6, align 81093; DELIN-NEXT: da analyze - none!1094; DELIN-NEXT: Src: %0 = load i64, ptr %arrayidx6, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81095; DELIN-NEXT: da analyze - confused!1096; DELIN-NEXT: Src: store i64 %0, ptr %B.addr.11, align 8 --> Dst: store i64 %0, ptr %B.addr.11, align 81097; DELIN-NEXT: da analyze - none!1098;1099entry:1100 br label %for.cond1.preheader1101 1102for.cond1.preheader: ; preds = %entry, %for.inc71103 %B.addr.04 = phi ptr [ %B, %entry ], [ %scevgep, %for.inc7 ]1104 %i.03 = phi i64 [ 0, %entry ], [ %inc8, %for.inc7 ]1105 br label %for.body31106 1107for.body3: ; preds = %for.cond1.preheader, %for.body31108 %j.02 = phi i64 [ 0, %for.cond1.preheader ], [ %inc, %for.body3 ]1109 %B.addr.11 = phi ptr [ %B.addr.04, %for.cond1.preheader ], [ %incdec.ptr, %for.body3 ]1110 %mul = mul nsw i64 %i.03, 1001111 %add = add nsw i64 %mul, %j.021112 %arrayidx = getelementptr inbounds i64, ptr %A, i64 %add1113 store i64 0, ptr %arrayidx, align 81114 %mul4 = mul nsw i64 %i.03, 1001115 %sub = sub nsw i64 %mul4, %j.021116 %add5 = add nsw i64 %sub, 111117 %arrayidx6 = getelementptr inbounds i64, ptr %A, i64 %add51118 %0 = load i64, ptr %arrayidx6, align 81119 %incdec.ptr = getelementptr inbounds i64, ptr %B.addr.11, i64 11120 store i64 %0, ptr %B.addr.11, align 81121 %inc = add nsw i64 %j.02, 11122 %exitcond = icmp ne i64 %inc, 201123 br i1 %exitcond, label %for.body3, label %for.inc71124 1125for.inc7: ; preds = %for.body31126 %scevgep = getelementptr i64, ptr %B.addr.04, i64 201127 %inc8 = add nsw i64 %i.03, 11128 %exitcond5 = icmp ne i64 %inc8, 201129 br i1 %exitcond5, label %for.cond1.preheader, label %for.end91130 1131for.end9: ; preds = %for.inc71132 ret void1133}1134