blob: 29ad7874ac86a24dee8bc8cbef9efc569fa0acc9 [file] [log] [blame]
// RUN: %target-sil-opt -enable-sil-verify-all %s -sil-combine | %FileCheck %s
sil_stage canonical
import Builtin
import Swift
//CHECK: sil @a_function1
//CHECK-NOT: partial_apply
//CHECK: return
sil @a_function1 : $@convention(thin) (Int64) -> () {
bb0(%0 : $Int64):
%1 = function_ref @our_closure_function1 : $@convention(thin) (Int64) -> Bool // user: %2
%2 = partial_apply %1(%0) : $@convention(thin) (Int64) -> Bool // user: %3
strong_release %2 : $@callee_owned () -> Bool // id: %3
%4 = tuple () // user: %5
return %4 : $() // id: %5
}
class K {
}
//CHECK: sil @a_function2
// The release_value of $K is optimized to a strong_release.
sil @a_function2 : $@convention(thin) (@owned K) -> () {
bb0(%0 : $K):
%1 = alloc_ref $K
%2 = function_ref @our_closure_function2 : $@convention(thin) (@owned K) -> Bool // user: %2
//CHECK-NOT: partial_apply
%3 = partial_apply %2(%0) : $@convention(thin) (@owned K) -> Bool // user: %3
//CHECK: br
br bb1
bb1:
//CHECK: strong_release
strong_release %3 : $@callee_owned () -> Bool // id: %3
%5 = tuple () // user: %5
//CHECK: return
return %5 : $() // id: %5
}
sil @our_closure_function2 : $@convention(thin) (@owned K) -> Bool
sil @our_closure_function1 : $@convention(thin) (Int64) -> Bool