mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
85 lines
3.1 KiB
Plaintext
85 lines
3.1 KiB
Plaintext
// RUN: %target-sil-opt %s -basic-instruction-property-dump -o /dev/null | %FileCheck %s
|
|
|
|
// REQUIRES: asserts
|
|
|
|
import Builtin
|
|
|
|
class X {
|
|
@_hasStorage var a: Builtin.Int32
|
|
@_hasStorage var x: X
|
|
|
|
init()
|
|
func foo()
|
|
}
|
|
|
|
class Y : X {}
|
|
|
|
sil_vtable X {}
|
|
sil_vtable Y {}
|
|
|
|
sil [readnone] @full_apply_site_effects_callee_1 : $@convention(thin) (@owned X) -> ()
|
|
sil [readnone] @full_apply_site_effects_callee_2 : $@convention(thin) (@owned X, @owned X, @owned X) -> ()
|
|
|
|
// CHECK-LABEL: @full_apply_site_effects
|
|
// CHECK: Inst #: 9
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 10
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 11
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 12
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 13
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 14
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 15
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: MayHaveSideEffects
|
|
// CHECK: Release Behavior: MayRelease
|
|
// CHECK: Inst #: 16
|
|
// CHECK: Inst #: 17
|
|
// CHECK: apply
|
|
// CHECK: Mem Behavior: None
|
|
// CHECK: Release Behavior: MayRelease
|
|
sil @full_apply_site_effects : $@convention(thin) (@owned X) -> () {
|
|
bb0(%0 : $X):
|
|
%1 = function_ref @full_apply_site_effects_callee_1 : $@convention(thin) (@owned X) -> ()
|
|
%2 = partial_apply %1(%0) : $@convention(thin) (@owned X) -> ()
|
|
%3 = thin_to_thick_function %1 : $@convention(thin) (@owned X) -> () to $@callee_owned @convention(thick) (@owned X) -> ()
|
|
%4 = function_ref @full_apply_site_effects_callee_2 : $@convention(thin) (@owned X, @owned X, @owned X) -> ()
|
|
%5 = partial_apply %4(%0) : $@convention(thin) (@owned X, @owned X, @owned X) -> ()
|
|
%6 = partial_apply %5(%0) : $@callee_owned @convention(thick) (@owned X, @owned X) -> ()
|
|
%7 = partial_apply %6(%0) : $@callee_owned @convention(thick) (@owned X) -> ()
|
|
%8 = class_method %0 : $X, #X.foo : (X) -> () -> (), $@convention(method) (@guaranteed X) -> ()
|
|
%9 = convert_function %6 : $@callee_owned @convention(thick) (@owned X) -> () to $@callee_owned @convention(thick) (@owned Y) -> ()
|
|
|
|
apply %1(%0) : $@convention(thin) (@owned X) -> ()
|
|
apply %2() : $@callee_owned @convention(thick) () -> ()
|
|
apply %3(%0) : $@callee_owned @convention(thick) (@owned X) -> ()
|
|
|
|
apply %5(%0, %0) : $@callee_owned @convention(thick) (@owned X, @owned X) -> ()
|
|
apply %6(%0) : $@callee_owned @convention(thick) (@owned X) -> ()
|
|
apply %7() : $@callee_owned @convention(thick) () -> ()
|
|
|
|
// Make sure we properly handle full apply sites for which we can not
|
|
// trivially find an absolute referenced function.
|
|
apply %8(%0) : $@convention(method) (@guaranteed X) -> ()
|
|
|
|
%10 = unchecked_ref_cast %0 : $X to $Y
|
|
apply %9(%10) : $@callee_owned @convention(thick) (@owned Y) -> ()
|
|
return undef : $()
|
|
}
|