; The expected behavior of this file is expected to change when partial
; inlining legality check is enhanced.

; RUN: opt -S -partial-inliner -skip-partial-inlining-cost-analysis  < %s   | FileCheck %s
; RUN: opt -S -passes=partial-inliner -skip-partial-inlining-cost-analysis < %s |   FileCheck %s

%class.A = type { i32 }

@cond = local_unnamed_addr global i32 0, align 4
@condptr = external local_unnamed_addr global i32*, align 8

; Function Attrs: uwtable
define void @_Z3foo_unknown_mem_accessv() local_unnamed_addr  {
bb:
  %tmp = alloca %class.A, align 4
  %tmp1 = alloca %class.A, align 4
  %tmp2 = bitcast %class.A* %tmp to i8*
  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp2) 
  %tmp3 = bitcast %class.A* %tmp1 to i8*
  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp3) 
  %tmp4 = load i32*, i32** @condptr, align 8, !tbaa !2
  %tmp5 = load i32, i32* %tmp4, align 4, !tbaa !6
  %tmp6 = icmp eq i32 %tmp5, 0
  br i1 %tmp6, label %bb7, label %bb8

bb7:                                              ; preds = %bb
  call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
  br label %bb8

bb8:                                              ; preds = %bb7, %bb
  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp3) 
  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp2) 
  ret void
}

declare void @_Z3barv() local_unnamed_addr
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) 
declare void @_ZN1A7memfuncEv(%class.A*) local_unnamed_addr 
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) 

define void @_Z3foo_unknown_calli(i32 %arg) local_unnamed_addr {
bb:
  %tmp = alloca %class.A, align 4
  %tmp1 = bitcast %class.A* %tmp to i8*
  call void @llvm.lifetime.start.p0i8(i64 4, i8* nonnull %tmp1) 
  tail call void @_Z3barv()
  %tmp2 = icmp eq i32 %arg, 0
  br i1 %tmp2, label %bb3, label %bb4

bb3:                                              ; preds = %bb
  call void @_ZN1A7memfuncEv(%class.A* nonnull %tmp)
  br label %bb4

bb4:                                              ; preds = %bb3, %bb
  call void @llvm.lifetime.end.p0i8(i64 4, i8* nonnull %tmp1) 
  ret void
}

define void @_Z3goov() local_unnamed_addr  {
; CHECK-LABEL: @_Z3goov
; CHECK-NEXT: bb:
; CHECK: alloca
; CHECK: lifetime
bb:
  call void @_Z3foo_unknown_mem_accessv()
  %tmp = load i32, i32* @cond, align 4, !tbaa !2
  tail call void @_Z3foo_unknown_calli(i32 %tmp)
  ret void
}

; CHECK-LABEL define internal void @_Z3foo_unknown_calli.1_bb3
; CHECK: newFuncRoot:
; CHECK-NEXT: br label %bb3

; CHECK: bb4.exitStub:
; CHECK-NEXT: ret void

; CHECK: bb3:
; CHECK-NOT: lifetime.ed
; CHECK: br label %bb4.exitStub



!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{!"clang version 5.0.0 (trunk 304489)"}
!2 = !{!3, !3, i64 0}
!3 = !{!"any pointer", !4, i64 0}
!4 = !{!"omnipotent char", !5, i64 0}
!5 = !{!"Simple C++ TBAA"}
!6 = !{!7, !7, i64 0}
!7 = !{!"int", !4, i64 0}
