blob: 833d8a2e08514742a7c27f229411accde8d77ff8 [file] [log] [blame]
// 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 : $()
}