brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.0 KiB · b6b44ad Raw
612 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 unsigned i = 0; i < 10; i++) {10;;    A[i + 10] = i;11;;    *B++ = A[2*i + 1];12 13define void @exact0(ptr %A, ptr %B) nounwind uwtable ssp {14; CHECK-LABEL: 'exact0'15; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 416; CHECK-NEXT:    da analyze - none!17; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 418; CHECK-NEXT:    da analyze - flow [<=|<]!19; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 420; CHECK-NEXT:    da analyze - confused!21; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 422; CHECK-NEXT:    da analyze - none!23; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 424; CHECK-NEXT:    da analyze - confused!25; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 426; CHECK-NEXT:    da analyze - none!27;28entry:29  br label %for.body30 31for.body:                                         ; preds = %entry, %for.body32  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]33  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]34  %conv = trunc i64 %i.02 to i3235  %add = add i64 %i.02, 1036  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add37  store i32 %conv, ptr %arrayidx, align 438  %mul = shl i64 %i.02, 139  %add13 = or disjoint i64 %mul, 140  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add1341  %0 = load i32, ptr %arrayidx2, align 442  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 143  store i32 %0, ptr %B.addr.01, align 444  %inc = add i64 %i.02, 145  %exitcond = icmp ne i64 %inc, 1046  br i1 %exitcond, label %for.body, label %for.end47 48for.end:                                          ; preds = %for.body49  ret void50}51 52 53;;  for (long unsigned i = 0; i < 10; i++) {54;;    A[4*i + 10] = i;55;;    *B++ = A[2*i + 1];56 57define void @exact1(ptr %A, ptr %B) nounwind uwtable ssp {58; CHECK-LABEL: 'exact1'59; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 460; CHECK-NEXT:    da analyze - none!61; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 462; CHECK-NEXT:    da analyze - none!63; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 464; CHECK-NEXT:    da analyze - confused!65; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: %0 = load i32, ptr %arrayidx3, align 466; CHECK-NEXT:    da analyze - none!67; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx3, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 468; CHECK-NEXT:    da analyze - confused!69; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 470; CHECK-NEXT:    da analyze - none!71;72entry:73  br label %for.body74 75for.body:                                         ; preds = %entry, %for.body76  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]77  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]78  %conv = trunc i64 %i.02 to i3279  %mul = shl i64 %i.02, 280  %add = add i64 %mul, 1081  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add82  store i32 %conv, ptr %arrayidx, align 483  %mul1 = shl i64 %i.02, 184  %add23 = or disjoint i64 %mul1, 185  %arrayidx3 = getelementptr inbounds i32, ptr %A, i64 %add2386  %0 = load i32, ptr %arrayidx3, align 487  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 188  store i32 %0, ptr %B.addr.01, align 489  %inc = add i64 %i.02, 190  %exitcond = icmp ne i64 %inc, 1091  br i1 %exitcond, label %for.body, label %for.end92 93for.end:                                          ; preds = %for.body94  ret void95}96 97 98;;  for (long unsigned i = 0; i < 10; i++) {99;;    A[6*i] = i;100;;    *B++ = A[i + 60];101 102define void @exact2(ptr %A, ptr %B) nounwind uwtable ssp {103; CHECK-LABEL: 'exact2'104; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4105; CHECK-NEXT:    da analyze - none!106; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4107; CHECK-NEXT:    da analyze - none!108; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4109; CHECK-NEXT:    da analyze - confused!110; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4111; CHECK-NEXT:    da analyze - none!112; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4113; CHECK-NEXT:    da analyze - confused!114; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4115; CHECK-NEXT:    da analyze - none!116;117entry:118  br label %for.body119 120for.body:                                         ; preds = %entry, %for.body121  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]122  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]123  %conv = trunc i64 %i.02 to i32124  %mul = mul i64 %i.02, 6125  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul126  store i32 %conv, ptr %arrayidx, align 4127  %add = add i64 %i.02, 60128  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add129  %0 = load i32, ptr %arrayidx1, align 4130  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1131  store i32 %0, ptr %B.addr.01, align 4132  %inc = add i64 %i.02, 1133  %exitcond = icmp ne i64 %inc, 10134  br i1 %exitcond, label %for.body, label %for.end135 136for.end:                                          ; preds = %for.body137  ret void138}139 140 141;;  for (long unsigned i = 0; i <= 10; i++) {142;;    A[6*i] = i;143;;    *B++ = A[i + 60];144 145define void @exact3(ptr %A, ptr %B) nounwind uwtable ssp {146; CHECK-LABEL: 'exact3'147; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4148; CHECK-NEXT:    da analyze - none!149; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4150; CHECK-NEXT:    da analyze - flow [>]!151; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4152; CHECK-NEXT:    da analyze - confused!153; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4154; CHECK-NEXT:    da analyze - none!155; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4156; CHECK-NEXT:    da analyze - confused!157; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4158; CHECK-NEXT:    da analyze - none!159;160entry:161  br label %for.body162 163for.body:                                         ; preds = %entry, %for.body164  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]165  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]166  %conv = trunc i64 %i.02 to i32167  %mul = mul i64 %i.02, 6168  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul169  store i32 %conv, ptr %arrayidx, align 4170  %add = add i64 %i.02, 60171  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add172  %0 = load i32, ptr %arrayidx1, align 4173  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1174  store i32 %0, ptr %B.addr.01, align 4175  %inc = add i64 %i.02, 1176  %exitcond = icmp ne i64 %inc, 11177  br i1 %exitcond, label %for.body, label %for.end178 179for.end:                                          ; preds = %for.body180  ret void181}182 183 184;;  for (long unsigned i = 0; i < 12; i++) {185;;    A[6*i] = i;186;;    *B++ = A[i + 60];187 188define void @exact4(ptr %A, ptr %B) nounwind uwtable ssp {189; CHECK-LABEL: 'exact4'190; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4191; CHECK-NEXT:    da analyze - none!192; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4193; CHECK-NEXT:    da analyze - flow [>]!194; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4195; CHECK-NEXT:    da analyze - confused!196; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4197; CHECK-NEXT:    da analyze - none!198; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4199; CHECK-NEXT:    da analyze - confused!200; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4201; CHECK-NEXT:    da analyze - none!202;203entry:204  br label %for.body205 206for.body:                                         ; preds = %entry, %for.body207  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]208  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]209  %conv = trunc i64 %i.02 to i32210  %mul = mul i64 %i.02, 6211  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul212  store i32 %conv, ptr %arrayidx, align 4213  %add = add i64 %i.02, 60214  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add215  %0 = load i32, ptr %arrayidx1, align 4216  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1217  store i32 %0, ptr %B.addr.01, align 4218  %inc = add i64 %i.02, 1219  %exitcond = icmp ne i64 %inc, 12220  br i1 %exitcond, label %for.body, label %for.end221 222for.end:                                          ; preds = %for.body223  ret void224}225 226 227;;  for (long unsigned i = 0; i <= 12; i++) {228;;    A[6*i] = i;229;;    *B++ = A[i + 60];230 231define void @exact5(ptr %A, ptr %B) nounwind uwtable ssp {232; CHECK-LABEL: 'exact5'233; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4234; CHECK-NEXT:    da analyze - none!235; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4236; CHECK-NEXT:    da analyze - flow [=>|<]!237; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4238; CHECK-NEXT:    da analyze - confused!239; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4240; CHECK-NEXT:    da analyze - none!241; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4242; CHECK-NEXT:    da analyze - confused!243; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4244; CHECK-NEXT:    da analyze - none!245;246entry:247  br label %for.body248 249for.body:                                         ; preds = %entry, %for.body250  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]251  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]252  %conv = trunc i64 %i.02 to i32253  %mul = mul i64 %i.02, 6254  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul255  store i32 %conv, ptr %arrayidx, align 4256  %add = add i64 %i.02, 60257  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add258  %0 = load i32, ptr %arrayidx1, align 4259  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1260  store i32 %0, ptr %B.addr.01, align 4261  %inc = add i64 %i.02, 1262  %exitcond = icmp ne i64 %inc, 13263  br i1 %exitcond, label %for.body, label %for.end264 265for.end:                                          ; preds = %for.body266  ret void267}268 269 270;;  for (long unsigned i = 0; i < 18; i++) {271;;    A[6*i] = i;272;;    *B++ = A[i + 60];273 274define void @exact6(ptr %A, ptr %B) nounwind uwtable ssp {275; CHECK-LABEL: 'exact6'276; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4277; CHECK-NEXT:    da analyze - none!278; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4279; CHECK-NEXT:    da analyze - flow [=>|<]!280; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4281; CHECK-NEXT:    da analyze - confused!282; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4283; CHECK-NEXT:    da analyze - none!284; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4285; CHECK-NEXT:    da analyze - confused!286; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4287; CHECK-NEXT:    da analyze - none!288;289entry:290  br label %for.body291 292for.body:                                         ; preds = %entry, %for.body293  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]294  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]295  %conv = trunc i64 %i.02 to i32296  %mul = mul i64 %i.02, 6297  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul298  store i32 %conv, ptr %arrayidx, align 4299  %add = add i64 %i.02, 60300  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add301  %0 = load i32, ptr %arrayidx1, align 4302  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1303  store i32 %0, ptr %B.addr.01, align 4304  %inc = add i64 %i.02, 1305  %exitcond = icmp ne i64 %inc, 18306  br i1 %exitcond, label %for.body, label %for.end307 308for.end:                                          ; preds = %for.body309  ret void310}311 312 313;;  for (long unsigned i = 0; i <= 18; i++) {314;;    A[6*i] = i;315;;    *B++ = A[i + 60];316 317define void @exact7(ptr %A, ptr %B) nounwind uwtable ssp {318; CHECK-LABEL: 'exact7'319; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4320; CHECK-NEXT:    da analyze - none!321; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4322; CHECK-NEXT:    da analyze - flow [*|<]!323; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4324; CHECK-NEXT:    da analyze - confused!325; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4326; CHECK-NEXT:    da analyze - none!327; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4328; CHECK-NEXT:    da analyze - confused!329; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4330; CHECK-NEXT:    da analyze - none!331;332entry:333  br label %for.body334 335for.body:                                         ; preds = %entry, %for.body336  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]337  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]338  %conv = trunc i64 %i.02 to i32339  %mul = mul i64 %i.02, 6340  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul341  store i32 %conv, ptr %arrayidx, align 4342  %add = add i64 %i.02, 60343  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add344  %0 = load i32, ptr %arrayidx1, align 4345  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1346  store i32 %0, ptr %B.addr.01, align 4347  %inc = add i64 %i.02, 1348  %exitcond = icmp ne i64 %inc, 19349  br i1 %exitcond, label %for.body, label %for.end350 351for.end:                                          ; preds = %for.body352  ret void353}354 355 356;;  for (long unsigned i = 0; i < 10; i++) {357;;    A[-6*i] = i;358;;    *B++ = A[-i - 60];359 360define void @exact8(ptr %A, ptr %B) nounwind uwtable ssp {361; CHECK-LABEL: 'exact8'362; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4363; CHECK-NEXT:    da analyze - none!364; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4365; CHECK-NEXT:    da analyze - none!366; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4367; CHECK-NEXT:    da analyze - confused!368; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4369; CHECK-NEXT:    da analyze - none!370; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4371; CHECK-NEXT:    da analyze - confused!372; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4373; CHECK-NEXT:    da analyze - none!374;375entry:376  br label %for.body377 378for.body:                                         ; preds = %entry, %for.body379  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]380  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]381  %conv = trunc i64 %i.02 to i32382  %mul = mul i64 %i.02, -6383  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul384  store i32 %conv, ptr %arrayidx, align 4385  %sub1 = sub i64 -60, %i.02386  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1387  %0 = load i32, ptr %arrayidx2, align 4388  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1389  store i32 %0, ptr %B.addr.01, align 4390  %inc = add i64 %i.02, 1391  %exitcond = icmp ne i64 %inc, 10392  br i1 %exitcond, label %for.body, label %for.end393 394for.end:                                          ; preds = %for.body395  ret void396}397 398 399;;  for (long unsigned i = 0; i <= 10; i++) {400;;    A[-6*i] = i;401;;    *B++ = A[-i - 60];402 403define void @exact9(ptr %A, ptr %B) nounwind uwtable ssp {404; CHECK-LABEL: 'exact9'405; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4406; CHECK-NEXT:    da analyze - none!407; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4408; CHECK-NEXT:    da analyze - flow [>]!409; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4410; CHECK-NEXT:    da analyze - confused!411; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4412; CHECK-NEXT:    da analyze - none!413; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4414; CHECK-NEXT:    da analyze - confused!415; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4416; CHECK-NEXT:    da analyze - none!417;418entry:419  br label %for.body420 421for.body:                                         ; preds = %entry, %for.body422  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]423  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]424  %conv = trunc i64 %i.02 to i32425  %mul = mul i64 %i.02, -6426  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul427  store i32 %conv, ptr %arrayidx, align 4428  %sub1 = sub i64 -60, %i.02429  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1430  %0 = load i32, ptr %arrayidx2, align 4431  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1432  store i32 %0, ptr %B.addr.01, align 4433  %inc = add i64 %i.02, 1434  %exitcond = icmp ne i64 %inc, 11435  br i1 %exitcond, label %for.body, label %for.end436 437for.end:                                          ; preds = %for.body438  ret void439}440 441 442;;  for (long unsigned i = 0; i < 12; i++) {443;;    A[-6*i] = i;444;;    *B++ = A[-i - 60];445 446define void @exact10(ptr %A, ptr %B) nounwind uwtable ssp {447; CHECK-LABEL: 'exact10'448; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4449; CHECK-NEXT:    da analyze - none!450; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4451; CHECK-NEXT:    da analyze - flow [>]!452; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4453; CHECK-NEXT:    da analyze - confused!454; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4455; CHECK-NEXT:    da analyze - none!456; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4457; CHECK-NEXT:    da analyze - confused!458; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4459; CHECK-NEXT:    da analyze - none!460;461entry:462  br label %for.body463 464for.body:                                         ; preds = %entry, %for.body465  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]466  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]467  %conv = trunc i64 %i.02 to i32468  %mul = mul i64 %i.02, -6469  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul470  store i32 %conv, ptr %arrayidx, align 4471  %sub1 = sub i64 -60, %i.02472  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1473  %0 = load i32, ptr %arrayidx2, align 4474  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1475  store i32 %0, ptr %B.addr.01, align 4476  %inc = add i64 %i.02, 1477  %exitcond = icmp ne i64 %inc, 12478  br i1 %exitcond, label %for.body, label %for.end479 480for.end:                                          ; preds = %for.body481  ret void482}483 484 485;;  for (long unsigned i = 0; i <= 12; i++) {486;;    A[-6*i] = i;487;;    *B++ = A[-i - 60];488 489define void @exact11(ptr %A, ptr %B) nounwind uwtable ssp {490; CHECK-LABEL: 'exact11'491; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4492; CHECK-NEXT:    da analyze - none!493; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4494; CHECK-NEXT:    da analyze - flow [=>|<]!495; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4496; CHECK-NEXT:    da analyze - confused!497; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4498; CHECK-NEXT:    da analyze - none!499; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4500; CHECK-NEXT:    da analyze - confused!501; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4502; CHECK-NEXT:    da analyze - none!503;504entry:505  br label %for.body506 507for.body:                                         ; preds = %entry, %for.body508  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]509  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]510  %conv = trunc i64 %i.02 to i32511  %mul = mul i64 %i.02, -6512  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul513  store i32 %conv, ptr %arrayidx, align 4514  %sub1 = sub i64 -60, %i.02515  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1516  %0 = load i32, ptr %arrayidx2, align 4517  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1518  store i32 %0, ptr %B.addr.01, align 4519  %inc = add i64 %i.02, 1520  %exitcond = icmp ne i64 %inc, 13521  br i1 %exitcond, label %for.body, label %for.end522 523for.end:                                          ; preds = %for.body524  ret void525}526 527 528;;  for (long unsigned i = 0; i < 18; i++) {529;;    A[-6*i] = i;530;;    *B++ = A[-i - 60];531 532define void @exact12(ptr %A, ptr %B) nounwind uwtable ssp {533; CHECK-LABEL: 'exact12'534; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4535; CHECK-NEXT:    da analyze - none!536; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4537; CHECK-NEXT:    da analyze - flow [=>|<]!538; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4539; CHECK-NEXT:    da analyze - confused!540; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4541; CHECK-NEXT:    da analyze - none!542; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4543; CHECK-NEXT:    da analyze - confused!544; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4545; CHECK-NEXT:    da analyze - none!546;547entry:548  br label %for.body549 550for.body:                                         ; preds = %entry, %for.body551  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]552  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]553  %conv = trunc i64 %i.02 to i32554  %mul = mul i64 %i.02, -6555  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul556  store i32 %conv, ptr %arrayidx, align 4557  %sub1 = sub i64 -60, %i.02558  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1559  %0 = load i32, ptr %arrayidx2, align 4560  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1561  store i32 %0, ptr %B.addr.01, align 4562  %inc = add i64 %i.02, 1563  %exitcond = icmp ne i64 %inc, 18564  br i1 %exitcond, label %for.body, label %for.end565 566for.end:                                          ; preds = %for.body567  ret void568}569 570 571;;  for (long unsigned i = 0; i <= 18; i++) {572;;    A[-6*i] = i;573;;    *B++ = A[-i - 60];574 575define void @exact13(ptr %A, ptr %B) nounwind uwtable ssp {576; CHECK-LABEL: 'exact13'577; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4578; CHECK-NEXT:    da analyze - none!579; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4580; CHECK-NEXT:    da analyze - flow [*|<]!581; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4582; CHECK-NEXT:    da analyze - confused!583; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4584; CHECK-NEXT:    da analyze - none!585; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4586; CHECK-NEXT:    da analyze - confused!587; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4588; CHECK-NEXT:    da analyze - none!589;590entry:591  br label %for.body592 593for.body:                                         ; preds = %entry, %for.body594  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]595  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]596  %conv = trunc i64 %i.02 to i32597  %mul = mul i64 %i.02, -6598  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul599  store i32 %conv, ptr %arrayidx, align 4600  %sub1 = sub i64 -60, %i.02601  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub1602  %0 = load i32, ptr %arrayidx2, align 4603  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1604  store i32 %0, ptr %B.addr.01, align 4605  %inc = add i64 %i.02, 1606  %exitcond = icmp ne i64 %inc, 19607  br i1 %exitcond, label %for.body, label %for.end608 609for.end:                                          ; preds = %for.body610  ret void611}612