; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \
; RUN: | FileCheck %s
; RUN: opt < %s -analyze -enable-new-pm=0 -basic-aa -da  | FileCheck %s

; Test that the dependence analysis generates the correct results when using
; an aliased object that points to a different element in the same array.
; PR33567 - https://bugs.llvm.org/show_bug.cgi?id=33567

; void test1(int *A, int *B, int N) {
;   int *top = A;
;   int *bot = A + N/2;
;   for (int i = 0; i < N; i++)
;     B[i] = top[i] + bot[i];
; }

; CHECK-LABEL: test1
; CHECK: da analyze - input [*|<]!

define void @test1(i32* nocapture %A, i32* nocapture %B, i32 %N) #0 {
entry:
  %cmp9 = icmp sgt i32 %N, 0
  br i1 %cmp9, label %for.body.lr.ph, label %for.end

for.body.lr.ph:
  %div = sdiv i32 %N, 2
  %bot.gep = getelementptr i32, i32* %A, i32 %div
  br label %for.body

for.body:
  %i = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ]
  %gep.0 = getelementptr i32, i32* %A, i32 %i
  %gep.1 = getelementptr i32, i32* %bot.gep, i32 %i
  %gep.B = getelementptr i32, i32* %B, i32 %i
  %0 = load i32, i32* %gep.0, align 4
  %1 = load i32, i32* %gep.1, align 4
  %add = add nsw i32 %1, %0
  store i32 %add, i32* %gep.B, align 4
  %inc = add nsw i32 %i, 1
  %exitcond = icmp eq i32 %inc, %N
  br i1 %exitcond, label %for.end, label %for.body

for.end:
  ret void
}


; void test2(int *A, unsigned n) {
;   int *B = A + 1;
;   for (unsigned i = 0; i < n; ++i) {
;     A[i] = B[i];
;   }
; }

; CHECK-LABEL: test2
; CHECK: da analyze - consistent anti [1]!

define void @test2(i32*, i32) #3 {
  %3 = getelementptr inbounds i32, i32* %0, i64 1
  br label %4

; <label>:4:
  %.0 = phi i32 [ 0, %2 ], [ %14, %13 ]
  %5 = sub i32 %1, 1
  %6 = icmp ult i32 %.0, %5
  br i1 %6, label %7, label %15

; <label>:7:
  %8 = zext i32 %.0 to i64
  %9 = getelementptr inbounds i32, i32* %3, i64 %8
  %10 = load i32, i32* %9, align 4
  %11 = zext i32 %.0 to i64
  %12 = getelementptr inbounds i32, i32* %0, i64 %11
  store i32 %10, i32* %12, align 4
  br label %13

; <label>:13:
  %14 = add i32 %.0, 1
  br label %4

; <label>:15:
  ret void
}
