brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.0 KiB · 71a5ed6 Raw
351 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 = 'WeakZeroDstSIV.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[i] = 1;12;;    A[0] = 2;13 14define void @dstzero(ptr nocapture %A, i32 %N) {15; CHECK-LABEL: 'dstzero'16; CHECK-NEXT:  Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 417; CHECK-NEXT:    da analyze - none!18; CHECK-NEXT:  Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 1, ptr %A, align 419; CHECK-NEXT:    da analyze - output [p<=|<]!20; CHECK-NEXT:  Src: store i32 1, ptr %A, align 4 --> Dst: store i32 1, ptr %A, align 421; CHECK-NEXT:    da analyze - consistent output [S]!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  %arrayidx = getelementptr inbounds i32, ptr %A, i32 %i.0730  store i32 0, ptr %arrayidx, align 431  store i32 1, ptr %A, 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 42 43;;  for (long unsigned i = 0; i < 30; i++) {44;;    A[2*i + 10] = i;45;;    *B++ = A[10];46 47define void @weakzerodst0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {48; CHECK-LABEL: 'weakzerodst0'49; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 450; CHECK-NEXT:    da analyze - none!51; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 452; CHECK-NEXT:    da analyze - flow [p<=|<]!53; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 454; CHECK-NEXT:    da analyze - confused!55; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 456; CHECK-NEXT:    da analyze - consistent input [S]!57; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 458; CHECK-NEXT:    da analyze - confused!59; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 460; CHECK-NEXT:    da analyze - none!61;62entry:63  br label %for.body64 65for.body:                                         ; preds = %entry, %for.body66  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]67  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]68  %conv = trunc i64 %i.02 to i3269  %mul = shl i64 %i.02, 170  %add = add i64 %mul, 1071  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add72  store i32 %conv, ptr %arrayidx, align 473  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 1074  %0 = load i32, ptr %arrayidx1, align 475  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 176  store i32 %0, ptr %B.addr.01, align 477  %inc = add i64 %i.02, 178  %exitcond = icmp ne i64 %inc, 3079  br i1 %exitcond, label %for.body, label %for.end80 81for.end:                                          ; preds = %for.body82  ret void83}84 85 86;;  for (long unsigned i = 0; i < n; i++) {87;;    A[n*i + 10] = i;88;;    *B++ = A[10];89 90define void @weakzerodst1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {91; CHECK-LABEL: 'weakzerodst1'92; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 493; CHECK-NEXT:    da analyze - none!94; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 495; CHECK-NEXT:    da analyze - flow [p<=|<]!96; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 497; CHECK-NEXT:    da analyze - confused!98; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 499; CHECK-NEXT:    da analyze - consistent input [S]!100; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4101; CHECK-NEXT:    da analyze - confused!102; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4103; CHECK-NEXT:    da analyze - none!104;105entry:106  %cmp1 = icmp eq i64 %n, 0107  br i1 %cmp1, label %for.end, label %for.body.preheader108 109for.body.preheader:                               ; preds = %entry110  br label %for.body111 112for.body:                                         ; preds = %for.body.preheader, %for.body113  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]114  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]115  %conv = trunc i64 %i.03 to i32116  %mul = mul i64 %i.03, %n117  %add = add i64 %mul, 10118  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add119  store i32 %conv, ptr %arrayidx, align 4120  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10121  %0 = load i32, ptr %arrayidx1, align 4122  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1123  store i32 %0, ptr %B.addr.02, align 4124  %inc = add i64 %i.03, 1125  %exitcond = icmp ne i64 %inc, %n126  br i1 %exitcond, label %for.body, label %for.end.loopexit127 128for.end.loopexit:                                 ; preds = %for.body129  br label %for.end130 131for.end:                                          ; preds = %for.end.loopexit, %entry132  ret void133}134 135 136;;  for (long unsigned i = 0; i < 5; i++) {137;;    A[2*i] = i;138;;    *B++ = A[10];139 140define void @weakzerodst2(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {141; CHECK-LABEL: 'weakzerodst2'142; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4143; CHECK-NEXT:    da analyze - none!144; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4145; CHECK-NEXT:    da analyze - none!146; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4147; CHECK-NEXT:    da analyze - confused!148; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4149; CHECK-NEXT:    da analyze - consistent input [S]!150; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4151; CHECK-NEXT:    da analyze - confused!152; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4153; CHECK-NEXT:    da analyze - none!154;155entry:156  br label %for.body157 158for.body:                                         ; preds = %entry, %for.body159  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]160  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]161  %conv = trunc i64 %i.02 to i32162  %mul = shl i64 %i.02, 1163  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul164  store i32 %conv, ptr %arrayidx, align 4165  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10166  %0 = load i32, ptr %arrayidx1, align 4167  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1168  store i32 %0, ptr %B.addr.01, align 4169  %inc = add i64 %i.02, 1170  %exitcond = icmp ne i64 %inc, 5171  br i1 %exitcond, label %for.body, label %for.end172 173for.end:                                          ; preds = %for.body174  ret void175}176 177 178;;  for (long unsigned i = 0; i < 6; i++) {179;;    A[2*i] = i;180;;    *B++ = A[10];181 182define void @weakzerodst3(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {183; CHECK-LABEL: 'weakzerodst3'184; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4185; CHECK-NEXT:    da analyze - none!186; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4187; CHECK-NEXT:    da analyze - flow [=>p|<]!188; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4189; CHECK-NEXT:    da analyze - confused!190; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4191; CHECK-NEXT:    da analyze - consistent input [S]!192; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4193; CHECK-NEXT:    da analyze - confused!194; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4195; CHECK-NEXT:    da analyze - none!196;197entry:198  br label %for.body199 200for.body:                                         ; preds = %entry, %for.body201  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]202  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]203  %conv = trunc i64 %i.02 to i32204  %mul = shl i64 %i.02, 1205  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul206  store i32 %conv, ptr %arrayidx, align 4207  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10208  %0 = load i32, ptr %arrayidx1, align 4209  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1210  store i32 %0, ptr %B.addr.01, align 4211  %inc = add i64 %i.02, 1212  %exitcond = icmp ne i64 %inc, 6213  br i1 %exitcond, label %for.body, label %for.end214 215for.end:                                          ; preds = %for.body216  ret void217}218 219 220;;  for (long unsigned i = 0; i < 7; i++) {221;;    A[2*i] = i;222;;    *B++ = A[10];223 224define void @weakzerodst4(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {225; CHECK-LABEL: 'weakzerodst4'226; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4227; CHECK-NEXT:    da analyze - none!228; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4229; CHECK-NEXT:    da analyze - flow [*|<]!230; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4231; CHECK-NEXT:    da analyze - confused!232; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4233; CHECK-NEXT:    da analyze - consistent input [S]!234; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4235; CHECK-NEXT:    da analyze - confused!236; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4237; CHECK-NEXT:    da analyze - none!238;239entry:240  br label %for.body241 242for.body:                                         ; preds = %entry, %for.body243  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]244  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]245  %conv = trunc i64 %i.02 to i32246  %mul = shl i64 %i.02, 1247  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul248  store i32 %conv, ptr %arrayidx, align 4249  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10250  %0 = load i32, ptr %arrayidx1, align 4251  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1252  store i32 %0, ptr %B.addr.01, align 4253  %inc = add i64 %i.02, 1254  %exitcond = icmp ne i64 %inc, 7255  br i1 %exitcond, label %for.body, label %for.end256 257for.end:                                          ; preds = %for.body258  ret void259}260 261 262;;  for (long unsigned i = 0; i < 7; i++) {263;;    A[2*i] = i;264;;    *B++ = A[-10];265 266define void @weakzerodst5(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {267; CHECK-LABEL: 'weakzerodst5'268; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4269; CHECK-NEXT:    da analyze - none!270; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4271; CHECK-NEXT:    da analyze - none!272; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4273; CHECK-NEXT:    da analyze - confused!274; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4275; CHECK-NEXT:    da analyze - consistent input [S]!276; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4277; CHECK-NEXT:    da analyze - confused!278; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.01, align 4 --> Dst: store i32 %0, ptr %B.addr.01, align 4279; CHECK-NEXT:    da analyze - none!280;281entry:282  br label %for.body283 284for.body:                                         ; preds = %entry, %for.body285  %i.02 = phi i64 [ 0, %entry ], [ %inc, %for.body ]286  %B.addr.01 = phi ptr [ %B, %entry ], [ %incdec.ptr, %for.body ]287  %conv = trunc i64 %i.02 to i32288  %mul = shl i64 %i.02, 1289  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul290  store i32 %conv, ptr %arrayidx, align 4291  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 -10292  %0 = load i32, ptr %arrayidx1, align 4293  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.01, i64 1294  store i32 %0, ptr %B.addr.01, align 4295  %inc = add i64 %i.02, 1296  %exitcond = icmp ne i64 %inc, 7297  br i1 %exitcond, label %for.body, label %for.end298 299for.end:                                          ; preds = %for.body300  ret void301}302 303 304;;  for (long unsigned i = 0; i < n; i++) {305;;    A[3*i] = i;306;;    *B++ = A[10];307 308define void @weakzerodst6(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp {309; CHECK-LABEL: 'weakzerodst6'310; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4311; CHECK-NEXT:    da analyze - none!312; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4313; CHECK-NEXT:    da analyze - none!314; CHECK-NEXT:  Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4315; CHECK-NEXT:    da analyze - confused!316; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4317; CHECK-NEXT:    da analyze - consistent input [S]!318; CHECK-NEXT:  Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4319; CHECK-NEXT:    da analyze - confused!320; CHECK-NEXT:  Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4321; CHECK-NEXT:    da analyze - none!322;323entry:324  %cmp1 = icmp eq i64 %n, 0325  br i1 %cmp1, label %for.end, label %for.body.preheader326 327for.body.preheader:                               ; preds = %entry328  br label %for.body329 330for.body:                                         ; preds = %for.body.preheader, %for.body331  %i.03 = phi i64 [ %inc, %for.body ], [ 0, %for.body.preheader ]332  %B.addr.02 = phi ptr [ %incdec.ptr, %for.body ], [ %B, %for.body.preheader ]333  %conv = trunc i64 %i.03 to i32334  %mul = mul i64 %i.03, 3335  %arrayidx = getelementptr inbounds i32, ptr %A, i64 %mul336  store i32 %conv, ptr %arrayidx, align 4337  %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 10338  %0 = load i32, ptr %arrayidx1, align 4339  %incdec.ptr = getelementptr inbounds i32, ptr %B.addr.02, i64 1340  store i32 %0, ptr %B.addr.02, align 4341  %inc = add i64 %i.03, 1342  %exitcond = icmp ne i64 %inc, %n343  br i1 %exitcond, label %for.body, label %for.end.loopexit344 345for.end.loopexit:                                 ; preds = %for.body346  br label %for.end347 348for.end:                                          ; preds = %for.end.loopexit, %entry349  ret void350}351