1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5 2; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \ 3; RUN: | FileCheck %s 4 5; ModuleID = 'ZIV.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;; A[n + 1] = 0; 11;; *B = A[1 + n]; 12 13define void @z0(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp { 14; CHECK-LABEL: 'z0' 15; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4 16; CHECK-NEXT: da analyze - none! 17; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 18; CHECK-NEXT: da analyze - consistent flow [|<]! 19; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B, align 4 20; CHECK-NEXT: da analyze - confused! 21; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 22; CHECK-NEXT: da analyze - none! 23; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B, align 4 24; CHECK-NEXT: da analyze - confused! 25; CHECK-NEXT: Src: store i32 %0, ptr %B, align 4 --> Dst: store i32 %0, ptr %B, align 4 26; CHECK-NEXT: da analyze - none! 27; 28entry: 29 %add = add i64 %n, 1 30 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %add 31 store i32 0, ptr %arrayidx, align 4 32 %add1 = add i64 %n, 1 33 %arrayidx2 = getelementptr inbounds i32, ptr %A, i64 %add1 34 %0 = load i32, ptr %arrayidx2, align 4 35 store i32 %0, ptr %B, align 4 36 ret void 37} 38 39 40;; A[n] = 0; 41;; *B = A[n + 1]; 42 43define void @z1(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp { 44; CHECK-LABEL: 'z1' 45; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4 46; CHECK-NEXT: da analyze - none! 47; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4 48; CHECK-NEXT: da analyze - none! 49; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B, align 4 50; CHECK-NEXT: da analyze - confused! 51; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4 52; CHECK-NEXT: da analyze - none! 53; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B, align 4 54; CHECK-NEXT: da analyze - confused! 55; CHECK-NEXT: Src: store i32 %0, ptr %B, align 4 --> Dst: store i32 %0, ptr %B, align 4 56; CHECK-NEXT: da analyze - none! 57; 58entry: 59 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %n 60 store i32 0, ptr %arrayidx, align 4 61 %add = add i64 %n, 1 62 %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %add 63 %0 = load i32, ptr %arrayidx1, align 4 64 store i32 %0, ptr %B, align 4 65 ret void 66} 67 68 69;; A[n] = 0; 70;; *B = A[m]; 71 72define void @z2(ptr %A, ptr %B, i64 %n, i64 %m) nounwind uwtable ssp { 73; CHECK-LABEL: 'z2' 74; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4 75; CHECK-NEXT: da analyze - none! 76; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4 77; CHECK-NEXT: da analyze - flow [|<]! 78; CHECK-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B, align 4 79; CHECK-NEXT: da analyze - confused! 80; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: %0 = load i32, ptr %arrayidx1, align 4 81; CHECK-NEXT: da analyze - none! 82; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx1, align 4 --> Dst: store i32 %0, ptr %B, align 4 83; CHECK-NEXT: da analyze - confused! 84; CHECK-NEXT: Src: store i32 %0, ptr %B, align 4 --> Dst: store i32 %0, ptr %B, align 4 85; CHECK-NEXT: da analyze - none! 86; 87entry: 88 %arrayidx = getelementptr inbounds i32, ptr %A, i64 %n 89 store i32 0, ptr %arrayidx, align 4 90 %arrayidx1 = getelementptr inbounds i32, ptr %A, i64 %m 91 %0 = load i32, ptr %arrayidx1, align 4 92 store i32 %0, ptr %B, align 4 93 ret void 94} 95