@@ -2018,14 +2018,14 @@ bb0(%0 : @owned $Builtin.NativeObject, %1 : $Builtin.RawPointer):
2018
2018
return %6 : $(B, Optional<Builtin.Word>)
2019
2019
}
2020
2020
2021
- // We do not suport the non-trivial version of this in OSSA today due to issues around unowned ownership.
2022
- //
2023
- // CHECK-LABEL: sil [ossa] @bitwise_combines : $@convention(thin) (@owned Builtin.NativeObject, Builtin.RawPointer) -> @owned (Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>) {
2024
- // XHECK: bb0(
2025
- // XHECK -NEXT: unchecked_bitwise_cast
2026
- // XHECK-NEXT: unchecked_trivial_bit_cast
2027
- // XHECK-NEXT: unchecked_bitwise_cast
2028
- sil [ossa] @bitwise_combines : $@convention(thin) (@owned Builtin.NativeObject, Builtin.RawPointer) -> @owned (Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>) {
2021
+ // CHECK-LABEL: sil [ossa] @bitwise_combines_owned : $@convention(thin) (@owned Builtin.NativeObject, Builtin.RawPointer) -> @owned (Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>) {
2022
+ // CHECK: bb0(
2023
+ // CHECK-NEXT: unchecked_bitwise_cast
2024
+ // CHECK-NEXT: unchecked_trivial_bit_cast
2025
+ // CHECK -NEXT: unchecked_ref_cast
2026
+ // CHECK-NOT: unchecked_bitwise_cast
2027
+ // CHECK: } // end sil function 'bitwise_combines_owned'
2028
+ sil [ossa] @bitwise_combines_owned : $@convention(thin) (@owned Builtin.NativeObject, Builtin.RawPointer) -> @owned (Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>) {
2029
2029
bb0(%0 : @owned $Builtin.NativeObject, %1 : $Builtin.RawPointer):
2030
2030
// combine
2031
2031
%2 = unchecked_bitwise_cast %1 : $Builtin.RawPointer to $Builtin.Word
@@ -2044,6 +2044,30 @@ bb0(%0 : @owned $Builtin.NativeObject, %1 : $Builtin.RawPointer):
2044
2044
return %6a : $(Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>)
2045
2045
}
2046
2046
2047
+ // CHECK-LABEL: sil [ossa] @bitwise_combines_guaranteed : $@convention(thin) (@guaranteed Builtin.NativeObject, Builtin.RawPointer) -> @owned (Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>) {
2048
+ // CHECK: bb0(
2049
+ // CHECK-NEXT: unchecked_bitwise_cast
2050
+ // CHECK-NEXT: unchecked_trivial_bit_cast
2051
+ // CHECK-NEXT: unchecked_ref_cast
2052
+ // CHECK-NOT: unchecked_bitwise_cast
2053
+ // CHECK: } // end sil function 'bitwise_combines_guaranteed'
2054
+ sil [ossa] @bitwise_combines_guaranteed : $@convention(thin) (@guaranteed Builtin.NativeObject, Builtin.RawPointer) -> @owned (Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>) {
2055
+ bb0(%0 : @guaranteed $Builtin.NativeObject, %1 : $Builtin.RawPointer):
2056
+ // combine
2057
+ %2 = unchecked_bitwise_cast %1 : $Builtin.RawPointer to $Builtin.Word
2058
+ %3 = unchecked_bitwise_cast %2 : $Builtin.Word to $Optional<Builtin.NativeObject>
2059
+
2060
+ // promote trivial
2061
+ %4 = unchecked_bitwise_cast %0 : $Builtin.NativeObject to $Builtin.RawPointer
2062
+
2063
+ // promote ref
2064
+ %5 = unchecked_bitwise_cast %0 : $Builtin.NativeObject to $Optional<Builtin.NativeObject>
2065
+
2066
+ %6 = tuple(%3 : $Optional<Builtin.NativeObject>, %4 : $Builtin.RawPointer, %5 : $Optional<Builtin.NativeObject>)
2067
+ %6a = copy_value %6 : $(Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>)
2068
+ return %6a : $(Optional<Builtin.NativeObject>, Builtin.RawPointer, Optional<Builtin.NativeObject>)
2069
+ }
2070
+
2047
2071
// CHECK-LABEL: @remove_pointer_compare_to_zero :
2048
2072
// CHECK-NOT: apply
2049
2073
// CHECK-NOT: cond_fail
@@ -4519,4 +4543,4 @@ bb1(%2 : @owned $FakeOptional<Builtin.NativeObject>):
4519
4543
destroy_value %2 : $FakeOptional<Builtin.NativeObject>
4520
4544
%9999 = tuple()
4521
4545
return %9999 : $()
4522
- }
4546
+ }
0 commit comments