| // 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 : $() |
| } |