// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize

// REQUIRES: CPU=i386 || CPU=x86_64

// We have to claim this is raw SIL because there are critical edges from non
// cond_br instructions.
sil_stage raw

import Builtin
import Swift

protocol P {
  func f() -> Self
}

struct S {
  var v: Int
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testUnconditional0(
sil @testUnconditional0 : $@convention(thin) (@in P) -> () {
bb0(%0 : $*P):
  // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align
  // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
  // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
  // CHECK: [[T3:%.*]] = call swiftcc %swift.metadata_response @"$S12dynamic_cast1P_pMa"([[INT]] 0)
  // CHECK: [[T4:%.*]] = extractvalue %swift.metadata_response [[T3]], 0
  // CHECK: call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 7)
  %1 = alloc_stack $S
  unconditional_checked_cast_addr P in %0 : $*P to S in %1 : $*S
  destroy_addr %1 : $*S
  dealloc_stack %1 : $*S
  %2 = tuple ()
  return %2 : $()
}

// CHECK-LABEL: define linkonce_odr hidden swiftcc %swift.metadata_response @"$S12dynamic_cast1P_pMa"(
// CHECK:       call %swift.type* @swift_getExistentialTypeMetadata(

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testUnconditional1(
sil @testUnconditional1 : $@convention(thin) (@in P) -> () {
bb0(%0 : $*P):
  // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align
  // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
  // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
  // CHECK: [[T3:%.*]] = call swiftcc %swift.metadata_response @"$S12dynamic_cast1P_pMa"([[INT]] 0)
  // CHECK: [[T4:%.*]] = extractvalue %swift.metadata_response [[T3]], 0
  // CHECK: call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 7)
  %1 = alloc_stack $S
  unconditional_checked_cast_addr P in %0 : $*P to S in %1 : $*S
  destroy_addr %1 : $*S
  dealloc_stack %1 : $*S
  %2 = tuple ()
  return %2 : $()
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testConditional0(
sil @testConditional0 : $@convention(thin) (@in P) -> () {
bb0(%0 : $*P):
  // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align
  // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
  // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
  // CHECK: [[T3:%.*]] = call swiftcc %swift.metadata_response @"$S12dynamic_cast1P_pMa"([[INT]] 0)
  // CHECK: [[T4:%.*]] = extractvalue %swift.metadata_response [[T3]], 0
  // CHECK: [[T5:%.*]] = call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 6)
  // CHECK: br i1 [[T5]],
  %1 = alloc_stack $S
  checked_cast_addr_br take_always P in %0 : $*P to S in %1 : $*S, bb1, bb2
bb1:
  br bb2
bb2:
  destroy_addr %1 : $*S
  dealloc_stack %1 : $*S
  %2 = tuple ()
  return %2 : $()
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testConditional1(
sil @testConditional1 : $@convention(thin) (@in P) -> () {
bb0(%0 : $*P):
  // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align
  // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
  // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
  // CHECK: [[T3:%.*]] = call swiftcc %swift.metadata_response @"$S12dynamic_cast1P_pMa"([[INT]] 0)
  // CHECK: [[T4:%.*]] = extractvalue %swift.metadata_response [[T3]], 0
  // CHECK: [[T5:%.*]] = call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 2)
  // CHECK: br i1 [[T5]],
  %1 = alloc_stack $S
  checked_cast_addr_br take_on_success P in %0 : $*P to S in %1 : $*S, bb1, bb2
bb1:
  br bb2
bb2:
  destroy_addr %1 : $*S
  dealloc_stack %1 : $*S
  %2 = tuple ()
  return %2 : $()
}

// CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @testConditional2(
sil @testConditional2 : $@convention(thin) (@in P) -> () {
bb0(%0 : $*P):
  // CHECK: [[T0:%.*]] = alloca [[S:%.*]], align
  // CHECK: [[T1:%.*]] = bitcast [[S]]* [[T0]] to [[OPAQUE:%swift.opaque]]*
  // CHECK: [[T2:%.*]] = bitcast [[P:%.*]]* {{%.*}} to [[OPAQUE]]*
  // CHECK: [[T3:%.*]] = call swiftcc %swift.metadata_response @"$S12dynamic_cast1P_pMa"([[INT]] 0)
  // CHECK: [[T4:%.*]] = extractvalue %swift.metadata_response [[T3]], 0
  // CHECK: [[T5:%.*]] = call i1 @swift_dynamicCast([[OPAQUE]]* [[T1]], [[OPAQUE]]* [[T2]], %swift.type* [[T4]], %swift.type* {{.*}}, [[INT]] 0)
  // CHECK: br i1 [[T5]],
  %1 = alloc_stack $S
  checked_cast_addr_br copy_on_success P in %0 : $*P to S in %1 : $*S, bb1, bb2
bb1:
  br bb2
bb2:
  destroy_addr %1 : $*S
  dealloc_stack %1 : $*S
  %2 = tuple ()
  return %2 : $()
}
