// RUN: %target-sil-opt  -guaranteed-arc-opts %s | %FileCheck %s

sil_stage raw

import Builtin

sil @kraken : $@convention(thin) () -> ()

// CHECK-LABEL: sil @retainvalue_test1 : $@convention(thin) (Builtin.NativeObject, Builtin.NativeObject) -> () {
// CHECK: bb0([[ARG1:%.*]] : $Builtin.NativeObject, [[ARG2:%.*]] : $Builtin.NativeObject):
// CHECK-NOT: retain_value [[ARG1]]
// CHECK: retain_value [[ARG2]]
// CHECK-NOT: release_value [[ARG1]]
sil @retainvalue_test1 : $@convention(thin) (Builtin.NativeObject, Builtin.NativeObject) -> () {
bb0(%0 : $Builtin.NativeObject, %1 : $Builtin.NativeObject):
  retain_value %0 : $Builtin.NativeObject
  retain_value %1 : $Builtin.NativeObject
  release_value %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @retainvalue_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> () {
// CHECK-NOT: retain_value
// CHECK-NOT: release_value
sil @retainvalue_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> () {
bb0(%0 : $Builtin.NativeObject, %1 : $*Builtin.Int32):
  retain_value %0 : $Builtin.NativeObject
  %2 = integer_literal $Builtin.Int32, 0
  store %2 to %1 : $*Builtin.Int32
  release_value %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @retainvalue_test3 : $@convention(thin) (Builtin.NativeObject) -> () {
// CHECK: retain_value
// CHECK: release_value
sil @retainvalue_test3 : $@convention(thin) (Builtin.NativeObject) -> () {
bb0(%0 : $Builtin.NativeObject):
  retain_value %0 : $Builtin.NativeObject
  %1 = function_ref @kraken : $@convention(thin) () -> ()
  apply %1() : $@convention(thin) () -> ()
  release_value %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @retainvalue_test4 : $@convention(thin) (Builtin.NativeObject) -> () {
// CHECK: release_value
sil @retainvalue_test4 : $@convention(thin) (Builtin.NativeObject) -> () {
bb0(%0 : $Builtin.NativeObject):
  release_value %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @strongretain_test1 : $@convention(thin) (Builtin.NativeObject, Builtin.NativeObject) -> () {
// CHECK: bb0([[ARG1:%.*]] : $Builtin.NativeObject, [[ARG2:%.*]] : $Builtin.NativeObject):
// CHECK-NOT: strong_retain [[ARG1]]
// CHECK: strong_retain [[ARG2]]
// CHECK-NOT: strong_release [[ARG1]]
sil @strongretain_test1 : $@convention(thin) (Builtin.NativeObject, Builtin.NativeObject) -> () {
bb0(%0 : $Builtin.NativeObject, %1 : $Builtin.NativeObject):
  strong_retain %0 : $Builtin.NativeObject
  strong_retain %1 : $Builtin.NativeObject
  strong_release %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @strongretain_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> () {
// CHECK-NOT: strong_retain
// CHECK-NOT: strong_release
sil @strongretain_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> () {
bb0(%0 : $Builtin.NativeObject, %1 : $*Builtin.Int32):
  strong_retain %0 : $Builtin.NativeObject
  %2 = integer_literal $Builtin.Int32, 0
  store %2 to %1 : $*Builtin.Int32
  strong_release %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @strongretain_test3 : $@convention(thin) (Builtin.NativeObject) -> () {
// CHECK: strong_retain
// CHECK: strong_release
sil @strongretain_test3 : $@convention(thin) (Builtin.NativeObject) -> () {
bb0(%0 : $Builtin.NativeObject):
  strong_retain %0 : $Builtin.NativeObject
  %1 = function_ref @kraken : $@convention(thin) () -> ()
  apply %1() : $@convention(thin) () -> ()
  strong_release %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @strongretain_test4 : $@convention(thin) (Builtin.NativeObject) -> () {
// CHECK: strong_release
sil @strongretain_test4 : $@convention(thin) (Builtin.NativeObject) -> () {
bb0(%0 : $Builtin.NativeObject):
  strong_release %0 : $Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @copyaddr_test1 : $@convention(thin) (@in Builtin.NativeObject) -> @out Builtin.NativeObject {
// CHECK: bb0([[ARG1:%.*]] : $*Builtin.NativeObject, [[ARG2:%.*]] : $*Builtin.NativeObject):
// CHECK: copy_addr [take] {{%.*}} to {{%.*}}
// CHECK-NOT: destroy_addr [[ARG1]]
sil @copyaddr_test1 : $@convention(thin) (@in Builtin.NativeObject) -> @out Builtin.NativeObject {
bb0(%0 : $*Builtin.NativeObject, %1 : $*Builtin.NativeObject):
  copy_addr %1 to %0 : $*Builtin.NativeObject
  destroy_addr %1 : $*Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @copyaddr_test2 : $@convention(thin) (@in Builtin.NativeObject) -> @out Builtin.NativeObject {
// CHECK: copy_addr
// CHECK: destroy_addr
sil @copyaddr_test2 : $@convention(thin) (@in Builtin.NativeObject) -> @out Builtin.NativeObject {
bb0(%0 : $*Builtin.NativeObject, %1 : $*Builtin.NativeObject):
  copy_addr %1 to %0 : $*Builtin.NativeObject
  %2 = function_ref @kraken : $@convention(thin) () -> ()
  apply %2() : $@convention(thin) () -> ()
  destroy_addr %1 : $*Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil @copyaddr_test3 : $@convention(thin) (@in Builtin.NativeObject) -> () {
// CHECK: destroy_addr
sil @copyaddr_test3 : $@convention(thin) (@in Builtin.NativeObject) -> () {
bb0(%0 : $*Builtin.NativeObject):
  destroy_addr %0 : $*Builtin.NativeObject
  %9999 = tuple()
  return %9999 : $()
}

class C {
  var val: Builtin.Int32
  init(i: Builtin.Int32)
  deinit
}

// CHECK-LABEL: sil @access_test : $@convention(thin) (@owned C, Builtin.Int32) -> ()
// CHECK-NOT: strong_retain
// CHECK-NOT: strong_release
sil @access_test : $@convention(thin) (@owned C, Builtin.Int32) -> () {
bb0(%0 : $C, %1 : $Builtin.Int32):
  strong_retain %0 : $C
  %valadr = ref_element_addr %0 : $C, #C.val
  %access = begin_access [modify] [dynamic] %valadr : $*Builtin.Int32
  store %1 to %access : $*Builtin.Int32
  end_access %access : $*Builtin.Int32
  strong_release %0 : $C
  %9999 = tuple()
  return %9999 : $()
}
