| // RUN: %target-sil-opt -guaranteed-arc-opts %s | %FileCheck %s |
| |
| sil_stage raw |
| |
| import Builtin |
| |
| sil @kraken : $@convention(thin) () -> () |
| |
| // CHECK-LABEL: sil [ossa] @copyvalue_test1 : $@convention(thin) (Builtin.NativeObject, Builtin.NativeObject) -> () { |
| // CHECK: bb0([[ARG1:%.*]] : @unowned $Builtin.NativeObject, [[ARG2:%.*]] : @unowned $Builtin.NativeObject): |
| // CHECK-NOT: copy_value [[ARG1]] |
| // CHECK: copy_value [[ARG2]] |
| // CHECK-NOT: destroy_value [[ARG1]] |
| sil [ossa] @copyvalue_test1 : $@convention(thin) (Builtin.NativeObject, Builtin.NativeObject) -> () { |
| bb0(%0 : @unowned $Builtin.NativeObject, %1 : @unowned $Builtin.NativeObject): |
| %2 = copy_value %0 : $Builtin.NativeObject |
| copy_value %1 : $Builtin.NativeObject |
| destroy_value %2 : $Builtin.NativeObject |
| %9999 = tuple() |
| return %9999 : $() |
| } |
| |
| // CHECK-LABEL: sil [ossa] @copyvalue_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> Builtin.NativeObject { |
| // CHECK: bb0([[ARG1:%.*]] : @unowned $Builtin.NativeObject |
| // CHECK-NOT: copy_value |
| // CHECK-NOT: destroy_value |
| // CHECK: return [[ARG1]] |
| sil [ossa] @copyvalue_test2 : $@convention(thin) (Builtin.NativeObject, @in Builtin.Int32) -> Builtin.NativeObject { |
| bb0(%0 : @unowned $Builtin.NativeObject, %1 : $*Builtin.Int32): |
| %2 = copy_value %0 : $Builtin.NativeObject |
| %3 = integer_literal $Builtin.Int32, 0 |
| store %3 to [trivial] %1 : $*Builtin.Int32 |
| destroy_value %0 : $Builtin.NativeObject |
| return %2 : $Builtin.NativeObject |
| } |
| |
| // CHECK-LABEL: sil [ossa] @copyvalue_test3 : $@convention(thin) (Builtin.NativeObject) -> () { |
| // CHECK: copy_value |
| // CHECK: destroy_value |
| sil [ossa] @copyvalue_test3 : $@convention(thin) (Builtin.NativeObject) -> () { |
| bb0(%0 : @unowned $Builtin.NativeObject): |
| copy_value %0 : $Builtin.NativeObject |
| %1 = function_ref @kraken : $@convention(thin) () -> () |
| apply %1() : $@convention(thin) () -> () |
| destroy_value %0 : $Builtin.NativeObject |
| %9999 = tuple() |
| return %9999 : $() |
| } |
| |
| // CHECK-LABEL: sil [ossa] @copyvalue_test4 : $@convention(thin) (Builtin.NativeObject) -> () { |
| // CHECK: destroy_value |
| sil [ossa] @copyvalue_test4 : $@convention(thin) (Builtin.NativeObject) -> () { |
| bb0(%0 : @unowned $Builtin.NativeObject): |
| destroy_value %0 : $Builtin.NativeObject |
| %9999 = tuple() |
| return %9999 : $() |
| } |