brintos

brintos / llvm-project-archived public Read only

0
0
Text · 24.9 KiB · 19cef45 Raw
567 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 %s --check-prefixes=CHECK,CHECK-ALL4; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa -da-enable-dependence-test=strong-siv 2>&1 \5; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-STRONG-SIV6 7target 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"8target triple = "x86_64-apple-macosx10.6.0"9 10 11;;  for (int i = 0; i < n; i++) {12;;    A[i + 2] = i;13;;    *B++ = A[i];14 15define void @strong0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {16; CHECK-LABEL: 'strong0'17; CHECK-NEXT:  Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %arrayidx, align 418; CHECK-NEXT:    da analyze - none!19; CHECK-NEXT:  Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: %2 = load i32, ptr %arrayidx3, align 420; CHECK-NEXT:    da analyze - consistent flow [2]!21; CHECK-NEXT:  Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 422; CHECK-NEXT:    da analyze - confused!23; CHECK-NEXT:  Src: %2 = load i32, ptr %arrayidx3, align 4 --> Dst: %2 = load i32, ptr %arrayidx3, align 424; CHECK-NEXT:    da analyze - none!25; CHECK-NEXT:  Src: %2 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 426; CHECK-NEXT:    da analyze - confused!27; CHECK-NEXT:  Src: store i32 %2, ptr %B.addr.02, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 428; CHECK-NEXT:    da analyze - none!29;30entry:31  %cmp1 = icmp sgt i64 %n, 032  br i1 %cmp1, label %for.body.preheader, label %for.end33 34for.body.preheader:                               ; preds = %entry35  br label %for.body36 37for.body:                                         ; preds = %for.body.preheader, %for.body38  %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]39  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]40  %0 = add nsw i64 %indvars.iv, 241  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %042  %1 = trunc i64 %indvars.iv to i3243  store i32 %1, ptr %arrayidx, align 444  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv45  %2 = load i32, ptr %arrayidx3, align 446  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 147  store i32 %2, ptr %B.addr.02, align 448  %indvars.iv.next = add i64 %indvars.iv, 149  %exitcond = icmp ne i64 %indvars.iv.next, %n50  br i1 %exitcond, label %for.body, label %for.end.loopexit51 52for.end.loopexit:                                 ; preds = %for.body53  br label %for.end54 55for.end:                                          ; preds = %for.end.loopexit, %entry56  ret void57}58 59 60;;  for (long int i = 0; i < n; i++) {61;;    A[i + 2] = i;62;;    *B++ = A[i];63 64define void @strong1(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {65; CHECK-LABEL: 'strong1'66; CHECK-NEXT:  Src: store i32 %conv2, ptr %arrayidx, align 4 --> Dst: store i32 %conv2, ptr %arrayidx, align 467; CHECK-NEXT:    da analyze - none!68; CHECK-NEXT:  Src: store i32 %conv2, ptr %arrayidx, align 4 --> Dst: %1 = load i32, ptr %arrayidx3, align 469; CHECK-NEXT:    da analyze - consistent flow [2]!70; CHECK-NEXT:  Src: store i32 %conv2, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 471; CHECK-NEXT:    da analyze - confused!72; CHECK-NEXT:  Src: %1 = load i32, ptr %arrayidx3, align 4 --> Dst: %1 = load i32, ptr %arrayidx3, align 473; CHECK-NEXT:    da analyze - none!74; CHECK-NEXT:  Src: %1 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 475; CHECK-NEXT:    da analyze - confused!76; CHECK-NEXT:  Src: store i32 %1, ptr %B.addr.02, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 477; CHECK-NEXT:    da analyze - none!78;79entry:80  %cmp1 = icmp sgt i32 %n, 081  br i1 %cmp1, label %for.body.preheader, label %for.end82 83for.body.preheader:                               ; preds = %entry84  %0 = sext i32 %n to i6485  br label %for.body86 87for.body:                                         ; preds = %for.body.preheader, %for.body88  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]89  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]90  %conv2 = trunc i64 %i.03 to i3291  %add = add nsw i64 %i.03, 292  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add93  store i32 %conv2, ptr %arrayidx, align 494  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %i.0395  %1 = load i32, ptr %arrayidx3, align 496  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 197  store i32 %1, ptr %B.addr.02, align 498  %inc = add nsw i64 %i.03, 199  %exitcond = icmp ne i64 %inc, %0100  br i1 %exitcond, label %for.body, label %for.end.loopexit101 102for.end.loopexit:                                 ; preds = %for.body103  br label %for.end104 105for.end:                                          ; preds = %for.end.loopexit, %entry106  ret void107}108 109 110;;  for (long unsigned i = 0; i < n; i++) {111;;    A[i + 2] = i;112;;    *B++ = A[i];113 114define void @strong2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {115; CHECK-LABEL: 'strong2'116; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4117; CHECK-NEXT:    da analyze - none!118; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4119; CHECK-NEXT:    da analyze - consistent flow [2]!120; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4121; CHECK-NEXT:    da analyze - confused!122; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4123; CHECK-NEXT:    da analyze - none!124; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4125; CHECK-NEXT:    da analyze - confused!126; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4127; CHECK-NEXT:    da analyze - none!128;129entry:130  %cmp1 = icmp eq i64 %n, 0131  br i1 %cmp1, label %for.end, label %for.body.preheader132 133for.body.preheader:                               ; preds = %entry134  br label %for.body135 136for.body:                                         ; preds = %for.body.preheader, %for.body137  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]138  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]139  %conv = trunc i64 %i.03 to i32140  %add = add i64 %i.03, 2141  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add142  store i32 %conv, ptr %arrayidx, align 4143  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.03144  %0 = load i32, ptr %arrayidx1, align 4145  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1146  store i32 %0, ptr %B.addr.02, align 4147  %inc = add i64 %i.03, 1148  %exitcond = icmp ne i64 %inc, %n149  br i1 %exitcond, label %for.body, label %for.end.loopexit150 151for.end.loopexit:                                 ; preds = %for.body152  br label %for.end153 154for.end:                                          ; preds = %for.end.loopexit, %entry155  ret void156}157 158 159;;  for (int i = 0; i < n; i++) {160;;    A[i + 2] = i;161;;    *B++ = A[i];162 163define void @strong3(ptr %A, ptr %B, i32 %n) nounwind uwtable ssp {164; CHECK-LABEL: 'strong3'165; CHECK-NEXT:  Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %arrayidx, align 4166; CHECK-NEXT:    da analyze - none!167; CHECK-NEXT:  Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: %2 = load i32, ptr %arrayidx2, align 4168; CHECK-NEXT:    da analyze - consistent flow [2]!169; CHECK-NEXT:  Src: store i32 %1, ptr %arrayidx, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4170; CHECK-NEXT:    da analyze - confused!171; CHECK-NEXT:  Src: %2 = load i32, ptr %arrayidx2, align 4 --> Dst: %2 = load i32, ptr %arrayidx2, align 4172; CHECK-NEXT:    da analyze - none!173; CHECK-NEXT:  Src: %2 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4174; CHECK-NEXT:    da analyze - confused!175; CHECK-NEXT:  Src: store i32 %2, ptr %B.addr.02, align 4 --> Dst: store i32 %2, ptr %B.addr.02, align 4176; CHECK-NEXT:    da analyze - none!177;178entry:179  %cmp1 = icmp sgt i32 %n, 0180  br i1 %cmp1, label %for.body.preheader, label %for.end181 182for.body.preheader:                               ; preds = %entry183  br label %for.body184 185for.body:                                         ; preds = %for.body.preheader, %for.body186  %indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]187  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]188  %0 = add nsw i64 %indvars.iv, 2189  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %0190  %1 = trunc i64 %indvars.iv to i32191  store i32 %1, ptr %arrayidx, align 4192  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %indvars.iv193  %2 = load i32, ptr %arrayidx2, align 4194  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1195  store i32 %2, ptr %B.addr.02, align 4196  %indvars.iv.next = add i64 %indvars.iv, 1197  %lftr.wideiv = trunc i64 %indvars.iv.next to i32198  %exitcond = icmp ne i32 %lftr.wideiv, %n199  br i1 %exitcond, label %for.body, label %for.end.loopexit200 201for.end.loopexit:                                 ; preds = %for.body202  br label %for.end203 204for.end:                                          ; preds = %for.end.loopexit, %entry205  ret void206}207 208 209;;  for (long unsigned i = 0; i < 19; i++) {210;;    A[i + 19] = i;211;;    *B++ = A[i];212 213define void @strong4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {214; CHECK-LABEL: 'strong4'215; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4216; CHECK-NEXT:    da analyze - none!217; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4218; CHECK-NEXT:    da analyze - none!219; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4220; CHECK-NEXT:    da analyze - confused!221; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4222; CHECK-NEXT:    da analyze - none!223; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4224; CHECK-NEXT:    da analyze - confused!225; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4226; CHECK-NEXT:    da analyze - none!227;228entry:229  br label %for.body230 231for.body:                                         ; preds = %entry, %for.body232  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]233  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]234  %conv = trunc i64 %i.02 to i32235  %add = add i64 %i.02, 19236  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add237  store i32 %conv, ptr %arrayidx, align 4238  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.02239  %0 = load i32, ptr %arrayidx1, align 4240  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1241  store i32 %0, ptr %B.addr.01, align 4242  %inc = add i64 %i.02, 1243  %exitcond = icmp ne i64 %inc, 19244  br i1 %exitcond, label %for.body, label %for.end245 246for.end:                                          ; preds = %for.body247  ret void248}249 250 251;;  for (long unsigned i = 0; i < 20; i++) {252;;    A[i + 19] = i;253;;    *B++ = A[i];254 255define void @strong5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {256; CHECK-LABEL: 'strong5'257; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4258; CHECK-NEXT:    da analyze - none!259; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4260; CHECK-NEXT:    da analyze - consistent flow [19]!261; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4262; CHECK-NEXT:    da analyze - confused!263; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4264; CHECK-NEXT:    da analyze - none!265; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4266; CHECK-NEXT:    da analyze - confused!267; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4268; CHECK-NEXT:    da analyze - none!269;270entry:271  br label %for.body272 273for.body:                                         ; preds = %entry, %for.body274  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]275  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]276  %conv = trunc i64 %i.02 to i32277  %add = add i64 %i.02, 19278  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add279  store i32 %conv, ptr %arrayidx, align 4280  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.02281  %0 = load i32, ptr %arrayidx1, align 4282  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1283  store i32 %0, ptr %B.addr.01, align 4284  %inc = add i64 %i.02, 1285  %exitcond = icmp ne i64 %inc, 20286  br i1 %exitcond, label %for.body, label %for.end287 288for.end:                                          ; preds = %for.body289  ret void290}291 292 293;;  for (long unsigned i = 0; i < 20; i++) {294;;    A[2*i + 6] = i;295;;    *B++ = A[2*i];296 297define void @strong6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {298; CHECK-LABEL: 'strong6'299; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4300; CHECK-NEXT:    da analyze - none!301; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4302; CHECK-NEXT:    da analyze - consistent flow [3]!303; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4304; CHECK-NEXT:    da analyze - confused!305; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4306; CHECK-NEXT:    da analyze - none!307; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4308; CHECK-NEXT:    da analyze - confused!309; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4310; CHECK-NEXT:    da analyze - none!311;312entry:313  br label %for.body314 315for.body:                                         ; preds = %entry, %for.body316  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]317  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]318  %conv = trunc i64 %i.02 to i32319  %mul = shl i64 %i.02, 1320  %add = add i64 %mul, 6321  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add322  store i32 %conv, ptr %arrayidx, align 4323  %mul1 = shl i64 %i.02, 1324  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %mul1325  %0 = load i32, ptr %arrayidx2, align 4326  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1327  store i32 %0, ptr %B.addr.01, align 4328  %inc = add i64 %i.02, 1329  %exitcond = icmp ne i64 %inc, 20330  br i1 %exitcond, label %for.body, label %for.end331 332for.end:                                          ; preds = %for.body333  ret void334}335 336 337;;  for (long unsigned i = 0; i < 20; i++) {338;;    A[2*i + 7] = i;339;;    *B++ = A[2*i];340 341define void @strong7(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {342; CHECK-LABEL: 'strong7'343; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4344; CHECK-NEXT:    da analyze - none!345; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4346; CHECK-NEXT:    da analyze - none!347; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4348; CHECK-NEXT:    da analyze - confused!349; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4350; CHECK-NEXT:    da analyze - none!351; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4352; CHECK-NEXT:    da analyze - confused!353; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4354; CHECK-NEXT:    da analyze - none!355;356entry:357  br label %for.body358 359for.body:                                         ; preds = %entry, %for.body360  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]361  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]362  %conv = trunc i64 %i.02 to i32363  %mul = shl i64 %i.02, 1364  %add = add i64 %mul, 7365  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add366  store i32 %conv, ptr %arrayidx, align 4367  %mul1 = shl i64 %i.02, 1368  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %mul1369  %0 = load i32, ptr %arrayidx2, align 4370  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1371  store i32 %0, ptr %B.addr.01, align 4372  %inc = add i64 %i.02, 1373  %exitcond = icmp ne i64 %inc, 20374  br i1 %exitcond, label %for.body, label %for.end375 376for.end:                                          ; preds = %for.body377  ret void378}379 380 381;;  for (long unsigned i = 0; i < 20; i++) {382;;    A[i + n] = i;383;;    *B++ = A[i];384 385define void @strong8(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {386; CHECK-LABEL: 'strong8'387; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4388; CHECK-NEXT:    da analyze - none!389; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4390; CHECK-NEXT:    da analyze - flow [*|<]!391; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4392; CHECK-NEXT:    da analyze - confused!393; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4394; CHECK-NEXT:    da analyze - none!395; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4396; CHECK-NEXT:    da analyze - confused!397; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4398; CHECK-NEXT:    da analyze - none!399;400entry:401  br label %for.body402 403for.body:                                         ; preds = %entry, %for.body404  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]405  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]406  %conv = trunc i64 %i.02 to i32407  %add = add i64 %i.02, %n408  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add409  store i32 %conv, ptr %arrayidx, align 4410  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %i.02411  %0 = load i32, ptr %arrayidx1, align 4412  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1413  store i32 %0, ptr %B.addr.01, align 4414  %inc = add i64 %i.02, 1415  %exitcond = icmp ne i64 %inc, 20416  br i1 %exitcond, label %for.body, label %for.end417 418for.end:                                          ; preds = %for.body419  ret void420}421 422 423;;  for (long unsigned i = 0; i < n; i++) {424;;    A[i + n] = i;425;;    *B++ = A[i + 2*n];426 427define void @strong9(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {428; CHECK-ALL-LABEL: 'strong9'429; CHECK-ALL-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4430; CHECK-ALL-NEXT:    da analyze - none!431; CHECK-ALL-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4432; CHECK-ALL-NEXT:    da analyze - none!433; CHECK-ALL-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4434; CHECK-ALL-NEXT:    da analyze - confused!435; CHECK-ALL-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4436; CHECK-ALL-NEXT:    da analyze - none!437; CHECK-ALL-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4438; CHECK-ALL-NEXT:    da analyze - confused!439; CHECK-ALL-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4440; CHECK-ALL-NEXT:    da analyze - none!441;442; CHECK-STRONG-SIV-LABEL: 'strong9'443; CHECK-STRONG-SIV-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4444; CHECK-STRONG-SIV-NEXT:    da analyze - none!445; CHECK-STRONG-SIV-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4446; CHECK-STRONG-SIV-NEXT:    da analyze - flow [*|<]!447; CHECK-STRONG-SIV-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4448; CHECK-STRONG-SIV-NEXT:    da analyze - confused!449; CHECK-STRONG-SIV-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4450; CHECK-STRONG-SIV-NEXT:    da analyze - none!451; CHECK-STRONG-SIV-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4452; CHECK-STRONG-SIV-NEXT:    da analyze - confused!453; CHECK-STRONG-SIV-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4454; CHECK-STRONG-SIV-NEXT:    da analyze - none!455;456entry:457  %cmp1 = icmp eq i64 %n, 0458  br i1 %cmp1, label %for.end, label %for.body.preheader459 460for.body.preheader:                               ; preds = %entry461  br label %for.body462 463for.body:                                         ; preds = %for.body.preheader, %for.body464  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]465  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]466  %conv = trunc i64 %i.03 to i32467  %add = add i64 %i.03, %n468  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add469  store i32 %conv, ptr %arrayidx, align 4470  %mul = shl i64 %n, 1471  %add1 = add i64 %i.03, %mul472  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add1473  %0 = load i32, ptr %arrayidx2, align 4474  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1475  store i32 %0, ptr %B.addr.02, align 4476  %inc = add i64 %i.03, 1477  %exitcond = icmp ne i64 %inc, %n478  br i1 %exitcond, label %for.body, label %for.end.loopexit479 480for.end.loopexit:                                 ; preds = %for.body481  br label %for.end482 483for.end:                                          ; preds = %for.end.loopexit, %entry484  ret void485}486 487 488;;  for (long unsigned i = 0; i < 1000; i++) {489;;    A[n*i + 5] = i;490;;    *B++ = A[n*i + 5];491 492define void @strong10(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {493; CHECK-LABEL: 'strong10'494; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4495; CHECK-NEXT:    da analyze - none!496; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4497; CHECK-NEXT:    da analyze - consistent flow [0|<]!498; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4499; CHECK-NEXT:    da analyze - confused!500; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 4501; CHECK-NEXT:    da analyze - none!502; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4503; CHECK-NEXT:    da analyze - confused!504; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4505; CHECK-NEXT:    da analyze - none!506;507entry:508  br label %for.body509 510for.body:                                         ; preds = %entry, %for.body511  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]512  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]513  %conv = trunc i64 %i.02 to i32514  %mul = mul i64 %i.02, %n515  %add = add i64 %mul, 5516  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add517  store i32 %conv, ptr %arrayidx, align 4518  %mul1 = mul i64 %i.02, %n519  %add2 = add i64 %mul1, 5520  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add2521  %0 = load i32, ptr %arrayidx3, align 4522  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1523  store i32 %0, ptr %B.addr.01, align 4524  %inc = add i64 %i.02, 1525  %exitcond = icmp ne i64 %inc, 1000526  br i1 %exitcond, label %for.body, label %for.end527 528for.end:                                          ; preds = %for.body529  ret void530}531 532 533;;  for (long unsigned i = 0; i < 9223372036854775806; i++)534;;    for (long unsigned j = 0; j < 2147483640; j++)535;;      if (i < 3000000000)536;;        A[i] = 0;537 538define void @strong11(ptr %A) nounwind uwtable ssp {539; CHECK-LABEL: 'strong11'540; CHECK-NEXT:  Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4541; CHECK-NEXT:    da analyze - consistent output [0 S]!542;543entry:544  br label %for.cond1.preheader545 546for.cond1.preheader:                              ; preds = %entry, %for.cond.cleanup3547  %i.017 = phi i64 [ 0, %entry ], [ %inc8, %for.cond.cleanup3 ]548  %cmp5 = icmp samesign ult i64 %i.017, 3000000000549  %arrayidx = getelementptr inbounds nuw i32, ptr %A, i64 %i.017550  br i1 %cmp5, label %for.body4.us, label %for.cond.cleanup3551 552for.body4.us:                                     ; preds = %for.cond1.preheader, %for.body4.us553  %j.016.us = phi i64 [ %inc.us, %for.body4.us ], [ 0, %for.cond1.preheader ]554  store i32 0, ptr %arrayidx, align 4555  %inc.us = add nuw nsw i64 %j.016.us, 1556  %exitcond.not = icmp eq i64 %inc.us, 2147483640557  br i1 %exitcond.not, label %for.cond.cleanup3, label %for.body4.us558 559for.cond.cleanup:                                 ; preds = %for.cond.cleanup3560  ret void561 562for.cond.cleanup3:                                ; preds = %for.body4.us, %for.cond1.preheader563  %inc8 = add nuw nsw i64 %i.017, 1564  %exitcond19.not = icmp eq i64 %inc8, 9223372036854775806565  br i1 %exitcond19.not, label %for.cond.cleanup, label %for.cond1.preheader566}567