; RUN: opt < %s -tbaa -basicaa -aa-eval -evaluate-aa-metadata -print-no-aliases -print-may-aliases -disable-output 2>&1 | FileCheck %s
; RUN: opt < %s -aa-pipeline=type-based-aa,basic-aa -passes=aa-eval -evaluate-aa-metadata -print-no-aliases -print-may-aliases -disable-output 2>&1 | FileCheck %s

; Generated with "clang -cc1 -disable-llvm-optzns -O1 -emit-llvm"
; #include <new>
; struct Foo { long i; };
; struct Bar { void *p; };
; long foo(int n) {
;   Foo *f = new Foo;
;   f->i = 1;
;   for (int i=0; i<n; ++i) {
;     Bar *b = new (f) Bar;
;     b->p = 0;
;     f = new (f) Foo;
;     f->i = i;
;   }
;   return f->i;
; }

; Basic AA says MayAlias, TBAA says NoAlias
; CHECK: MayAlias: i64* %i5, i8** %p
; CHECK: NoAlias: store i64 %conv, i64* %i5, align 8, !tbaa !6 <->   store i8* null, i8** %p, align 8, !tbaa !9

%struct.Foo = type { i64 }
%struct.Bar = type { i8* }

define i64 @_Z3fooi(i32 %n) #0 {
entry:
  %n.addr = alloca i32, align 4
  %f = alloca %struct.Foo*, align 8
  %i1 = alloca i32, align 4
  %b = alloca %struct.Bar*, align 8
  store i32 %n, i32* %n.addr, align 4, !tbaa !0
  %call = call noalias i8* @_Znwm(i64 8)
  %0 = bitcast i8* %call to %struct.Foo*
  store %struct.Foo* %0, %struct.Foo** %f, align 8, !tbaa !4
  %1 = load %struct.Foo*, %struct.Foo** %f, align 8, !tbaa !4
  %i = getelementptr inbounds %struct.Foo, %struct.Foo* %1, i32 0, i32 0
  store i64 1, i64* %i, align 8, !tbaa !6
  store i32 0, i32* %i1, align 4, !tbaa !0
  br label %for.cond

for.cond:
  %2 = load i32, i32* %i1, align 4, !tbaa !0
  %3 = load i32, i32* %n.addr, align 4, !tbaa !0
  %cmp = icmp slt i32 %2, %3
  br i1 %cmp, label %for.body, label %for.end

for.body:
  %4 = load %struct.Foo*, %struct.Foo** %f, align 8, !tbaa !4
  %5 = bitcast %struct.Foo* %4 to i8*
  %new.isnull = icmp eq i8* %5, null
  br i1 %new.isnull, label %new.cont, label %new.notnull

new.notnull:
  %6 = bitcast i8* %5 to %struct.Bar*
  br label %new.cont

new.cont:
  %7 = phi %struct.Bar* [ %6, %new.notnull ], [ null, %for.body ]
  store %struct.Bar* %7, %struct.Bar** %b, align 8, !tbaa !4
  %8 = load %struct.Bar*, %struct.Bar** %b, align 8, !tbaa !4
  %p = getelementptr inbounds %struct.Bar, %struct.Bar* %8, i32 0, i32 0
  store i8* null, i8** %p, align 8, !tbaa !9
  %9 = load %struct.Foo*, %struct.Foo** %f, align 8, !tbaa !4
  %10 = bitcast %struct.Foo* %9 to i8*
  %new.isnull2 = icmp eq i8* %10, null
  br i1 %new.isnull2, label %new.cont4, label %new.notnull3

new.notnull3:
  %11 = bitcast i8* %10 to %struct.Foo*
  br label %new.cont4

new.cont4:
  %12 = phi %struct.Foo* [ %11, %new.notnull3 ], [ null, %new.cont ]
  store %struct.Foo* %12, %struct.Foo** %f, align 8, !tbaa !4
  %13 = load i32, i32* %i1, align 4, !tbaa !0
  %conv = sext i32 %13 to i64
  %14 = load %struct.Foo*, %struct.Foo** %f, align 8, !tbaa !4
  %i5 = getelementptr inbounds %struct.Foo, %struct.Foo* %14, i32 0, i32 0
  store i64 %conv, i64* %i5, align 8, !tbaa !6
  br label %for.inc

for.inc:
  %15 = load i32, i32* %i1, align 4, !tbaa !0
  %inc = add nsw i32 %15, 1
  store i32 %inc, i32* %i1, align 4, !tbaa !0
  br label %for.cond

for.end:
  %16 = load %struct.Foo*, %struct.Foo** %f, align 8, !tbaa !4
  %i6 = getelementptr inbounds %struct.Foo, %struct.Foo* %16, i32 0, i32 0
  %17 = load i64, i64* %i6, align 8, !tbaa !6
  ret i64 %17
}

declare noalias i8* @_Znwm(i64)

attributes #0 = { nounwind }

!0 = !{!1, !1, i64 0}
!1 = !{!"int", !2, i64 0}
!2 = !{!"omnipotent char", !3, i64 0}
!3 = !{!"Simple C/C++ TBAA"}
!4 = !{!5, !5, i64 0}
!5 = !{!"any pointer", !2, i64 0}
!6 = !{!7, !8, i64 0}
!7 = !{!"_ZTS3Foo", !8, i64 0}
!8 = !{!"long", !2, i64 0}
!9 = !{!10, !5, i64 0}
!10 = !{!"_ZTS3Bar", !5, i64 0}
