// RUN: %target-swift-frontend -parse-sil -emit-ir %s | %FileCheck %s
// REQUIRES: OS=macosx

// Make sure that we are using type lowering and that we are handling the return
// value correctly.

sil_stage canonical

import Builtin

struct Foo {
  var t1 : Builtin.Int32
  var c1 : Builtin.NativeObject
  var t2 : Builtin.Int32
  var c2 : Builtin.NativeObject
  var t3 : Builtin.Int32
}

// CHECK: define{{( protected)?}} swiftcc void @trivial_arg(
// CHECK-NEXT: entry
// CHECK-NEXT: ret void
sil [ossa] @trivial_arg : $@convention(thin) (Builtin.Int32) -> () {
bb0(%0 : $Builtin.Int32):
  %1 = copy_value %0 : $Builtin.Int32
  destroy_value %1 : $Builtin.Int32
  %2 = tuple()
  return %2 : $()
}

// CHECK: define{{( protected)?}} swiftcc void @non_trivial(
// CHECK: [[GEP1:%.*]] = getelementptr inbounds %T019copy_value_destroy_B03FooV, %T019copy_value_destroy_B03FooV* %1, i32 0, i32 2
// CHECK-NEXT: [[VAL1:%.*]] = load %swift.refcounted*, %swift.refcounted** [[GEP1]], align 8
// CHECK: [[GEP2:%.*]] = getelementptr inbounds %T019copy_value_destroy_B03FooV, %T019copy_value_destroy_B03FooV* %1, i32 0, i32 5
// CHECK-NEXT: [[VAL2:%.*]] = load %swift.refcounted*, %swift.refcounted** [[GEP2]], align 8
// CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[VAL1]])
// CHECK: call %swift.refcounted* @swift_retain(%swift.refcounted* returned [[VAL2]])
// CHECK: call void @swift_release(%swift.refcounted* [[VAL1]])
// CHECK: call void @swift_release(%swift.refcounted* [[VAL2]])
sil [ossa] @non_trivial : $@convention(thin) (@guaranteed Foo) -> () {
bb0(%0 : @guaranteed $Foo):
  %1 = copy_value %0 : $Foo
  destroy_value %1 : $Foo
  %2 = tuple()
  return %2 : $()
}

// CHECK: define{{( protected)?}} swiftcc void @non_trivial_unowned(
// CHECK: call %swift.refcounted* @swift_unownedRetainStrong(%swift.refcounted* returned %0)
// CHECK: call void @swift_release(%swift.refcounted* %0)
sil [ossa] @non_trivial_unowned : $@convention(thin) (@guaranteed Builtin.NativeObject) -> () {
bb0(%0 : @guaranteed $Builtin.NativeObject):
  %1 = ref_to_unowned %0 : $Builtin.NativeObject to $@sil_unowned Builtin.NativeObject
  %2 = copy_unowned_value %1 : $@sil_unowned Builtin.NativeObject
  destroy_value %2 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}
