mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
RefToBridgeObjectInst and BridgeObjectToRefInst are rc identity preserving
rdar://19006443 Swift SVN r23411
This commit is contained in:
@@ -31,6 +31,8 @@ static bool isRCIdentityPreservingCast(ValueKind Kind) {
|
||||
case ValueKind::UncheckedAddrCastInst:
|
||||
case ValueKind::UnconditionalCheckedCastInst:
|
||||
case ValueKind::UncheckedRefBitCastInst:
|
||||
case ValueKind::RefToBridgeObjectInst:
|
||||
case ValueKind::BridgeObjectToRefInst:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
@@ -46,6 +48,8 @@ static bool isUpcastPreservingCast(ValueKind Kind) {
|
||||
case ValueKind::UncheckedRefCastInst:
|
||||
case ValueKind::UncheckedAddrCastInst:
|
||||
case ValueKind::UncheckedRefBitCastInst:
|
||||
case ValueKind::RefToBridgeObjectInst:
|
||||
case ValueKind::BridgeObjectToRefInst:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
||||
@@ -43,6 +43,8 @@ static bool isRCIdentityPreservingCast(ValueKind Kind) {
|
||||
case ValueKind::UncheckedRefBitCastInst:
|
||||
case ValueKind::InitExistentialRefInst:
|
||||
case ValueKind::OpenExistentialRefInst:
|
||||
case ValueKind::RefToBridgeObjectInst:
|
||||
case ValueKind::BridgeObjectToRefInst:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
||||
@@ -419,3 +419,20 @@ bb0(%0 : $C):
|
||||
%3 = tuple()
|
||||
return %3 : $()
|
||||
}
|
||||
|
||||
// CHECK-LABEL: sil @strip_off_bridge_object
|
||||
// CHECK-NOT: strong_retain
|
||||
// CHECK-NOT: strong_release
|
||||
|
||||
sil @strip_off_bridge_object : $@thin (Builtin.BridgeObject, C) -> () {
|
||||
bb0(%0 : $Builtin.BridgeObject, %5 : $C):
|
||||
%1 = bridge_object_to_ref %0 : $Builtin.BridgeObject to $C
|
||||
strong_retain %1 : $C
|
||||
strong_release %0 : $Builtin.BridgeObject
|
||||
%4 = integer_literal $Builtin.Word, 0
|
||||
%2 = ref_to_bridge_object %5 : $C, %4 : $Builtin.Word
|
||||
strong_retain %5 : $C
|
||||
strong_release %2 : $Builtin.BridgeObject
|
||||
%3 = tuple()
|
||||
return %3 : $()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user