// RUN: %target-sil-opt -enable-sil-verify-all %s -raw-sil-inst-lowering | %FileCheck %s

sil_stage raw

import Builtin
import Swift

class SomeClass {}

// CHECK-LABEL: sil [ossa] @non_box_assign_trivial
sil [ossa] @non_box_assign_trivial : $@convention(thin) (@inout Bool, Bool) -> () {
bb0(%0 : $*Bool, %1 : $Bool):
  // This is parsed with having an unknown init kind which is lowered as
  // assign [assign], but since this is trivial it's treated as assign [init].
  //
  // CHECK: store %1 to [trivial] %0 : $*Bool
  assign %1 to %0 : $*Bool

  %9 = tuple ()
  // CHECK: return
  return %9 : $()
}

// CHECK-LABEL: sil [ossa] @non_box_assign
sil [ossa] @non_box_assign : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
  // This is parsed with having an unknown init kind which is lowered as
  // assign [assign].
  //
  // CHECK: store %1 to [assign] %0 : $*SomeClass
  assign %1 to %0 : $*SomeClass

  %9 = tuple ()
  // CHECK: return
  return %9 : $()
}

// CHECK-LABEL: sil [ossa] @non_box_assign_init
sil [ossa] @non_box_assign_init : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
  // Explicitly check that assign [init] is treated as store [init]
  //
  // CHECK: store %1 to [init] %0 : $*SomeClass
  assign %1 to [init] %0 : $*SomeClass

  %9 = tuple ()
  // CHECK: return
  return %9 : $()
}

// CHECK-LABEL: sil [ossa] @non_box_assign_reassign
sil [ossa] @non_box_assign_reassign : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
  // Explicitly check that assign [reassign] is treated as store [assign]
  //
  // CHECK: store %1 to [assign] %0 : $*SomeClass
  assign %1 to [reassign] %0 : $*SomeClass

  %9 = tuple ()
  // CHECK: return
  return %9 : $()
}

// CHECK-LABEL: sil [ossa] @non_box_assign_reinit
sil [ossa] @non_box_assign_reinit : $@convention(thin) (@inout SomeClass, @owned SomeClass) -> () {
bb0(%0 : $*SomeClass, %1 : @owned $SomeClass):
  // Explicitly check that assign [reinit] is treated as load [take], store [init],
  // and dealloc_partial_ref
  //
  // CHECK: [[LOAD:%[0-9]+]] = load [take] %0 : $*SomeClass
  // CHECK-NEXT: store %1 to [init] %0 : $*SomeClass
  // CHECK-NEXT: [[METATYPE:%[0-9]+]] = value_metatype $@thick SomeClass.Type, [[LOAD]] : $SomeClass
  // CHECK-NEXT: dealloc_partial_ref [[LOAD]] : $SomeClass, [[METATYPE]] : $@thick SomeClass.Type
  assign %1 to [reinit] %0 : $*SomeClass

  %9 = tuple ()
  // CHECK: return
  return %9 : $()
}
