blob: f6def68ebf3185d2e2d7c852636bc59f4f871b02 [file] [log] [blame]
// RUN: %target-sil-opt -wmo -enable-sil-verify-all %s -inline -sil-combine -generic-specializer -allocbox-to-stack -copy-forwarding -lower-aggregate-instrs -mem2reg -devirtualizer -late-inline -dead-arg-signature-opt -dce | %FileCheck %s
import Builtin
import Swift
import SwiftShims
internal protocol SomeProtocol : AnyObject {
func foo() -> Int32
}
internal class SomeClass : SomeProtocol {
func foo() -> Int32
}
@inline(never) internal func wrap_foo_cp(a: SomeProtocol) -> Int32
func cp()
internal protocol SomeNoClassProtocol {
func foo() -> Int32
}
internal class SomeNoClass : SomeNoClassProtocol {
func foo() -> Int32
}
@inline(never) internal func wrap_foo_ncp(a: SomeNoClassProtocol) -> Int32
@inline(never) func ncp()
internal protocol SomeClassProtocolComp : AnyObject {
func foo() -> Int32
}
internal protocol SomeOtherClassProtocolComp : AnyObject {
func bar() -> Int32
}
internal class SomeClassComp : SomeClassProtocolComp, SomeOtherClassProtocolComp {
func foo() -> Int32
func bar() -> Int32
}
@inline(never) internal func wrap_foo_bar_cpc(a: SomeClassProtocolComp & SomeOtherClassProtocolComp) -> Int32
func cpc()
internal protocol SomeNoClassProtocolComp {
func foo() -> Int32
}
internal protocol SomeOtherNoClassProtocolComp {
func bar() -> Int32
}
internal class SomeNoClassComp : SomeNoClassProtocolComp, SomeOtherNoClassProtocolComp {
func foo() -> Int32
func bar() -> Int32
}
@inline(never) internal func wrap_no_foo_bar_comp_ncpc(a: SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp) -> Int32
@inline(never) func ncpc()
internal protocol P : AnyObject {
func foo() -> Int32
}
internal class K : P {
func foo() -> Int32
}
internal class KPrime : P {
func foo() -> Int32
}
@inline(never) internal func do_not_optimize_cp(a: P) -> Int32
internal protocol PP : AnyObject {
func foo() -> Int32
}
internal class KK : PP {
func foo() -> Int32
}
internal class KKPrime : PP {
func foo() -> Int32
}
@inline(never) internal func wrap_inout_cp(a: inout PP) -> Int32
@inline(never) func do_not_optimize_inout_cp()
internal protocol PPP {
func foo() -> Int32
}
internal class KKK : PPP {
func foo() -> Int32
}
@inline(never) internal func wrap_inout_ncp(a: inout PPP) -> Int32
@inline(never) func inout_ncp()
internal protocol PPPP {
func foo() -> Int32
}
internal struct SSSS : PPPP {
func foo() -> Int32
}
@inline(never) internal func wrap_struct_inout_ncp(a: inout PPPP) -> Int32
@inline(never) func struct_inout_ncp()
sil hidden @$s21existential_transform9SomeClassC3foos5Int32VyF : $@convention(method) (@guaranteed SomeClass) -> Int32 {
bb0(%0 : $SomeClass):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform9SomeClassC3foos5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform9SomeClassCAA0C8ProtocolA2aDP3foos5Int32VyFTW : $@convention(witness_method: SomeProtocol) (@guaranteed SomeClass) -> Int32 {
bb0(%0 : $SomeClass):
%1 = class_method %0 : $SomeClass, #SomeClass.foo!1 : (SomeClass) -> () -> Int32, $@convention(method) (@guaranteed SomeClass) -> Int32
%2 = apply %1(%0) : $@convention(method) (@guaranteed SomeClass) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform9SomeClassCAA0C8ProtocolA2aDP3foos5Int32VyFTW'
sil hidden [signature_optimized_thunk] [always_inline] @$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tF : $@convention(thin) (@guaranteed SomeProtocol) -> Int32 {
bb0(%0 : $SomeProtocol):
%1 = function_ref @$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32
%2 = open_existential_ref %0 : $SomeProtocol to $@opened("CC97E160-AC7C-11E8-B742-D0817AD4059B") SomeProtocol
%3 = apply %1<@opened("CC97E160-AC7C-11E8-B742-D0817AD4059B") SomeProtocol>(%2) : $@convention(thin) _0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tF'
// CHECK-LABEL: sil hidden @$s21existential_transform2cpyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_ref $SomeClass
// CHECK: debug_value %0 : $SomeClass, let, name "self", argno 1
// CHECK: %2 = function_ref @$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n4main0G5ClassC_Tg5 : $@convention(thin) (@guaranteed SomeClass) -> Int32
// CHECK: %3 = apply %2(%0) : $@convention(thin) (@guaranteed SomeClass) -> Int32
// CHECK: strong_release %0 : $SomeClass
// CHECK: %5 = tuple ()
// CHECK: return %5 : $()
// CHECK-LABEL: } // end sil function '$s21existential_transform2cpyyF'
sil hidden @$s21existential_transform2cpyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_ref $SomeClass
debug_value %0 : $SomeClass, let, name "self", argno 1
%2 = init_existential_ref %0 : $SomeClass : $SomeClass, $SomeProtocol
debug_value %2 : $SomeProtocol, let, name "magic1"
%4 = function_ref @$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32
%5 = open_existential_ref %2 : $SomeProtocol to $@opened("CC97E55C-AC7C-11E8-B742-D0817AD4059B") SomeProtocol
%6 = apply %4<@opened("CC97E55C-AC7C-11E8-B742-D0817AD4059B") SomeProtocol>(%5) : $@convention(thin) _0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32
strong_release %0 : $SomeClass
%8 = tuple ()
return %8 : $()
} // end sil function '$s21existential_transform2cpyyF'
sil hidden @$s21existential_transform11SomeNoClassC3foos5Int32VyF : $@convention(method) (@guaranteed SomeNoClass) -> Int32 {
bb0(%0 : $SomeNoClass):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform11SomeNoClassC3foos5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform11SomeNoClassCAA0cdE8ProtocolA2aDP3foos5Int32VyFTW : $@convention(witness_method: SomeNoClassProtocol) (@in_guaranteed SomeNoClass) -> Int32 {
bb0(%0 : $*SomeNoClass):
%1 = load %0 : $*SomeNoClass
%2 = class_method %1 : $SomeNoClass, #SomeNoClass.foo!1 : (SomeNoClass) -> () -> Int32, $@convention(method) (@guaranteed SomeNoClass) -> Int32
%3 = apply %2(%1) : $@convention(method) (@guaranteed SomeNoClass) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform11SomeNoClassCAA0cdE8ProtocolA2aDP3foos5Int32VyFTW'
sil hidden [signature_optimized_thunk] [always_inline] @$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tF : $@convention(thin) (@in_guaranteed SomeNoClassProtocol) -> Int32 {
bb0(%0 : $*SomeNoClassProtocol):
%1 = function_ref @$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32
%2 = open_existential_addr mutable_access %0 : $*SomeNoClassProtocol to $*@opened("CC97FCD6-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocol
%3 = apply %1<@opened("CC97FCD6-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocol>(%2) : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tF'
// CHECK-LABEL: sil hidden [noinline] @$s21existential_transform3ncpyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_ref $SomeNoClass
// CHECK: debug_value %0 : $SomeNoClass, let, name "self", argno 1
// CHECK: %2 = function_ref @$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n4main0ghI0C_Tg5 : $@convention(thin) (@guaranteed SomeNoClass) -> Int32
// CHECK: %3 = apply %2(%0) : $@convention(thin) (@guaranteed SomeNoClass) -> Int32
// CHECK: strong_release %0 : $SomeNoClass
// CHECK: %5 = tuple ()
// CHECK: return %5 : $()
// CHECK-LABEL: } // end sil function '$s21existential_transform3ncpyyF'
sil hidden [noinline] @$s21existential_transform3ncpyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_stack $SomeNoClassProtocol, let, name "magic2"
%1 = alloc_ref $SomeNoClass
debug_value %1 : $SomeNoClass, let, name "self", argno 1
%3 = init_existential_addr %0 : $*SomeNoClassProtocol, $SomeNoClass
store %1 to %3 : $*SomeNoClass
%5 = function_ref @$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32
%6 = open_existential_addr mutable_access %0 : $*SomeNoClassProtocol to $*@opened("CC9800F0-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocol
%7 = apply %5<@opened("CC9800F0-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocol>(%6) : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32
destroy_addr %0 : $*SomeNoClassProtocol
dealloc_stack %0 : $*SomeNoClassProtocol
%10 = tuple ()
return %10 : $()
} // end sil function '$s21existential_transform3ncpyyF'
sil hidden @$s21existential_transform13SomeClassCompC3foos5Int32VyF : $@convention(method) (@guaranteed SomeClassComp) -> Int32 {
bb0(%0 : $SomeClassComp):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform13SomeClassCompC3foos5Int32VyF'
sil hidden @$s21existential_transform13SomeClassCompC3bars5Int32VyF : $@convention(method) (@guaranteed SomeClassComp) -> Int32 {
bb0(%0 : $SomeClassComp):
%1 = integer_literal $Builtin.Int32, 20
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform13SomeClassCompC3bars5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform13SomeClassCompCAA0cd8ProtocolE0A2aDP3foos5Int32VyFTW : $@convention(witness_method: SomeClassProtocolComp) (@guaranteed SomeClassComp) -> Int32 {
bb0(%0 : $SomeClassComp):
%1 = class_method %0 : $SomeClassComp, #SomeClassComp.foo!1 : (SomeClassComp) -> () -> Int32, $@convention(method) (@guaranteed SomeClassComp) -> Int32
%2 = apply %1(%0) : $@convention(method) (@guaranteed SomeClassComp) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform13SomeClassCompCAA0cd8ProtocolE0A2aDP3foos5Int32VyFTW'
sil private [transparent] [thunk] @$s21existential_transform13SomeClassCompCAA0c5Otherd8ProtocolE0A2aDP3bars5Int32VyFTW : $@convention(witness_method: SomeClassProtocolComp) (@guaranteed SomeClassComp) -> Int32 {
bb0(%0 : $SomeClassComp):
%1 = class_method %0 : $SomeClassComp, #SomeClassComp.bar!1 : (SomeClassComp) -> () -> Int32, $@convention(method) (@guaranteed SomeClassComp) -> Int32
%2 = apply %1(%0) : $@convention(method) (@guaranteed SomeClassComp) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform13SomeClassCompCAA0c5Otherd8ProtocolE0A2aDP3bars5Int32VyFTW'
sil hidden [signature_optimized_thunk] [always_inline] @$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tF : $@convention(thin) (@guaranteed SomeClassProtocolComp & SomeOtherClassProtocolComp) -> Int32 {
bb0(%0 : $SomeClassProtocolComp & SomeOtherClassProtocolComp):
%1 = function_ref @$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeClassProtocolComp, τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32
%2 = open_existential_ref %0 : $SomeClassProtocolComp & SomeOtherClassProtocolComp to $@opened("CC981856-AC7C-11E8-B742-D0817AD4059B") SomeClassProtocolComp & SomeOtherClassProtocolComp
%3 = apply %1<@opened("CC981856-AC7C-11E8-B742-D0817AD4059B") SomeClassProtocolComp & SomeOtherClassProtocolComp>(%2) : $@convention(thin) _0_0 where τ_0_0 : SomeClassProtocolComp, τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tF'
// CHECK-LABEL: sil hidden @$s21existential_transform3cpcyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_ref $SomeClassComp
// CHECK: debug_value %0 : $SomeClassComp, let, name "self", argno 1
// CHECK: %2 = function_ref @$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n4main0hiK0C_Tg5 : $@convention(thin) (@guaranteed SomeClassComp) -> Int32
// CHECK: %3 = apply %2(%0) : $@convention(thin) (@guaranteed SomeClassComp) -> Int32
// CHECK: strong_release %0 : $SomeClassComp
// CHECK: %5 = tuple ()
// CHECK: return %5 : $()
// CHECK-LABEL: } // end sil function '$s21existential_transform3cpcyyF'
sil hidden @$s21existential_transform3cpcyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_ref $SomeClassComp
debug_value %0 : $SomeClassComp, let, name "self", argno 1
%2 = init_existential_ref %0 : $SomeClassComp : $SomeClassComp, $SomeClassProtocolComp & SomeOtherClassProtocolComp
debug_value %2 : $SomeClassProtocolComp & SomeOtherClassProtocolComp, let, name "magic3"
%4 = function_ref @$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeClassProtocolComp, τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32
%5 = open_existential_ref %2 : $SomeClassProtocolComp & SomeOtherClassProtocolComp to $@opened("CC981D1A-AC7C-11E8-B742-D0817AD4059B") SomeClassProtocolComp & SomeOtherClassProtocolComp
%6 = apply %4<@opened("CC981D1A-AC7C-11E8-B742-D0817AD4059B") SomeClassProtocolComp & SomeOtherClassProtocolComp>(%5) : $@convention(thin) _0_0 where τ_0_0 : SomeClassProtocolComp, τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32
strong_release %0 : $SomeClassComp
%8 = tuple ()
return %8 : $()
} // end sil function '$s21existential_transform3cpcyyF'
sil hidden @$s21existential_transform15SomeNoClassCompC3foos5Int32VyF : $@convention(method) (@guaranteed SomeNoClassComp) -> Int32 {
bb0(%0 : $SomeNoClassComp):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform15SomeNoClassCompC3foos5Int32VyF'
sil hidden @$s21existential_transform15SomeNoClassCompC3bars5Int32VyF : $@convention(method) (@guaranteed SomeNoClassComp) -> Int32 {
bb0(%0 : $SomeNoClassComp):
%1 = integer_literal $Builtin.Int32, 20
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform15SomeNoClassCompC3bars5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform15SomeNoClassCompCAA0cde8ProtocolF0A2aDP3foos5Int32VyFTW : $@convention(witness_method: SomeNoClassProtocolComp) (@in_guaranteed SomeNoClassComp) -> Int32 {
bb0(%0 : $*SomeNoClassComp):
%1 = load %0 : $*SomeNoClassComp
%2 = class_method %1 : $SomeNoClassComp, #SomeNoClassComp.foo!1 : (SomeNoClassComp) -> () -> Int32, $@convention(method) (@guaranteed SomeNoClassComp) -> Int32
%3 = apply %2(%1) : $@convention(method) (@guaranteed SomeNoClassComp) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform15SomeNoClassCompCAA0cde8ProtocolF0A2aDP3foos5Int32VyFTW'
sil private [transparent] [thunk] @$s21existential_transform15SomeNoClassCompCAA0c5Otherde8ProtocolF0A2aDP3bars5Int32VyFTW : $@convention(witness_method: SomeNoClassProtocolComp) (@in_guaranteed SomeNoClassComp) -> Int32 {
bb0(%0 : $*SomeNoClassComp):
%1 = load %0 : $*SomeNoClassComp
%2 = class_method %1 : $SomeNoClassComp, #SomeNoClassComp.bar!1 : (SomeNoClassComp) -> () -> Int32, $@convention(method) (@guaranteed SomeNoClassComp) -> Int32
%3 = apply %2(%1) : $@convention(method) (@guaranteed SomeNoClassComp) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform15SomeNoClassCompCAA0c5Otherde8ProtocolF0A2aDP3bars5Int32VyFTW'
sil hidden [signature_optimized_thunk] [always_inline] @$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tF : $@convention(thin) (@in_guaranteed SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp) -> Int32 {
bb0(%0 : $*SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp):
%1 = function_ref @$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocolComp, τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
%2 = open_existential_addr mutable_access %0 : $*SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp to $*@opened("CC983642-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp
%3 = apply %1<@opened("CC983642-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp>(%2) : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocolComp, τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tF'
// CHECK-LABEL: sil hidden [noinline] @$s21existential_transform4ncpcyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_ref $SomeNoClassComp
// CHECK: debug_value %0 : $SomeNoClassComp, let, name "self", argno 1
// CHECK: %2 = function_ref @$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n4main0jklN0C_Tg5 : $@convention(thin) (@guaranteed SomeNoClassComp) -> Int32
// CHECK: %3 = apply %2(%0) : $@convention(thin) (@guaranteed SomeNoClassComp) -> Int32
// CHECK: strong_release %0 : $SomeNoClassComp
// CHECK: %5 = tuple ()
// CHECK: return %5 : $()
// CHECK-LABEL: } // end sil function '$s21existential_transform4ncpcyyF'
sil hidden [noinline] @$s21existential_transform4ncpcyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_stack $SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp, let, name "magic4"
%1 = alloc_ref $SomeNoClassComp
debug_value %1 : $SomeNoClassComp, let, name "self", argno 1
%3 = init_existential_addr %0 : $*SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp, $SomeNoClassComp
store %1 to %3 : $*SomeNoClassComp
%5 = function_ref @$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocolComp, τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
%6 = open_existential_addr mutable_access %0 : $*SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp to $*@opened("CC983AFC-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp
%7 = apply %5<@opened("CC983AFC-AC7C-11E8-B742-D0817AD4059B") SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp>(%6) : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocolComp, τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
destroy_addr %0 : $*SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp
dealloc_stack %0 : $*SomeNoClassProtocolComp & SomeOtherNoClassProtocolComp
%10 = tuple ()
return %10 : $()
} // end sil function '$s21existential_transform4ncpcyyF'
sil hidden @$s21existential_transform1KC3foos5Int32VyF : $@convention(method) (@guaranteed K) -> Int32 {
bb0(%0 : $K):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform1KC3foos5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform1KCAA1PA2aDP3foos5Int32VyFTW : $@convention(witness_method: P) (@guaranteed K) -> Int32 {
bb0(%0 : $K):
%1 = class_method %0 : $K, #K.foo!1 : (K) -> () -> Int32, $@convention(method) (@guaranteed K) -> Int32
%2 = apply %1(%0) : $@convention(method) (@guaranteed K) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform1KCAA1PA2aDP3foos5Int32VyFTW'
// CHECK-LABEL: sil hidden [noinline] @$s21existential_transform18do_not_optimize_cp1as5Int32VAA1P_p_tF : $@convention(thin) (@guaranteed P) -> Int32 {
// CHECK: bb0(%0 : $P):
// CHECK: debug_value %0 : $P, let, name "a", argno 1
// CHECK: %2 = open_existential_ref %0 : $P to $@opened("{{.*}}") P
// CHECK: %3 = witness_method $@opened("{{.*}}") P, #P.foo!1 : <Self where Self : P> (Self) -> () -> Int32, %2 : $@opened("{{.*}}") P : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@guaranteed τ_0_0) -> Int32
// CHECK: %4 = apply %3<@opened("{{.*}}") P>(%2) : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@guaranteed τ_0_0) -> Int32
// CHECK: return %4 : $Int32
// CHECK-LABEL: } // end sil function '$s21existential_transform18do_not_optimize_cp1as5Int32VAA1P_p_tF'
sil hidden [noinline] @$s21existential_transform18do_not_optimize_cp1as5Int32VAA1P_p_tF : $@convention(thin) (@guaranteed P) -> Int32 {
bb0(%0 : $P):
debug_value %0 : $P, let, name "a", argno 1
%2 = open_existential_ref %0 : $P to $@opened("CC9697D8-AC7C-11E8-B742-D0817AD4059B") P
%3 = witness_method $@opened("CC9697D8-AC7C-11E8-B742-D0817AD4059B") P, #P.foo!1 : <Self where Self : P> (Self) -> () -> Int32, %2 : $@opened("CC9697D8-AC7C-11E8-B742-D0817AD4059B") P : $@convention(witness_method: P) <τ_0_0 where τ_0_0 : P> (@guaranteed τ_0_0) -> Int32
%4 = apply %3<@opened("CC9697D8-AC7C-11E8-B742-D0817AD4059B") P>(%2) : $@convention(witness_method: P) _0_0 where τ_0_0 : P> (@guaranteed τ_0_0) -> Int32
return %4 : $Int32
} // end sil function '$s21existential_transform18do_not_optimize_cp1as5Int32VAA1P_p_tF'
sil hidden @$s21existential_transform2KKC3foos5Int32VyF : $@convention(method) (@guaranteed KK) -> Int32 {
bb0(%0 : $KK):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform2KKC3foos5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform2KKCAA2PPA2aDP3foos5Int32VyFTW : $@convention(witness_method: PP) (@guaranteed KK) -> Int32 {
bb0(%0 : $KK):
%1 = class_method %0 : $KK, #KK.foo!1 : (KK) -> () -> Int32, $@convention(method) (@guaranteed KK) -> Int32
%2 = apply %1(%0) : $@convention(method) (@guaranteed KK) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform2KKCAA2PPA2aDP3foos5Int32VyFTW'
sil hidden [noinline] @$s21existential_transform13wrap_inout_cp1as5Int32VAA2PP_pz_tF : $@convention(thin) (@inout PP) -> Int32 {
bb0(%0 : $*PP):
debug_value_addr %0 : $*PP, var, name "a", argno 1
%2 = load %0 : $*PP
%3 = open_existential_ref %2 : $PP to $@opened("CC969B02-AC7C-11E8-B742-D0817AD4059B") PP
%4 = witness_method $@opened("CC969B02-AC7C-11E8-B742-D0817AD4059B") PP, #PP.foo!1 : <Self where Self : PP> (Self) -> () -> Int32, %3 : $@opened("CC969B02-AC7C-11E8-B742-D0817AD4059B") PP : $@convention(witness_method: PP) <τ_0_0 where τ_0_0 : PP> (@guaranteed τ_0_0) -> Int32
strong_retain %2 : $PP
%6 = apply %4<@opened("CC969B02-AC7C-11E8-B742-D0817AD4059B") PP>(%3) : $@convention(witness_method: PP) _0_0 where τ_0_0 : PP> (@guaranteed τ_0_0) -> Int32
strong_release %2 : $PP
return %6 : $Int32
} // end sil function '$s21existential_transform13wrap_inout_cp1as5Int32VAA2PP_pz_tF'
// CHECK-LABEL: sil hidden [noinline] @$s21existential_transform24do_not_optimize_inout_cpyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_stack $PP, var, name "magic5"
// CHECK: %1 = alloc_ref $KK
// CHECK: debug_value %1 : $KK, let, name "self", argno 1
// CHECK: %3 = init_existential_ref %1 : $KK : $KK, $PP
// CHECK: store %3 to %0 : $*PP
// CHECK: %5 = function_ref @$s21existential_transform13wrap_inout_cp1as5Int32VAA2PP_pz_tF : $@convention(thin) (@inout PP) -> Int32
// CHECK: %6 = apply %5(%0) : $@convention(thin) (@inout PP) -> Int32
// CHECK: %7 = load %0 : $*PP
// CHECK: strong_release %7 : $PP
// CHECK: dealloc_stack %0 : $*PP
// CHECK: %10 = tuple ()
// CHECK: return %10 : $()
// CHECK: } // end sil function '$s21existential_transform24do_not_optimize_inout_cpyyF'
sil hidden [noinline] @$s21existential_transform24do_not_optimize_inout_cpyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_stack $PP, var, name "magic5"
%1 = alloc_ref $KK
debug_value %1 : $KK, let, name "self", argno 1
%3 = init_existential_ref %1 : $KK : $KK, $PP
store %3 to %0 : $*PP
%5 = function_ref @$s21existential_transform13wrap_inout_cp1as5Int32VAA2PP_pz_tF : $@convention(thin) (@inout PP) -> Int32
%6 = apply %5(%0) : $@convention(thin) (@inout PP) -> Int32
%7 = load %0 : $*PP
strong_release %7 : $PP
dealloc_stack %0 : $*PP
%10 = tuple ()
return %10 : $()
} // end sil function '$s21existential_transform24do_not_optimize_inout_cpyyF'
sil hidden @$s21existential_transform3KKKC3foos5Int32VyF : $@convention(method) (@guaranteed KKK) -> Int32 {
bb0(%0 : $KKK):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform3KKKC3foos5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform3KKKCAA3PPPA2aDP3foos5Int32VyFTW : $@convention(witness_method: PPP) (@in_guaranteed KKK) -> Int32 {
bb0(%0 : $*KKK):
%1 = load %0 : $*KKK
%2 = class_method %1 : $KKK, #KKK.foo!1 : (KKK) -> () -> Int32, $@convention(method) (@guaranteed KKK) -> Int32
%3 = apply %2(%1) : $@convention(method) (@guaranteed KKK) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform3KKKCAA3PPPA2aDP3foos5Int32VyFTW'
sil hidden [signature_optimized_thunk] [always_inline] @$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tF : $@convention(thin) (@inout PPP) -> Int32 {
bb0(%0 : $*PPP):
%1 = function_ref @$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : PPP> (@inout τ_0_0) -> Int32
%2 = open_existential_addr mutable_access %0 : $*PPP to $*@opened("CC986BDA-AC7C-11E8-B742-D0817AD4059B") PPP
%3 = apply %1<@opened("CC986BDA-AC7C-11E8-B742-D0817AD4059B") PPP>(%2) : $@convention(thin) _0_0 where τ_0_0 : PPP> (@inout τ_0_0) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tF'
// CHECK-LABEL: sil hidden [noinline] @$s21existential_transform9inout_ncpyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_stack $KKK, var, name "magic6"
// CHECK: %1 = alloc_ref $KKK
// CHECK: debug_value %1 : $KKK, let, name "self", argno 1
// CHECK: store %1 to %0 : $*KKK
// CHECK: %4 = function_ref @$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n4main3KKKC_Tg5 : $@convention(thin) (@inout KKK) -> Int32
// CHECK: %5 = apply %4(%0) : $@convention(thin) (@inout KKK) -> Int32
// CHECK: %6 = load %0 : $*KKK
// CHECK: strong_release %6 : $KKK
// CHECK: dealloc_stack %0 : $*KKK
// CHECK: %9 = tuple ()
// CHECK: return %9 : $()
// CHECK-LABEL: } // end sil function '$s21existential_transform9inout_ncpyyF'
sil hidden [noinline] @$s21existential_transform9inout_ncpyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_stack $PPP, var, name "magic6"
%1 = alloc_ref $KKK
debug_value %1 : $KKK, let, name "self", argno 1
%3 = init_existential_addr %0 : $*PPP, $KKK
store %1 to %3 : $*KKK
%5 = function_ref @$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : PPP> (@inout τ_0_0) -> Int32
%6 = open_existential_addr mutable_access %0 : $*PPP to $*@opened("CC986F86-AC7C-11E8-B742-D0817AD4059B") PPP
%7 = apply %5<@opened("CC986F86-AC7C-11E8-B742-D0817AD4059B") PPP>(%6) : $@convention(thin) _0_0 where τ_0_0 : PPP> (@inout τ_0_0) -> Int32
destroy_addr %0 : $*PPP
dealloc_stack %0 : $*PPP
%10 = tuple ()
return %10 : $()
} // end sil function '$s21existential_transform9inout_ncpyyF'
sil hidden @$s21existential_transform4SSSSV3foos5Int32VyF : $@convention(method) (SSSS) -> Int32 {
bb0(%0 : $SSSS):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform4SSSSV3foos5Int32VyF'
sil private [transparent] [thunk] @$s21existential_transform4SSSSVAA4PPPPA2aDP3foos5Int32VyFTW : $@convention(witness_method: PPPP) (@in_guaranteed SSSS) -> Int32 {
bb0(%0 : $*SSSS):
%1 = integer_literal $Builtin.Int32, 10
%2 = struct $Int32 (%1 : $Builtin.Int32)
return %2 : $Int32
} // end sil function '$s21existential_transform4SSSSVAA4PPPPA2aDP3foos5Int32VyFTW'
sil hidden [signature_optimized_thunk] [always_inline] @$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tF : $@convention(thin) (@inout PPPP) -> Int32 {
bb0(%0 : $*PPPP):
%1 = function_ref @$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : PPPP> (@inout τ_0_0) -> Int32
%2 = open_existential_addr mutable_access %0 : $*PPPP to $*@opened("CC98A1E0-AC7C-11E8-B742-D0817AD4059B") PPPP
%3 = apply %1<@opened("CC98A1E0-AC7C-11E8-B742-D0817AD4059B") PPPP>(%2) : $@convention(thin) _0_0 where τ_0_0 : PPPP> (@inout τ_0_0) -> Int32
return %3 : $Int32
} // end sil function '$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tF'
// CHECK-LABEL: sil hidden [noinline] @$s21existential_transform16struct_inout_ncpyyF : $@convention(thin) () -> () {
// CHECK: bb0:
// CHECK: %0 = alloc_stack $SSSS, var, name "magic7"
// CHECK: %1 = struct $SSSS ()
// CHECK: store %1 to %0 : $*SSSS
// CHECK: %3 = function_ref @$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n4main4SSSSV_Tg5 : $@convention(thin) (@inout SSSS) -> Int32
// CHECK: %4 = apply %3(%0) : $@convention(thin) (@inout SSSS) -> Int32
// CHECK: dealloc_stack %0 : $*SSSS
// CHECK: %6 = tuple ()
// CHECK: return %6 : $()
// CHECK-LABEL: } // end sil function '$s21existential_transform16struct_inout_ncpyyF'
sil hidden [noinline] @$s21existential_transform16struct_inout_ncpyyF : $@convention(thin) () -> () {
bb0:
%0 = alloc_stack $PPPP, var, name "magic7"
%1 = struct $SSSS ()
%2 = init_existential_addr %0 : $*PPPP, $SSSS
store %1 to %2 : $*SSSS
%4 = function_ref @$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : PPPP> (@inout τ_0_0) -> Int32
%5 = open_existential_addr mutable_access %0 : $*PPPP to $*@opened("CC98A5E6-AC7C-11E8-B742-D0817AD4059B") PPPP
%6 = apply %4<@opened("CC98A5E6-AC7C-11E8-B742-D0817AD4059B") PPPP>(%5) : $@convention(thin) _0_0 where τ_0_0 : PPPP> (@inout τ_0_0) -> Int32
destroy_addr %0 : $*PPPP
dealloc_stack %0 : $*PPPP
%9 = tuple ()
return %9 : $()
} // end sil function '$s21existential_transform16struct_inout_ncpyyF'
// CHECK-LABEL: sil shared [noinline] @$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n4main0G5ClassC_Tg5 : $@convention(thin) (@guaranteed SomeClass) -> Int32 {
// CHECK: bb0(%0 : $SomeClass):
// CHECK: %1 = integer_literal $Builtin.Int32, 10
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2 : $Int32
// CHECK-LABEL: } // end sil function '$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n4main0G5ClassC_Tg5'
sil shared [noinline] @$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32 {
bb0(%0 : $τ_0_0):
%1 = witness_method $τ_0_0, #SomeProtocol.foo!1 : <Self where Self : SomeProtocol> (Self) -> () -> Int32 : $@convention(witness_method: SomeProtocol) <τ_0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32
%2 = apply %1_0_0>(%0) : $@convention(witness_method: SomeProtocol) _0_0 where τ_0_0 : SomeProtocol> (@guaranteed τ_0_0) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform11wrap_foo_cp1as5Int32VAA12SomeProtocol_p_tFTf4e_n'
// CHECK-LABEL: sil shared [noinline] @$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n4main0ghI0C_Tg5 : $@convention(thin) (@guaranteed SomeNoClass) -> Int32 {
// CHECK: bb0(%0 : $SomeNoClass):
// CHECK: %1 = integer_literal $Builtin.Int32, 10
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2 : $Int32
// CHECK-LABEL: } // end sil function '$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n4main0ghI0C_Tg5'
sil shared [noinline] @$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32 {
bb0(%0 : $_0_0):
%1 = witness_method $τ_0_0, #SomeNoClassProtocol.foo!1 : <Self where Self : SomeNoClassProtocol> (Self) -> () -> Int32 : $@convention(witness_method: SomeNoClassProtocol) <τ_0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32
%2 = apply %1_0_0>(%0) : $@convention(witness_method: SomeNoClassProtocol) _0_0 where τ_0_0 : SomeNoClassProtocol> (@in_guaranteed τ_0_0) -> Int32
return %2 : $Int32
} // end sil function '$s21existential_transform12wrap_foo_ncp1as5Int32VAA19SomeNoClassProtocol_p_tFTf4e_n'
// CHECK-LABEL: sil shared [noinline] @$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n4main0hiK0C_Tg5 : $@convention(thin) (@guaranteed SomeClassComp) -> Int32 {
// CHECK: bb0(%0 : $SomeClassComp):
// CHECK: %1 = integer_literal $Builtin.Int32, 10
// CHECK: %2 = integer_literal $Builtin.Int32, 20
// CHECK: %3 = integer_literal $Builtin.Int1, -1
// CHECK: %4 = builtin "sadd_with_overflow_Int32"(%1 : $Builtin.Int32, %2 : $Builtin.Int32, %3 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
// CHECK: %5 = tuple_extract %4 : $(Builtin.Int32, Builtin.Int1), 0
// CHECK: %6 = tuple_extract %4 : $(Builtin.Int32, Builtin.Int1), 1
// CHECK: cond_fail %6 : $Builtin.Int1
// CHECK: %8 = struct $Int32 (%5 : $Builtin.Int32)
// CHECK: return %8 : $Int32
// CHECK: } // end sil function '$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n4main0hiK0C_Tg5'
sil shared [noinline] @$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeClassProtocolComp, τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32 {
bb0(%0 : $τ_0_0):
%1 = witness_method $τ_0_0, #SomeClassProtocolComp.foo!1 : <Self where Self : SomeClassProtocolComp> (Self) -> () -> Int32 : $@convention(witness_method: SomeClassProtocolComp) <τ_0_0 where τ_0_0 : SomeClassProtocolComp> (@guaranteed τ_0_0) -> Int32
%2 = apply %1_0_0>(%0) : $@convention(witness_method: SomeClassProtocolComp) _0_0 where τ_0_0 : SomeClassProtocolComp> (@guaranteed τ_0_0) -> Int32
%3 = witness_method $τ_0_0, #SomeOtherClassProtocolComp.bar!1 : <Self where Self : SomeOtherClassProtocolComp> (Self) -> () -> Int32 : $@convention(witness_method: SomeOtherClassProtocolComp) <τ_0_0 where τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32
%4 = apply %3_0_0>(%0) : $@convention(witness_method: SomeOtherClassProtocolComp) _0_0 where τ_0_0 : SomeOtherClassProtocolComp> (@guaranteed τ_0_0) -> Int32
%5 = struct_extract %2 : $Int32, #Int32._value
%6 = struct_extract %4 : $Int32, #Int32._value
%7 = integer_literal $Builtin.Int1, -1
%8 = builtin "sadd_with_overflow_Int32"(%5 : $Builtin.Int32, %6 : $Builtin.Int32, %7 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
%9 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 0
%10 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 1
cond_fail %10 : $Builtin.Int1
%12 = struct $Int32 (%9 : $Builtin.Int32)
return %12 : $Int32
} // end sil function '$s21existential_transform16wrap_foo_bar_cpc1as5Int32VAA21SomeClassProtocolComp_AA0h5OtherijK0p_tFTf4e_n'
// CHECK-LABEL: sil shared [noinline] @$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n4main0jklN0C_Tg5 : $@convention(thin) (@guaranteed SomeNoClassComp) -> Int32 {
// CHECK: bb0(%0 : $SomeNoClassComp):
// CHECK: %1 = integer_literal $Builtin.Int32, 10
// CHECK: %2 = integer_literal $Builtin.Int32, 20
// CHECK: %3 = integer_literal $Builtin.Int1, -1
// CHECK: %4 = builtin "sadd_with_overflow_Int32"(%1 : $Builtin.Int32, %2 : $Builtin.Int32, %3 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
// CHECK: %5 = tuple_extract %4 : $(Builtin.Int32, Builtin.Int1), 0
// CHECK: %6 = tuple_extract %4 : $(Builtin.Int32, Builtin.Int1), 1
// CHECK: cond_fail %6 : $Builtin.Int1
// CHECK: %8 = struct $Int32 (%5 : $Builtin.Int32)
// CHECK: return %8 : $Int32
// CHECK-LABEL: } // end sil function '$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n4main0jklN0C_Tg5'
sil shared [noinline] @$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : SomeNoClassProtocolComp, τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32 {
bb0(%0 : $_0_0):
%1 = witness_method $τ_0_0, #SomeNoClassProtocolComp.foo!1 : <Self where Self : SomeNoClassProtocolComp> (Self) -> () -> Int32 : $@convention(witness_method: SomeNoClassProtocolComp) <τ_0_0 where τ_0_0 : SomeNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
%2 = apply %1_0_0>(%0) : $@convention(witness_method: SomeNoClassProtocolComp) _0_0 where τ_0_0 : SomeNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
%3 = witness_method $τ_0_0, #SomeOtherNoClassProtocolComp.bar!1 : <Self where Self : SomeOtherNoClassProtocolComp> (Self) -> () -> Int32 : $@convention(witness_method: SomeOtherNoClassProtocolComp) <τ_0_0 where τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
%4 = apply %3_0_0>(%0) : $@convention(witness_method: SomeOtherNoClassProtocolComp) _0_0 where τ_0_0 : SomeOtherNoClassProtocolComp> (@in_guaranteed τ_0_0) -> Int32
%5 = struct_extract %2 : $Int32, #Int32._value
%6 = struct_extract %4 : $Int32, #Int32._value
%7 = integer_literal $Builtin.Int1, -1
%8 = builtin "sadd_with_overflow_Int32"(%5 : $Builtin.Int32, %6 : $Builtin.Int32, %7 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
%9 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 0
%10 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 1
cond_fail %10 : $Builtin.Int1
%12 = struct $Int32 (%9 : $Builtin.Int32)
return %12 : $Int32
} // end sil function '$s21existential_transform25wrap_no_foo_bar_comp_ncpc1as5Int32VAA23SomeNoClassProtocolComp_AA0j5OtherklmN0p_tFTf4e_n'
// CHECK-LABEL: sil shared [noinline] @$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n4main3KKKC_Tg5 : $@convention(thin) (@inout KKK) -> Int32 {
// CHECK: bb0(%0 : $*KKK):
// CHECK: %1 = integer_literal $Builtin.Int32, 10
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2 : $Int32
// CHECK-LABEL: } // end sil function '$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n4main3KKKC_Tg5'
sil shared [noinline] @$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : PPP> (@inout τ_0_0) -> Int32 {
bb0(%0 : $_0_0):
%1 = alloc_stack $τ_0_0
copy_addr [take] %0 to [initialization] %1 : $_0_0
%3 = witness_method $τ_0_0, #PPP.foo!1 : <Self where Self : PPP> (Self) -> () -> Int32 : $@convention(witness_method: PPP) <τ_0_0 where τ_0_0 : PPP> (@in_guaranteed τ_0_0) -> Int32
%4 = apply %3_0_0>(%1) : $@convention(witness_method: PPP) _0_0 where τ_0_0 : PPP> (@in_guaranteed τ_0_0) -> Int32
dealloc_stack %1 : $_0_0
return %4 : $Int32
} // end sil function '$s21existential_transform14wrap_inout_ncp1as5Int32VAA3PPP_pz_tFTf4e_n'
// CHECK-LABEL: sil shared [noinline] @$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n4main4SSSSV_Tg5 : $@convention(thin) (@inout SSSS) -> Int32 {
// CHECK: bb0(%0 : $*SSSS):
// CHECK: %1 = integer_literal $Builtin.Int32, 10
// CHECK: %2 = struct $Int32 (%1 : $Builtin.Int32)
// CHECK: return %2 : $Int32
// CHECK-LABEL: } // end sil function '$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n4main4SSSSV_Tg5'
sil shared [noinline] @$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n : $@convention(thin) _0_0 where τ_0_0 : PPPP> (@inout τ_0_0) -> Int32 {
bb0(%0 : $_0_0):
%1 = alloc_stack $τ_0_0
copy_addr [take] %0 to [initialization] %1 : $_0_0
%3 = witness_method $τ_0_0, #PPPP.foo!1 : <Self where Self : PPPP> (Self) -> () -> Int32 : $@convention(witness_method: PPPP) <τ_0_0 where τ_0_0 : PPPP> (@in_guaranteed τ_0_0) -> Int32
%4 = apply %3_0_0>(%1) : $@convention(witness_method: PPPP) _0_0 where τ_0_0 : PPPP> (@in_guaranteed τ_0_0) -> Int32
dealloc_stack %1 : $_0_0
return %4 : $Int32
} // end sil function '$s21existential_transform21wrap_struct_inout_ncp1as5Int32VAA4PPPP_pz_tFTf4e_n'
sil_vtable SomeClass {
#SomeClass.foo!1: (SomeClass) -> () -> Int32 : @$s21existential_transform9SomeClassC3foos5Int32VyF // SomeClass.foo()
}
sil_vtable SomeNoClass {
#SomeNoClass.foo!1: (SomeNoClass) -> () -> Int32 : @$s21existential_transform11SomeNoClassC3foos5Int32VyF // SomeNoClass.foo()
}
sil_vtable SomeClassComp {
#SomeClassComp.foo!1: (SomeClassComp) -> () -> Int32 : @$s21existential_transform13SomeClassCompC3foos5Int32VyF // SomeClassComp.foo()
#SomeClassComp.bar!1: (SomeClassComp) -> () -> Int32 : @$s21existential_transform13SomeClassCompC3bars5Int32VyF // SomeClassComp.bar()
}
sil_vtable SomeNoClassComp {
#SomeNoClassComp.foo!1: (SomeNoClassComp) -> () -> Int32 : @$s21existential_transform15SomeNoClassCompC3foos5Int32VyF // SomeNoClassComp.foo()
#SomeNoClassComp.bar!1: (SomeNoClassComp) -> () -> Int32 : @$s21existential_transform15SomeNoClassCompC3bars5Int32VyF // SomeNoClassComp.bar()
}
sil_vtable K {
#K.foo!1: (K) -> () -> Int32 : @$s21existential_transform1KC3foos5Int32VyF // K.foo()
}
sil_vtable KK {
#KK.foo!1: (KK) -> () -> Int32 : @$s21existential_transform2KKC3foos5Int32VyF // KK.foo()
}
sil_vtable KKK {
#KKK.foo!1: (KKK) -> () -> Int32 : @$s21existential_transform3KKKC3foos5Int32VyF // KKK.foo()
}
sil_witness_table hidden SomeClass: SomeProtocol module existential_transform {
method #SomeProtocol.foo!1: <Self where Self : SomeProtocol> (Self) -> () -> Int32 : @$s21existential_transform9SomeClassCAA0C8ProtocolA2aDP3foos5Int32VyFTW // protocol witness for SomeProtocol.foo() in conformance SomeClass
}
sil_witness_table hidden SomeNoClass: SomeNoClassProtocol module existential_transform {
method #SomeNoClassProtocol.foo!1: <Self where Self : SomeNoClassProtocol> (Self) -> () -> Int32 : @$s21existential_transform11SomeNoClassCAA0cdE8ProtocolA2aDP3foos5Int32VyFTW // protocol witness for SomeNoClassProtocol.foo() in conformance SomeNoClass
}
sil_witness_table hidden SomeClassComp: SomeClassProtocolComp module existential_transform {
method #SomeClassProtocolComp.foo!1: <Self where Self : SomeClassProtocolComp> (Self) -> () -> Int32 : @$s21existential_transform13SomeClassCompCAA0cd8ProtocolE0A2aDP3foos5Int32VyFTW // protocol witness for SomeClassProtocolComp.foo() in conformance SomeClassComp
}
sil_witness_table hidden SomeClassComp: SomeOtherClassProtocolComp module existential_transform {
method #SomeOtherClassProtocolComp.bar!1: <Self where Self : SomeOtherClassProtocolComp> (Self) -> () -> Int32 : @$s21existential_transform13SomeClassCompCAA0c5Otherd8ProtocolE0A2aDP3bars5Int32VyFTW // protocol witness for SomeOtherClassProtocolComp.bar() in conformance SomeClassComp
}
sil_witness_table hidden SomeNoClassComp: SomeNoClassProtocolComp module existential_transform {
method #SomeNoClassProtocolComp.foo!1: <Self where Self : SomeNoClassProtocolComp> (Self) -> () -> Int32 : @$s21existential_transform15SomeNoClassCompCAA0cde8ProtocolF0A2aDP3foos5Int32VyFTW // protocol witness for SomeNoClassProtocolComp.foo() in conformance SomeNoClassComp
}
sil_witness_table hidden SomeNoClassComp: SomeOtherNoClassProtocolComp module existential_transform {
method #SomeOtherNoClassProtocolComp.bar!1: <Self where Self : SomeOtherNoClassProtocolComp> (Self) -> () -> Int32 : @$s21existential_transform15SomeNoClassCompCAA0c5Otherde8ProtocolF0A2aDP3bars5Int32VyFTW // protocol witness for SomeOtherNoClassProtocolComp.bar() in conformance SomeNoClassComp
}
sil_witness_table hidden K: P module existential_transform {
method #P.foo!1: <Self where Self : P> (Self) -> () -> Int32 : @$s21existential_transform1KCAA1PA2aDP3foos5Int32VyFTW // protocol witness for P.foo() in conformance K
}
sil_witness_table hidden KK: PP module existential_transform {
method #PP.foo!1: <Self where Self : PP> (Self) -> () -> Int32 : @$s21existential_transform2KKCAA2PPA2aDP3foos5Int32VyFTW // protocol witness for PP.foo() in conformance KK
}
sil_witness_table hidden KKK: PPP module existential_transform {
method #PPP.foo!1: <Self where Self : PPP> (Self) -> () -> Int32 : @$s21existential_transform3KKKCAA3PPPA2aDP3foos5Int32VyFTW // protocol witness for PPP.foo() in conformance KKK
}
sil_witness_table hidden SSSS: PPPP module existential_transform {
method #PPPP.foo!1: <Self where Self : PPPP> (Self) -> () -> Int32 : @$s21existential_transform4SSSSVAA4PPPPA2aDP3foos5Int32VyFTW // protocol witness for PPPP.foo() in conformance SSSS
}