// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -emit-ir %s | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize -DINT=i%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_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_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_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_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_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_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_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @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_allocObject(%swift.type* {{.*}} [[NATIVE_RC_METADATA]], {{.*}} [[WORD]] 12, [[WORD]] 3)
  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @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_allocObject(%swift.type* {{.*}} [[UNKNOWN_RC_METADATA:@metadata[0-9.]*]], {{.*}} [[WORD]] 12, [[WORD]] 3)
  // CHECK-64: [[BOX:%.*]] = call noalias %swift.refcounted* @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: [[TMP:%.*]] = call swiftcc %swift.metadata_response @"$S11typed_boxes3DynVMa"([[INT]] 0, %swift.type* %T)
  // CHECK: [[METADATA:%.*]] = extractvalue %swift.metadata_response [[TMP]], 0
  // CHECK: [[ALLOC:%.*]] = call swiftcc { %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 swiftcc { %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 : $()
}
