; Test to ensure that type tests feeding assumes via a phi are lowered
; correctly after ThinLTO index-only WPD, which needs to set up the necessary
; type id summaries.

; RUN: rm -rf %t && split-file %s %t && cd %t

; RUN: opt -thinlto-bc y.ll -o y.bc
; RUN: opt -thinlto-bc z.ll -o z.bc

; RUN: llvm-lto2 run y.bc z.bc -o out \
; RUN:	-r y.bc,main,plx \
; RUN:	-r y.bc,_Z2b1v, \
; RUN:	-r y.bc,_Z2b2v, \
; RUN:	-r z.bc,_Z2b1v,pl \
; RUN:	-r z.bc,_Znwm, \
; RUN:	-r z.bc,_Z2b2v,pl \
; RUN:	-r z.bc,_ZN2D11fEv,pl \
; RUN:	-r z.bc,_ZN1B1fEv,pl \
; RUN:	-r z.bc,_ZN2D21fEv,pl \
; RUN:	-r z.bc,_ZTV2D1,pl \
; RUN:	-r z.bc,_ZTV1B,pl \
; RUN:	-r z.bc,_ZTV2D2,pl \
; RUN:	-print-after=lowertypetests -filter-print-funcs=main 2>&1 | FileCheck %s

; The first LTT should leave the type tests as is (instead of lowering
; them to false incorrectly).
; CHECK: *** IR Dump After LowerTypeTestsPass on [module] ***
; CHECK: 4:
; CHECK:   %7 = tail call i1 @llvm.type.test(ptr %6, metadata !"_ZTS2D1")
; CHECK:   br label %12
; CHECK: 8:
; CHECK:   %11 = tail call i1 @llvm.type.test(ptr %10, metadata !"_ZTS2D2")
; CHECK:   br label %12
; CHECK: 12:
; CHECK:   %13 = phi i1 [ %11, %8 ], [ %7, %4 ]

; The second LTT should lower them to true.
; CHECK: *** IR Dump After LowerTypeTestsPass on [module] ***
; CHECK-NOT: @llvm.type.test
; CHECK: 10:
; CHECK:   %11 = phi i1 [ true, %7 ], [ true, %4 ]


;--- y.ll
; ModuleID = 'y.cc'
source_filename = "y.cc"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define i32 @main(i32 %argc, ptr %argv) {
entry:
  %tobool.not = icmp eq i32 %argc, 0
  br i1 %tobool.not, label %if.else, label %if.then

if.then:
  %call = tail call ptr @_Z2b1v()
  %vtable = load ptr, ptr %call, align 8
  %0 = tail call i1 @llvm.type.test(ptr %vtable, metadata !"_ZTS2D1")
  br label %if.end

if.else:
  %call1 = tail call ptr @_Z2b2v()
  %vtable2 = load ptr, ptr %call1, align 8
  %1 = tail call i1 @llvm.type.test(ptr %vtable2, metadata !"_ZTS2D2")
  br label %if.end

if.end:
  %.sink = phi i1 [ %1, %if.else ], [ %0, %if.then ]
  %vtable2.sink = phi ptr [ %vtable2, %if.else ], [ %vtable, %if.then ]
  %call1.sink = phi ptr [ %call1, %if.else ], [ %call, %if.then ]
  tail call void @llvm.assume(i1 %.sink)
  %2 = load ptr, ptr %vtable2.sink, align 8
  tail call void %2(ptr align 8 %call1.sink)
  ret i32 0
}

declare ptr @_Z2b1v()

declare i1 @llvm.type.test(ptr, metadata)

declare void @llvm.assume(i1)

declare ptr @_Z2b2v()

!llvm.module.flags = !{!0, !1, !2, !3, !4}
!llvm.ident = !{!5}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 1, !"Virtual Function Elim", i32 0}
!2 = !{i32 7, !"PIC Level", i32 2}
!3 = !{i32 7, !"PIE Level", i32 2}
!4 = !{i32 7, !"uwtable", i32 2}
!5 = !{!"clang version 15.0.0 (git@github.com:llvm/llvm-project.git e6f39e3f31ba88f2084a5d987f9a827aff4e17b1)"}

;--- z.ll
; ModuleID = 'z.cc'
source_filename = "z.cc"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

$_ZN2D11fEv = comdat any

$_ZN1B1fEv = comdat any

$_ZN2D21fEv = comdat any

$_ZTV2D1 = comdat any

$_ZTV1B = comdat any

$_ZTV2D2 = comdat any

@_ZTV2D1 = linkonce_odr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN2D11fEv] }, comdat, align 8, !type !0, !type !1, !type !2, !type !3, !vcall_visibility !4
@_ZTV1B = linkonce_odr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN1B1fEv] }, comdat, align 8, !type !0, !type !1, !vcall_visibility !4
@_ZTV2D2 = linkonce_odr constant { [3 x ptr] } { [3 x ptr] [ptr null, ptr null, ptr @_ZN2D21fEv] }, comdat, align 8, !type !0, !type !1, !type !5, !type !6, !vcall_visibility !4

define ptr @_Z2b1v() {
entry:
  %call = tail call ptr @_Znwm(i64 8)
  store ptr getelementptr inbounds ({ [3 x ptr] }, ptr @_ZTV2D1, i64 0, inrange i32 0, i64 2), ptr %call, align 8
  ret ptr %call
}

declare ptr @_Znwm(i64)

define ptr @_Z2b2v() {
entry:
  %call = tail call ptr @_Znwm(i64 8)
  store ptr getelementptr inbounds ({ [3 x ptr] }, ptr @_ZTV2D2, i64 0, inrange i32 0, i64 2), ptr %call, align 8
  ret ptr %call
}

define linkonce_odr void @_ZN2D11fEv(ptr %this) comdat align 2 {
entry:
  ret void
}

define linkonce_odr void @_ZN1B1fEv(ptr %this) comdat align 2 {
entry:
  ret void
}

define linkonce_odr void @_ZN2D21fEv(ptr %this) comdat align 2 {
entry:
  ret void
}

!llvm.module.flags = !{!7, !8, !9, !10, !11}
!llvm.ident = !{!12}

!0 = !{i64 16, !"_ZTS1B"}
!1 = !{i64 16, !"_ZTSM1BFvvE.virtual"}
!2 = !{i64 16, !"_ZTS2D1"}
!3 = !{i64 16, !"_ZTSM2D1FvvE.virtual"}
!4 = !{i64 1}
!5 = !{i64 16, !"_ZTS2D2"}
!6 = !{i64 16, !"_ZTSM2D2FvvE.virtual"}
!7 = !{i32 1, !"wchar_size", i32 4}
!8 = !{i32 1, !"Virtual Function Elim", i32 0}
!9 = !{i32 7, !"PIC Level", i32 2}
!10 = !{i32 7, !"PIE Level", i32 2}
!11 = !{i32 7, !"uwtable", i32 2}
!12 = !{!"clang version 15.0.0 (git@github.com:llvm/llvm-project.git e6f39e3f31ba88f2084a5d987f9a827aff4e17b1)"}
