brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.2 KiB · 906505e Raw
330 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 5; ModuleID = 'WeakCrossingSIV.bc'6target 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"7target triple = "x86_64-apple-macosx10.6.0"8 9 10;;  for (long unsigned i = 0; i < n; i++) {11;;    A[1 + n*i] = i;12;;    *B++ = A[1 - n*i];13 14define void @weakcrossing0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {15; CHECK-LABEL: 'weakcrossing0'16; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 417; CHECK-NEXT:    da analyze - none!18; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 419; CHECK-NEXT:    da analyze - flow [0|<]!20; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 421; CHECK-NEXT:    da analyze - confused!22; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 423; CHECK-NEXT:    da analyze - none!24; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 425; CHECK-NEXT:    da analyze - confused!26; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 427; CHECK-NEXT:    da analyze - none!28;29entry:30  %cmp1 = icmp eq i64 %n, 031  br i1 %cmp1, label %for.end, label %for.body.preheader32 33for.body.preheader:                               ; preds = %entry34  br label %for.body35 36for.body:                                         ; preds = %for.body.preheader, %for.body37  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]38  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]39  %conv = trunc i64 %i.03 to i3240  %mul = mul i64 %i.03, %n41  %add = add i64 %mul, 142  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add43  store i32 %conv, ptr %arrayidx, align 444  %mul1 = mul i64 %i.03, %n45  %sub = sub i64 1, %mul146  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub47  %0 = load i32, ptr %arrayidx2, align 448  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 149  store i32 %0, ptr %B.addr.02, align 450  %inc = add i64 %i.03, 151  %exitcond = icmp ne i64 %inc, %n52  br i1 %exitcond, label %for.body, label %for.end.loopexit53 54for.end.loopexit:                                 ; preds = %for.body55  br label %for.end56 57for.end:                                          ; preds = %for.end.loopexit, %entry58  ret void59}60 61 62;;  for (long unsigned i = 0; i < n; i++) {63;;    A[n + i] = i;64;;    *B++ = A[1 + n - i];65 66define void @weakcrossing1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {67; CHECK-LABEL: 'weakcrossing1'68; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 469; CHECK-NEXT:    da analyze - none!70; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 471; CHECK-NEXT:    da analyze - flow [<>]!72; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 473; CHECK-NEXT:    da analyze - confused!74; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 475; CHECK-NEXT:    da analyze - none!76; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 477; CHECK-NEXT:    da analyze - confused!78; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 479; CHECK-NEXT:    da analyze - none!80;81entry:82  %cmp1 = icmp eq i64 %n, 083  br i1 %cmp1, label %for.end, label %for.body.preheader84 85for.body.preheader:                               ; preds = %entry86  br label %for.body87 88for.body:                                         ; preds = %for.body.preheader, %for.body89  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]90  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]91  %conv = trunc i64 %i.03 to i3292  %add = add i64 %i.03, %n93  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add94  store i32 %conv, ptr %arrayidx, align 495  %add1 = add i64 %n, 196  %sub = sub i64 %add1, %i.0397  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub98  %0 = load i32, ptr %arrayidx2, align 499  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1100  store i32 %0, ptr %B.addr.02, align 4101  %inc = add i64 %i.03, 1102  %exitcond = icmp ne i64 %inc, %n103  br i1 %exitcond, label %for.body, label %for.end.loopexit104 105for.end.loopexit:                                 ; preds = %for.body106  br label %for.end107 108for.end:                                          ; preds = %for.end.loopexit, %entry109  ret void110}111 112 113;;  for (long unsigned i = 0; i < 3; i++) {114;;    A[i] = i;115;;    *B++ = A[6 - i];116 117define void @weakcrossing2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {118; CHECK-LABEL: 'weakcrossing2'119; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4120; CHECK-NEXT:    da analyze - none!121; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4122; CHECK-NEXT:    da analyze - none!123; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4124; CHECK-NEXT:    da analyze - confused!125; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4126; CHECK-NEXT:    da analyze - none!127; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4128; CHECK-NEXT:    da analyze - confused!129; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4130; CHECK-NEXT:    da analyze - none!131;132entry:133  br label %for.body134 135for.body:                                         ; preds = %entry, %for.body136  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]137  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]138  %conv = trunc i64 %i.02 to i32139  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02140  store i32 %conv, ptr %arrayidx, align 4141  %sub = sub i64 6, %i.02142  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub143  %0 = load i32, ptr %arrayidx1, align 4144  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1145  store i32 %0, ptr %B.addr.01, align 4146  %inc = add i64 %i.02, 1147  %exitcond = icmp ne i64 %inc, 3148  br i1 %exitcond, label %for.body, label %for.end149 150for.end:                                          ; preds = %for.body151  ret void152}153 154 155;;  for (long unsigned i = 0; i < 4; i++) {156;;    A[i] = i;157;;    *B++ = A[6 - i];158 159define void @weakcrossing3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {160; CHECK-LABEL: 'weakcrossing3'161; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4162; CHECK-NEXT:    da analyze - none!163; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4164; CHECK-NEXT:    da analyze - flow [0|<]!165; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4166; CHECK-NEXT:    da analyze - confused!167; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4168; CHECK-NEXT:    da analyze - none!169; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4170; CHECK-NEXT:    da analyze - confused!171; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4172; CHECK-NEXT:    da analyze - none!173;174entry:175  br label %for.body176 177for.body:                                         ; preds = %entry, %for.body178  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]179  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]180  %conv = trunc i64 %i.02 to i32181  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02182  store i32 %conv, ptr %arrayidx, align 4183  %sub = sub i64 6, %i.02184  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub185  %0 = load i32, ptr %arrayidx1, align 4186  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1187  store i32 %0, ptr %B.addr.01, align 4188  %inc = add i64 %i.02, 1189  %exitcond = icmp ne i64 %inc, 4190  br i1 %exitcond, label %for.body, label %for.end191 192for.end:                                          ; preds = %for.body193  ret void194}195 196 197;;  for (long unsigned i = 0; i < 10; i++) {198;;    A[i] = i;199;;    *B++ = A[-6 - i];200 201define void @weakcrossing4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {202; CHECK-LABEL: 'weakcrossing4'203; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4204; CHECK-NEXT:    da analyze - none!205; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4206; CHECK-NEXT:    da analyze - none!207; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4208; CHECK-NEXT:    da analyze - confused!209; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4210; CHECK-NEXT:    da analyze - none!211; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4212; CHECK-NEXT:    da analyze - confused!213; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4214; CHECK-NEXT:    da analyze - none!215;216entry:217  br label %for.body218 219for.body:                                         ; preds = %entry, %for.body220  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]221  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]222  %conv = trunc i64 %i.02 to i32223  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02224  store i32 %conv, ptr %arrayidx, align 4225  %sub = sub i64 -6, %i.02226  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub227  %0 = load i32, ptr %arrayidx1, align 4228  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1229  store i32 %0, ptr %B.addr.01, align 4230  %inc = add i64 %i.02, 1231  %exitcond = icmp ne i64 %inc, 10232  br i1 %exitcond, label %for.body, label %for.end233 234for.end:                                          ; preds = %for.body235  ret void236}237 238 239;;  for (long unsigned i = 0; i < n; i++) {240;;    A[3*i] = i;241;;    *B++ = A[5 - 3*i];242 243define void @weakcrossing5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {244; CHECK-LABEL: 'weakcrossing5'245; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4246; CHECK-NEXT:    da analyze - none!247; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %1 = load i32, ptr %arrayidx2, align 4248; CHECK-NEXT:    da analyze - none!249; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4250; CHECK-NEXT:    da analyze - confused!251; CHECK-NEXT:  Src: %1 = load i32, ptr %arrayidx2, align 4 --> Dst: %1 = load i32, ptr %arrayidx2, align 4252; CHECK-NEXT:    da analyze - none!253; CHECK-NEXT:  Src: %1 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4254; CHECK-NEXT:    da analyze - confused!255; CHECK-NEXT:  Src: store i32 %1, ptr %B.addr.02, align 4 --> Dst: store i32 %1, ptr %B.addr.02, align 4256; CHECK-NEXT:    da analyze - none!257;258entry:259  %cmp1 = icmp eq i64 %n, 0260  br i1 %cmp1, label %for.end, label %for.body.preheader261 262for.body.preheader:                               ; preds = %entry263  br label %for.body264 265for.body:                                         ; preds = %for.body.preheader, %for.body266  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]267  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]268  %conv = trunc i64 %i.03 to i32269  %mul = mul i64 %i.03, 3270  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul271  store i32 %conv, ptr %arrayidx, align 4272  %0 = mul i64 %i.03, -3273  %sub = add i64 %0, 5274  %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %sub275  %1 = load i32, ptr %arrayidx2, align 4276  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1277  store i32 %1, ptr %B.addr.02, align 4278  %inc = add i64 %i.03, 1279  %exitcond = icmp ne i64 %inc, %n280  br i1 %exitcond, label %for.body, label %for.end.loopexit281 282for.end.loopexit:                                 ; preds = %for.body283  br label %for.end284 285for.end:                                          ; preds = %for.end.loopexit, %entry286  ret void287}288 289 290;;  for (long unsigned i = 0; i < 4; i++) {291;;    A[i] = i;292;;    *B++ = A[5 - i];293 294define void @weakcrossing6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {295; CHECK-LABEL: 'weakcrossing6'296; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4297; CHECK-NEXT:    da analyze - none!298; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4299; CHECK-NEXT:    da analyze - flow [<>]!300; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4301; CHECK-NEXT:    da analyze - confused!302; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4303; CHECK-NEXT:    da analyze - none!304; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4305; CHECK-NEXT:    da analyze - confused!306; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4307; CHECK-NEXT:    da analyze - none!308;309entry:310  br label %for.body311 312for.body:                                         ; preds = %entry, %for.body313  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]314  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]315  %conv = trunc i64 %i.02 to i32316  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %i.02317  store i32 %conv, ptr %arrayidx, align 4318  %sub = sub i64 5, %i.02319  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %sub320  %0 = load i32, ptr %arrayidx1, align 4321  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1322  store i32 %0, ptr %B.addr.01, align 4323  %inc = add i64 %i.02, 1324  %exitcond = icmp ne i64 %inc, 4325  br i1 %exitcond, label %for.body, label %for.end326 327for.end:                                          ; preds = %for.body328  ret void329}330