// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize
sil_stage canonical

import Builtin


// CHECK-LABEL: define{{( protected)?}} swiftcc void @pod_box_8_8_a
sil @pod_box_8_8_a : $@convention(thin) () -> () {
entry:
  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[POD_8_8_METADATA:@metadata[0-9.]*]], i32 0, i32 2), [[WORD:i[0-9]+]] [[POD_8_8_SIZE:[0-9]+]], [[WORD]] 7)
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.Int64>
  // CHECK: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_8_8_LAYOUT:<\{ %swift.refcounted, \[8 x i8\] \}>]]*
  // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_8_8_LAYOUT]], [[POD_8_8_LAYOUT]]* [[BOX_RAW]], i32 0, i32 1
  // CHECK: [[BOX_DATA_1:%.*]] = bitcast [8 x i8]* [[BOX_DATA]] to i64*
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>, 0
  // CHECK: call void @swift_rt_swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>
  return undef : $()
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @pod_box_8_8_b
sil @pod_box_8_8_b : $@convention(thin) () -> () {
entry:
  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[POD_8_8_METADATA]], i32 0, i32 2), [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>
  // CHECK: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_8_8_LAYOUT:<\{ %swift.refcounted, \[8 x i8\] \}>]]*
  // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_8_8_LAYOUT]], [[POD_8_8_LAYOUT]]* [[BOX_RAW]], i32 0, i32 1
  // CHECK: [[BOX_DATA_1:%.*]] = bitcast [8 x i8]* [[BOX_DATA]] to double*
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>, 0
  // CHECK: call void @swift_rt_swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] [[POD_8_8_SIZE]], [[WORD]] 7)
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.FPIEEE64>
  return undef : $()
}

@_alignment(32)
struct OverAligned {
  var x, y, z, w: Builtin.Int64
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @pod_box_32_32
sil @pod_box_32_32 : $@convention(thin) () -> () {
entry:
  // CHECK: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[POD_32_32_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 64, [[WORD]] 31)
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <OverAligned>
  // CHECK-32: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_32_32_LAYOUT:<\{ %swift.refcounted, \[24 x i8\], \[32 x i8\] \}>]]*
  // CHECK-64: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* [[BOX]] to [[POD_32_32_LAYOUT:<\{ %swift.refcounted, \[16 x i8\], \[32 x i8\] \}>]]*
  // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_32_32_LAYOUT]], [[POD_32_32_LAYOUT]]* [[BOX_RAW]], i32 0, i32 2
  // CHECK: [[BOX_DATA_1:%.*]] = bitcast [32 x i8]* [[BOX_DATA]] to %T11typed_boxes11OverAlignedV*
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <OverAligned>, 0
  // CHECK: call void @swift_rt_swift_deallocUninitializedObject(%swift.refcounted* [[BOX]], [[WORD]] 64, [[WORD]] 31)
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <OverAligned>
  return undef : $()
}

class C {}
sil_vtable C {}

class D {}
sil_vtable D {}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @rc_box_a
sil @rc_box_a : $@convention(thin) () -> () {
entry:
  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 24, [[WORD]] 7)
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <C>
  // CHECK: bitcast %swift.refcounted** {{%.*}} to %T11typed_boxes1CC**
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <C>, 0
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <C>
  return undef : $()
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @rc_box_b
sil @rc_box_b : $@convention(thin) () -> () {
entry:
  // TODO: Should reuse metadata
  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 12, [[WORD]] 3)
  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 24, [[WORD]] 7)
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <D>
  // CHECK: bitcast %swift.refcounted** {{%.*}} to %T11typed_boxes1DC**
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <D>, 0
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <D>
  return undef : $()
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @unknown_rc_box
sil @unknown_rc_box : $@convention(thin) () -> () {
entry:
  // CHECK-32: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @swift_rt_swift_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 24, [[WORD]] 7)
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>, 0
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Builtin.UnknownObject>
  return undef : $()
}

struct Fixed {
  var c: C
  var d: D
  var i: Builtin.Int64
}

sil @fixed_box : $@convention(thin) () -> () {
entry:
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <Fixed>
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Fixed>, 0
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Fixed>
  return undef : $()
}

struct Dyn<T> {
  var c: C
  var d: D
  var x: T
}

sil @take_dyn : $@convention(thin) <T> (@in Dyn<T>) -> ()
sil @take_t : $@convention(thin) <T> (@in T) -> ()

// CHECK-LABEL: define{{( protected)?}} swiftcc void @dyn_box_a
sil @dyn_box_a : $@convention(thin) <T> () -> () {
entry:
  // CHECK: [[METADATA:%.*]] = call %swift.type* @_T011typed_boxes3DynVMa(%swift.type* %T)
  // CHECK: [[ALLOC:%.*]] = call { %swift.refcounted*, %swift.opaque* } @swift_allocBox(%swift.type* [[METADATA]])
  // CHECK: [[BOX:%.*]] = extractvalue { %swift.refcounted*, %swift.opaque* } [[ALLOC]], 0
  // CHECK: [[PTR:%.*]] = extractvalue { %swift.refcounted*, %swift.opaque* } [[ALLOC]], 1
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <Dyn<T>>
  // CHECK: [[CAST_PTR:%.*]] = bitcast %swift.opaque* [[PTR]] to %T11typed_boxes3DynV*
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <Dyn<T>>, 0
  %f = function_ref @take_dyn : $@convention(thin) <T> (@in Dyn<T>) -> ()
  // CHECK: call swiftcc void @take_dyn(%T11typed_boxes3DynV* {{[^,]*}} [[CAST_PTR]], {{.*}})
  %t = apply %f<T>(%b) : $@convention(thin) <T> (@in Dyn<T>) -> ()
  // CHECK: call void @swift_deallocBox(%swift.refcounted* [[BOX]])
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <Dyn<T>>
  return undef : $()
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @dyn_box_b
sil @dyn_box_b : $@convention(thin) <T> () -> () {
entry:
  // CHECK: [[ALLOC:%.*]] = call { %swift.refcounted*, %swift.opaque* } @swift_allocBox(%swift.type* %T)
  // CHECK: [[BOX:%.*]] = extractvalue { %swift.refcounted*, %swift.opaque* } [[ALLOC]], 0
  // CHECK: [[PTR:%.*]] = extractvalue { %swift.refcounted*, %swift.opaque* } [[ALLOC]], 1
  %a = alloc_box $<τ_0_0> { var τ_0_0 } <T>
  %b = project_box %a : $<τ_0_0> { var τ_0_0 } <T>, 0
  %f = function_ref @take_t : $@convention(thin) <T> (@in T) -> ()
  // CHECK: call swiftcc void @take_t(%swift.opaque* {{[^,]*}} [[PTR]], {{.*}})
  %t = apply %f<T>(%b) : $@convention(thin) <T> (@in T) -> ()
  // CHECK: call void @swift_deallocBox(%swift.refcounted* [[BOX]])
  dealloc_box %a : $<τ_0_0> { var τ_0_0 } <T>
  return undef : $()
}

// CHECK-LABEL: define{{( protected)?}} swiftcc i64 @proj_box
sil @proj_box : $@convention(thin) (<τ_0_0> { var τ_0_0 } <Builtin.Int64>) -> Builtin.Int64 {
entry(%0 : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>):
  // CHECK: [[BOX_RAW:%.*]] = bitcast %swift.refcounted* %0 to [[POD_8_8_LAYOUT:<\{ %swift.refcounted, \[8 x i8\] \}>]]*
  // CHECK: [[BOX_DATA:%.*]] = getelementptr inbounds [[POD_8_8_LAYOUT]], [[POD_8_8_LAYOUT]]* [[BOX_RAW]], i32 0, i32 1
  // CHECK: [[BOX_DATA_1:%.*]] = bitcast [8 x i8]* [[BOX_DATA]] to i64*
  %p = project_box %0 : $<τ_0_0> { var τ_0_0 } <Builtin.Int64>, 0
  // CHECK: [[R:%.*]] = load i64, i64* [[BOX_DATA_1]]
  %l = load %p : $*Builtin.Int64
  // CHECK: ret i64 [[R]]
  return %l : $Builtin.Int64
}

// CHECK-LABEL: define{{( protected)?}} swiftcc void @dyn_proj_box_a
sil @dyn_proj_box_a : $@convention(thin) <T> (<τ_0_0> { var τ_0_0 } <Dyn<T>>) -> () {
entry(%0 : $<τ_0_0> { var τ_0_0 } <Dyn<T>>):
  // CHECK: [[PTR:%.*]] = call %swift.opaque* @swift_projectBox(%swift.refcounted* %0)
  // CHECK: [[BOX_DATA_1:%.*]] = bitcast %swift.opaque* [[PTR]] to %T11typed_boxes3DynV*
  %p = project_box %0 : $<τ_0_0> { var τ_0_0 } <Dyn<T>>, 0
  %f = function_ref @take_dyn : $@convention(thin) <T> (@in Dyn<T>) -> ()
  // CHECK: call swiftcc void @take_dyn(%T11typed_boxes3DynV* {{[^,]*}} [[BOX_DATA_1]], {{.*}})
  %t = apply %f<T>(%p) : $@convention(thin) <T> (@in Dyn<T>) -> ()
  return undef : $()
}


// CHECK-LABEL: define{{( protected)?}} swiftcc void @dyn_proj_box_b
sil @dyn_proj_box_b : $@convention(thin) <T> (<τ_0_0> { var τ_0_0 } <T>) -> () {
entry(%0 : $<τ_0_0> { var τ_0_0 } <T>):
  // CHECK: [[PTR:%.*]] = call %swift.opaque* @swift_projectBox(%swift.refcounted* %0)
  %p = project_box %0 : $<τ_0_0> { var τ_0_0 } <T>, 0
  %f = function_ref @take_t : $@convention(thin) <T> (@in T) -> ()
  // CHECK: call swiftcc void @take_t(%swift.opaque* {{[^,]*}} [[PTR]], {{.*}})
  %t = apply %f<T>(%p) : $@convention(thin) <T> (@in T) -> ()
  return undef : $()
}
