// First parse this and then emit a *.sib. Then read in the *.sib, then recreate
// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s

import Builtin

// CHECK-LABEL: define {{.*}}void @take_load
// CHECK-NOT: retain
// CHECK: load
// CHECK-NOT: retain
// CHECK: ret void
sil @take_load : $@convention(thin) (@in Builtin.NativeObject) -> () {
bb0(%0 : $*Builtin.NativeObject):
  load [take] %0 : $*Builtin.NativeObject
  %1 = tuple()
  return %1 : $()
}

// CHECK-LABEL: define {{.*}}void @copy_load
// CHECK: load
// CHECK: retain
// CHECK: ret void
sil @copy_load : $@convention(thin) (@in Builtin.NativeObject) -> () {
bb0(%0 : $*Builtin.NativeObject):
  load [copy] %0 : $*Builtin.NativeObject
  %1 = tuple()
  return %1 : $()
}

// CHECK-LABEL: define {{.*}}void @trivial_load
// CHECK-NOT: retain
// CHECK: load
// CHECK-NOT: retain
// CHECK: ret void
sil @trivial_load : $@convention(thin) (@in Builtin.Int32) -> () {
bb0(%0 : $*Builtin.Int32):
  load [trivial] %0 : $*Builtin.Int32
  %1 = tuple()
  return %1 : $()
}

// CHECK-LABEL: define {{.*}}void @init_store
// CHECK-NOT: load
// CHECK-NOT: release
// CHECK: store
// CHECK-NOT: load
// CHECK-NOT: release
// CHECK: ret void
sil @init_store : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.NativeObject):
  store %1 to [init] %0 : $*Builtin.NativeObject
  %2 = tuple()
  return %2 : $()
}

// CHECK-LABEL: define {{.*}}void @assign_store
// CHECK: load
// CHECK: store
// CHECK: release
// CHECK: ret void
sil @assign_store : $@convention(thin) (@in Builtin.NativeObject, Builtin.NativeObject) -> () {
bb0(%0 : $*Builtin.NativeObject, %1 : $Builtin.NativeObject):
  store %1 to [assign] %0 : $*Builtin.NativeObject
  %2 = tuple()
  return %2 : $()
}

struct Foo {
  var i: Builtin.Int32
  var b: Builtin.NativeObject
}

sil @assign_store_2 : $@convention(thin) (@in Foo, Foo) -> () {
bb0(%0 : $*Foo, %1 : $Foo):
  %2 = load [copy] %0 : $*Foo
  store %1 to [assign] %0 : $*Foo
  %3 = tuple()
  return %3 : $()
}

// CHECK-LABEL: define {{.*}}void @trivial_store
// CHECK-NOT: load
// CHECK-NOT: release
// CHECK: store
// CHECK-NOT: load
// CHECK-NOT: release
// CHECK: ret void
sil @trivial_store : $@convention(thin) (@in Builtin.Int32, Builtin.Int32) -> () {
bb0(%0 : $*Builtin.Int32, %1 : $Builtin.Int32):
  store %1 to [trivial] %0 : $*Builtin.Int32
  %2 = tuple()
  return %2 : $()
}
