@@ -197,28 +197,20 @@ class C {}
197197class D { }
198198
199199// CHECK-LABEL: sil hidden @_T08builtins22class_to_native_object{{[_0-9a-zA-Z]*}}F
200- // CHECK: bb0([[ARG:%.*]] : $C):
201- // CHECK-NEXT: debug_value
202- // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
203- // CHECK-NEXT: [[COPY_BORROWED_ARG:%.*]] = copy_value [[BORROWED_ARG]]
204- // CHECK-NEXT: [[OBJ:%.*]] = unchecked_ref_cast [[COPY_BORROWED_ARG:%.*]] to $Builtin.NativeObject
205- // CHECK-NEXT: end_borrow [[BORROWED_ARG]] from [[ARG]]
206- // CHECK-NEXT: destroy_value [[ARG]]
207- // CHECK-NEXT: return [[OBJ]]
208200func class_to_native_object( _ c: C ) -> Builtin . NativeObject {
201+ // CHECK: [[OBJ:%.*]] = unchecked_ref_cast [[C:%.*]] to $Builtin.NativeObject
202+ // CHECK-NOT: destroy_value [[C]]
203+ // CHECK-NOT: destroy_value [[OBJ]]
204+ // CHECK: return [[OBJ]]
209205 return Builtin . castToNativeObject ( c)
210206}
211207
212208// CHECK-LABEL: sil hidden @_T08builtins23class_to_unknown_object{{[_0-9a-zA-Z]*}}F
213- // CHECK: bb0([[ARG:%.*]] : $C):
214- // CHECK-NEXT: debug_value
215- // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
216- // CHECK-NEXT: [[COPY_BORROWED_ARG:%.*]] = copy_value [[BORROWED_ARG]]
217- // CHECK-NEXT: [[OBJ:%.*]] = unchecked_ref_cast [[COPY_BORROWED_ARG:%.*]] to $Builtin.UnknownObject
218- // CHECK-NEXT: end_borrow [[BORROWED_ARG]] from [[ARG]]
219- // CHECK-NEXT: destroy_value [[ARG]]
220- // CHECK-NEXT: return [[OBJ]]
221209func class_to_unknown_object( _ c: C ) -> Builtin . UnknownObject {
210+ // CHECK: [[OBJ:%.*]] = unchecked_ref_cast [[C:%.*]] to $Builtin.UnknownObject
211+ // CHECK-NOT: destroy_value [[C]]
212+ // CHECK-NOT: destroy_value [[OBJ]]
213+ // CHECK: return [[OBJ]]
222214 return Builtin . castToUnknownObject ( c)
223215}
224216
@@ -241,16 +233,9 @@ func class_archetype_to_unknown_object<T : C>(_ t: T) -> Builtin.UnknownObject {
241233}
242234
243235// CHECK-LABEL: sil hidden @_T08builtins34class_existential_to_native_object{{[_0-9a-zA-Z]*}}F
244- // CHECK: bb0([[ARG:%.*]] : $ClassProto):
245- // CHECK-NEXT: debug_value
246- // CHECK-NEXT: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
247- // CHECK-NEXT: [[COPY_BORROWED_ARG:%.*]] = copy_value [[BORROWED_ARG]]
248- // CHECK-NEXT: [[REF:%[0-9]+]] = open_existential_ref [[COPY_BORROWED_ARG]] : $ClassProto
249- // CHECK-NEXT: [[PTR:%[0-9]+]] = unchecked_ref_cast [[REF]] : $@opened({{.*}}) ClassProto to $Builtin.NativeObject
250- // CHECK-NEXT: end_borrow [[BORROWED_ARG]] from [[ARG]]
251- // CHECK-NEXT: destroy_value [[ARG]]
252- // CHECK-NEXT: return [[PTR]]
253236func class_existential_to_native_object( _ t: ClassProto ) -> Builtin . NativeObject {
237+ // CHECK: [[REF:%[0-9]+]] = open_existential_ref [[T:%[0-9]+]] : $ClassProto
238+ // CHECK: [[PTR:%[0-9]+]] = unchecked_ref_cast [[REF]] : $@opened({{.*}}) ClassProto to $Builtin.NativeObject
254239 return Builtin . castToNativeObject ( t)
255240}
256241
0 commit comments