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