brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.0 KiB · 2ee1a37 Raw
349 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 = 'WeakZeroSrcSIV.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 (int i = 0; i < N; i++) {11;;    A[0] = 1;12;;    A[i] = 2;13 14define void @dstzero(ptr nocapture %A, i32 %N) {15; CHECK-LABEL: 'dstzero'16; CHECK-NEXT:  Src: store i32 0, ptr %A, align 4 --> Dst: store i32 0, ptr %A, align 417; CHECK-NEXT:    da analyze - consistent output [S]!18; CHECK-NEXT:  Src: store i32 0, ptr %A, align 4 --> Dst: store i32 1, ptr %arrayidx1, align 419; CHECK-NEXT:    da analyze - output [p=>|<]!20; CHECK-NEXT:  Src: store i32 1, ptr %arrayidx1, align 4 --> Dst: store i32 1, ptr %arrayidx1, align 421; CHECK-NEXT:    da analyze - none!22;23entry:24  %cmp6 = icmp sgt i32 %N, 025  br i1 %cmp6, label %for.body, label %for.cond.cleanup26 27for.body:                                         ; preds = %entry, %for.body28  %i.07 = phi i32 [ %add, %for.body ], [ 0, %entry ]29  store i32 0, ptr %A, align 430  %arrayidx1 = getelementptr inbounds i32, ptr %A, i32 %i.0731  store i32 1, ptr %arrayidx1, align 432  %add = add nuw nsw i32 %i.07, 133  %exitcond = icmp eq i32 %add, %N34  br i1 %exitcond, label %for.cond.cleanup, label %for.body35 36for.cond.cleanup:                                 ; preds = %for.body, %entry37  ret void38}39 40 41;;  for (long unsigned i = 0; i < 30; i++) {42;;    A[10] = i;43;;    *B++ = A[2*i + 10];44 45define void @weakzerosrc0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {46; CHECK-LABEL: 'weakzerosrc0'47; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 448; CHECK-NEXT:    da analyze - consistent output [S]!49; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 450; CHECK-NEXT:    da analyze - flow [p=>|<]!51; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 452; CHECK-NEXT:    da analyze - confused!53; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 454; CHECK-NEXT:    da analyze - none!55; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 456; CHECK-NEXT:    da analyze - confused!57; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 458; CHECK-NEXT:    da analyze - none!59;60entry:61  br label %for.body62 63for.body:                                         ; preds = %entry, %for.body64  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]65  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]66  %conv = trunc i64 %i.02 to i3267  %arrayidx = getelementptr inbounds i32, ptr %A, i64 1068  store i32 %conv, ptr %arrayidx, align 469  %mul = shl i64 %i.02, 170  %add = add i64 %mul, 1071  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add72  %0 = load i32, ptr %arrayidx1, align 473  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 174  store i32 %0, ptr %B.addr.01, align 475  %inc = add i64 %i.02, 176  %exitcond = icmp ne i64 %inc, 3077  br i1 %exitcond, label %for.body, label %for.end78 79for.end:                                          ; preds = %for.body80  ret void81}82 83 84;;  for (long unsigned i = 0; i < n; i++) {85;;    A[10] = i;86;;    *B++ = A[n*i + 10];87 88define void @weakzerosrc1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {89; CHECK-LABEL: 'weakzerosrc1'90; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 491; CHECK-NEXT:    da analyze - consistent output [S]!92; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 493; CHECK-NEXT:    da analyze - flow [p=>|<]!94; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 495; CHECK-NEXT:    da analyze - confused!96; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 497; CHECK-NEXT:    da analyze - none!98; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 499; CHECK-NEXT:    da analyze - confused!100; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4101; CHECK-NEXT:    da analyze - none!102;103entry:104  %cmp1 = icmp eq i64 %n, 0105  br i1 %cmp1, label %for.end, label %for.body.preheader106 107for.body.preheader:                               ; preds = %entry108  br label %for.body109 110for.body:                                         ; preds = %for.body.preheader, %for.body111  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]112  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]113  %conv = trunc i64 %i.03 to i32114  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10115  store i32 %conv, ptr %arrayidx, align 4116  %mul = mul i64 %i.03, %n117  %add = add i64 %mul, 10118  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add119  %0 = load i32, ptr %arrayidx1, align 4120  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1121  store i32 %0, ptr %B.addr.02, align 4122  %inc = add i64 %i.03, 1123  %exitcond = icmp ne i64 %inc, %n124  br i1 %exitcond, label %for.body, label %for.end.loopexit125 126for.end.loopexit:                                 ; preds = %for.body127  br label %for.end128 129for.end:                                          ; preds = %for.end.loopexit, %entry130  ret void131}132 133 134;;  for (long unsigned i = 0; i < 5; i++) {135;;    A[10] = i;136;;    *B++ = A[2*i];137 138define void @weakzerosrc2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {139; CHECK-LABEL: 'weakzerosrc2'140; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4141; CHECK-NEXT:    da analyze - consistent output [S]!142; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4143; CHECK-NEXT:    da analyze - none!144; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4145; CHECK-NEXT:    da analyze - confused!146; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4147; CHECK-NEXT:    da analyze - none!148; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4149; CHECK-NEXT:    da analyze - confused!150; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4151; CHECK-NEXT:    da analyze - none!152;153entry:154  br label %for.body155 156for.body:                                         ; preds = %entry, %for.body157  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]158  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]159  %conv = trunc i64 %i.02 to i32160  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10161  store i32 %conv, ptr %arrayidx, align 4162  %mul = shl i64 %i.02, 1163  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul164  %0 = load i32, ptr %arrayidx1, align 4165  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1166  store i32 %0, ptr %B.addr.01, align 4167  %inc = add i64 %i.02, 1168  %exitcond = icmp ne i64 %inc, 5169  br i1 %exitcond, label %for.body, label %for.end170 171for.end:                                          ; preds = %for.body172  ret void173}174 175 176;;  for (long unsigned i = 0; i < 6; i++) {177;;    A[10] = i;178;;    *B++ = A[2*i];179 180define void @weakzerosrc3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {181; CHECK-LABEL: 'weakzerosrc3'182; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4183; CHECK-NEXT:    da analyze - consistent output [S]!184; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4185; CHECK-NEXT:    da analyze - flow [<=p|<]!186; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4187; CHECK-NEXT:    da analyze - confused!188; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4189; CHECK-NEXT:    da analyze - none!190; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4191; CHECK-NEXT:    da analyze - confused!192; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4193; CHECK-NEXT:    da analyze - none!194;195entry:196  br label %for.body197 198for.body:                                         ; preds = %entry, %for.body199  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]200  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]201  %conv = trunc i64 %i.02 to i32202  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10203  store i32 %conv, ptr %arrayidx, align 4204  %mul = shl i64 %i.02, 1205  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul206  %0 = load i32, ptr %arrayidx1, align 4207  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1208  store i32 %0, ptr %B.addr.01, align 4209  %inc = add i64 %i.02, 1210  %exitcond = icmp ne i64 %inc, 6211  br i1 %exitcond, label %for.body, label %for.end212 213for.end:                                          ; preds = %for.body214  ret void215}216 217 218;;  for (long unsigned i = 0; i < 7; i++) {219;;    A[10] = i;220;;    *B++ = A[2*i];221 222define void @weakzerosrc4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {223; CHECK-LABEL: 'weakzerosrc4'224; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4225; CHECK-NEXT:    da analyze - consistent output [S]!226; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4227; CHECK-NEXT:    da analyze - flow [*|<]!228; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4229; CHECK-NEXT:    da analyze - confused!230; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4231; CHECK-NEXT:    da analyze - none!232; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4233; CHECK-NEXT:    da analyze - confused!234; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4235; CHECK-NEXT:    da analyze - none!236;237entry:238  br label %for.body239 240for.body:                                         ; preds = %entry, %for.body241  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]242  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]243  %conv = trunc i64 %i.02 to i32244  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10245  store i32 %conv, ptr %arrayidx, align 4246  %mul = shl i64 %i.02, 1247  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul248  %0 = load i32, ptr %arrayidx1, align 4249  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1250  store i32 %0, ptr %B.addr.01, align 4251  %inc = add i64 %i.02, 1252  %exitcond = icmp ne i64 %inc, 7253  br i1 %exitcond, label %for.body, label %for.end254 255for.end:                                          ; preds = %for.body256  ret void257}258 259 260;;  for (long unsigned i = 0; i < 7; i++) {261;;    A[-10] = i;262;;    *B++ = A[2*i];263 264define void @weakzerosrc5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {265; CHECK-LABEL: 'weakzerosrc5'266; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4267; CHECK-NEXT:    da analyze - consistent output [S]!268; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4269; CHECK-NEXT:    da analyze - none!270; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4271; CHECK-NEXT:    da analyze - confused!272; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4273; CHECK-NEXT:    da analyze - none!274; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4275; CHECK-NEXT:    da analyze - confused!276; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4277; CHECK-NEXT:    da analyze - none!278;279entry:280  br label %for.body281 282for.body:                                         ; preds = %entry, %for.body283  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]284  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]285  %conv = trunc i64 %i.02 to i32286  %arrayidx = getelementptr inbounds i32, ptr %A, i64 -10287  store i32 %conv, ptr %arrayidx, align 4288  %mul = shl i64 %i.02, 1289  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul290  %0 = load i32, ptr %arrayidx1, align 4291  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1292  store i32 %0, ptr %B.addr.01, align 4293  %inc = add i64 %i.02, 1294  %exitcond = icmp ne i64 %inc, 7295  br i1 %exitcond, label %for.body, label %for.end296 297for.end:                                          ; preds = %for.body298  ret void299}300 301 302;;  for (long unsigned i = 0; i < n; i++) {303;;    A[10] = i;304;;    *B++ = A[3*i];305 306define void @weakzerosrc6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {307; CHECK-LABEL: 'weakzerosrc6'308; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4309; CHECK-NEXT:    da analyze - consistent output [S]!310; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4311; CHECK-NEXT:    da analyze - none!312; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4313; CHECK-NEXT:    da analyze - confused!314; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4315; CHECK-NEXT:    da analyze - none!316; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4317; CHECK-NEXT:    da analyze - confused!318; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4319; CHECK-NEXT:    da analyze - none!320;321entry:322  %cmp1 = icmp eq i64 %n, 0323  br i1 %cmp1, label %for.end, label %for.body.preheader324 325for.body.preheader:                               ; preds = %entry326  br label %for.body327 328for.body:                                         ; preds = %for.body.preheader, %for.body329  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]330  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]331  %conv = trunc i64 %i.03 to i32332  %arrayidx = getelementptr inbounds i32, ptr %A, i64 10333  store i32 %conv, ptr %arrayidx, align 4334  %mul = mul i64 %i.03, 3335  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %mul336  %0 = load i32, ptr %arrayidx1, align 4337  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1338  store i32 %0, ptr %B.addr.02, align 4339  %inc = add i64 %i.03, 1340  %exitcond = icmp ne i64 %inc, %n341  br i1 %exitcond, label %for.body, label %for.end.loopexit342 343for.end.loopexit:                                 ; preds = %for.body344  br label %for.end345 346for.end:                                          ; preds = %for.end.loopexit, %entry347  ret void348}349