// RUN: %target-swift-frontend %s -emit-ir | FileCheck -check-prefix=CHECK -check-prefix=CHECK-%target-ptrsize %s
import Swift
import Builtin

struct Huge {
  var x, y, z, w, v: Builtin.Word
}

@_alignment(32)
struct HugeAlignment {
  var x, y, z, w, v: Builtin.Word
}

// TODO: could be the context param
// CHECK-LABEL: define{{( protected)?}} void @huge_method(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP:%.*]] = alloca
// CHECK:         call void @huge_method(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP]])
sil @huge_method : $@convention(method) Huge -> () {
entry(%x : $Huge):
  %f = function_ref @huge_method : $@convention(method) Huge -> ()
  %z = apply %f(%x) : $@convention(method) Huge -> ()
  return %z : $()
}

// CHECK-LABEL: define{{( protected)?}} void @huge_param(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP:%.*]] = alloca
// CHECK:         call void @huge_param(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP]])
sil @huge_param : $@convention(thin) Huge -> () {
entry(%x : $Huge):
  %f = function_ref @huge_param : $@convention(thin) Huge -> ()
  %z = apply %f(%x) : $@convention(thin) Huge -> ()
  return %z : $()
}

// CHECK-LABEL: define{{( protected)?}} void @huge_alignment_param(%V17indirect_argument13HugeAlignment* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP:%.*]] = alloca
// CHECK:         call void @huge_alignment_param(%V17indirect_argument13HugeAlignment* noalias nocapture dereferenceable({{.*}}) [[TMP]])
sil @huge_alignment_param : $@convention(thin) HugeAlignment -> () {
entry(%x : $HugeAlignment):
  %f = function_ref @huge_alignment_param : $@convention(thin) HugeAlignment -> ()
  %z = apply %f(%x) : $@convention(thin) HugeAlignment -> ()
  return %z : $()
}

// CHECK-LABEL: define{{( protected)?}} void @huge_param_and_return(%V17indirect_argument4Huge* noalias nocapture sret, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP_ARG:%.*]] = alloca
// CHECK:         [[TMP_RET:%.*]] = alloca
// CHECK:         call void @huge_param_and_return(%V17indirect_argument4Huge* noalias nocapture sret [[TMP_RET]], %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]])
sil @huge_param_and_return : $@convention(thin) Huge -> Huge {
entry(%x : $Huge):
  %f = function_ref @huge_param_and_return : $@convention(thin) Huge -> Huge
  %z = apply %f(%x) : $@convention(thin) Huge -> Huge
  return %z : $Huge
}

// CHECK-LABEL: define{{( protected)?}} void @huge_param_and_indirect_return(%V17indirect_argument4Huge* noalias nocapture sret, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP_ARG:%.*]] = alloca
// CHECK:         call void @huge_param_and_indirect_return(%V17indirect_argument4Huge* noalias nocapture sret %0, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]])
sil @huge_param_and_indirect_return : $@convention(thin) (Huge) -> @out Huge {
entry(%o : $*Huge, %x : $Huge):
  %f = function_ref @huge_param_and_indirect_return : $@convention(thin) (Huge) -> @out Huge
  %z = apply %f(%o, %x) : $@convention(thin) (Huge) -> @out Huge
  return %z : $()
}

// CHECK-LABEL: define{{( protected)?}} void @huge_partial_application(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}), %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP_ARG:%.*]] = alloca
// CHECK:         [[CLOSURE:%.*]] = call noalias %swift.refcounted* @rt_swift_allocObject
// CHECK:         bitcast %swift.refcounted* [[CLOSURE]] to <{ %swift.refcounted, %V17indirect_argument4Huge }>*
// CHECK:         call void @_TPA_huge_partial_application(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]], %swift.refcounted* [[CLOSURE]])
// CHECK:       define internal void @_TPA_huge_partial_application(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}), %swift.refcounted*)
// CHECK:         [[TMP_ARG:%.*]] = alloca
// CHECK-NOT:     tail
// CHECK:         call void @huge_partial_application(%V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) %0, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]])
sil @huge_partial_application : $@convention(thin) (Huge, Huge) -> () {
entry(%x : $Huge, %y : $Huge):
  %f = function_ref @huge_partial_application : $@convention(thin) (Huge, Huge) -> ()
  %a = partial_apply %f(%y) : $@convention(thin) (Huge, Huge) -> ()
  %z = apply %a(%x) : $@convention(thick) @callee_owned (Huge) -> ()
  return %z : $()
}

// CHECK-LABEL: define{{( protected)?}} void @huge_partial_application_stret(%V17indirect_argument4Huge* noalias nocapture sret, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}), %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}))
// CHECK:         [[TMP_ARG:%.*]] = alloca
// CHECK:         [[TMP_RET:%.*]] = alloca
// CHECK:         [[CLOSURE:%.*]] = call noalias %swift.refcounted* @rt_swift_allocObject
// CHECK:         bitcast %swift.refcounted* [[CLOSURE]] to <{ %swift.refcounted, %V17indirect_argument4Huge }>*
// CHECK:         call void @_TPA_huge_partial_application_stret(%V17indirect_argument4Huge* noalias nocapture sret [[TMP_RET]], %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]], %swift.refcounted* [[CLOSURE]])
// CHECK:       define internal void @_TPA_huge_partial_application_stret(%V17indirect_argument4Huge* noalias nocapture sret, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}), %swift.refcounted*)
// CHECK:         [[TMP_ARG:%.*]] = alloca
// CHECK-NOT:     tail
// CHECK:         call void @huge_partial_application_stret(%V17indirect_argument4Huge* noalias nocapture sret %0, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) %1, %V17indirect_argument4Huge* noalias nocapture dereferenceable({{.*}}) [[TMP_ARG]])
sil @huge_partial_application_stret : $@convention(thin) (Huge, Huge) -> Huge {
entry(%x : $Huge, %y : $Huge):
  %f = function_ref @huge_partial_application_stret : $@convention(thin) (Huge, Huge) -> Huge
  %a = partial_apply %f(%y) : $@convention(thin) (Huge, Huge) -> Huge
  %z = apply %a(%x) : $@convention(thick) @callee_owned (Huge) -> Huge
  return %z : $Huge
}
