@@ -199,61 +199,61 @@ class D {}
199
199
// CHECK-LABEL: sil hidden @$s8builtins22class_to_native_object{{[_0-9a-zA-Z]*}}F
200
200
// CHECK: bb0([[ARG:%.*]] : @guaranteed $C):
201
201
// CHECK-NEXT: debug_value
202
- // CHECK-NEXT: [[OBJ :%.*]] = unchecked_ref_cast [[ARG:%.*]] to $Builtin.NativeObject
203
- // CHECK-NEXT: [[OBJ_COPY :%.*]] = copy_value [[OBJ]]
204
- // CHECK-NEXT: return [[OBJ_COPY ]]
202
+ // CHECK-NEXT: [[ARG_COPY :%.*]] = copy_value [[ARG]]
203
+ // CHECK-NEXT: [[OBJ :%.*]] = unchecked_ref_cast [[ARG_COPY]] : $C to $Builtin.NativeObject
204
+ // CHECK-NEXT: return [[OBJ ]]
205
205
func class_to_native_object( _ c: C ) -> Builtin . NativeObject {
206
206
return Builtin . castToNativeObject ( c)
207
207
}
208
208
209
209
// CHECK-LABEL: sil hidden @$s8builtins32class_archetype_to_native_object{{[_0-9a-zA-Z]*}}F
210
210
func class_archetype_to_native_object< T : C > ( _ t: T ) -> Builtin . NativeObject {
211
- // CHECK: [[OBJ :%.*]] = unchecked_ref_cast [[C:%.*]] to $Builtin.NativeObject
212
- // CHECK-NEXT : [[OBJ_COPY :%.*]] = copy_value [[OBJ]]
213
- // CHECK-NOT: destroy_value [[C ]]
211
+ // CHECK: [[COPY :%.*]] = copy_value %0
212
+ // CHECK: [[OBJ :%.*]] = unchecked_ref_cast [[COPY]] : $T to $Builtin.NativeObject
213
+ // CHECK-NOT: destroy_value [[COPY ]]
214
214
// CHECK-NOT: destroy_value [[OBJ]]
215
- // CHECK: return [[OBJ_COPY ]]
215
+ // CHECK: return [[OBJ ]]
216
216
return Builtin . castToNativeObject ( t)
217
217
}
218
218
219
219
// CHECK-LABEL: sil hidden @$s8builtins34class_existential_to_native_object{{[_0-9a-zA-Z]*}}F
220
220
// CHECK: bb0([[ARG:%.*]] : @guaranteed $ClassProto):
221
221
// CHECK-NEXT: debug_value
222
- // CHECK-NEXT: [[REF:%[0-9]+]] = open_existential_ref [[ARG]] : $ClassProto
222
+ // CHECK-NEXT: [[ARG_COPY:%.*]] = copy_value [[ARG]]
223
+ // CHECK-NEXT: [[REF:%[0-9]+]] = open_existential_ref [[ARG_COPY]] : $ClassProto
223
224
// CHECK-NEXT: [[PTR:%[0-9]+]] = unchecked_ref_cast [[REF]] : $@opened({{.*}}) ClassProto to $Builtin.NativeObject
224
- // CHECK-NEXT: [[PTR_COPY:%.*]] = copy_value [[PTR]]
225
- // CHECK-NEXT: return [[PTR_COPY]]
225
+ // CHECK-NEXT: return [[PTR]]
226
226
func class_existential_to_native_object( _ t: ClassProto ) -> Builtin . NativeObject {
227
227
return Builtin . unsafeCastToNativeObject ( t)
228
228
}
229
229
230
230
// CHECK-LABEL: sil hidden @$s8builtins24class_from_native_object{{[_0-9a-zA-Z]*}}F
231
231
func class_from_native_object( _ p: Builtin . NativeObject ) -> C {
232
- // CHECK: [[C :%.*]] = unchecked_ref_cast [[OBJ:%.*]] to $C
233
- // CHECK: [[C_RETURN :%.*]] = copy_value [[C]]
234
- // CHECK-NOT: destroy_value [[C ]]
235
- // CHECK-NOT: destroy_value [[OBJ ]]
236
- // CHECK: return [[C_RETURN ]]
232
+ // CHECK: [[COPY :%.*]] = copy_value %0
233
+ // CHECK: [[CAST :%.*]] = unchecked_ref_cast [[COPY]] : $Builtin.NativeObject to $C
234
+ // CHECK-NOT: destroy_value [[COPY ]]
235
+ // CHECK-NOT: destroy_value [[CAST ]]
236
+ // CHECK: return [[CAST ]]
237
237
return Builtin . castFromNativeObject ( p)
238
238
}
239
239
240
240
// CHECK-LABEL: sil hidden @$s8builtins34class_archetype_from_native_object{{[_0-9a-zA-Z]*}}F
241
241
func class_archetype_from_native_object< T : C > ( _ p: Builtin . NativeObject ) -> T {
242
- // CHECK: [[C :%.*]] = unchecked_ref_cast [[OBJ:%.*]] : $Builtin.NativeObject to $T
243
- // CHECK: [[C_RETURN :%.*]] = copy_value [[C]]
244
- // CHECK-NOT: destroy_value [[C ]]
245
- // CHECK-NOT: destroy_value [[OBJ ]]
246
- // CHECK: return [[C_RETURN ]]
242
+ // CHECK: [[COPY :%.*]] = copy_value %0
243
+ // CHECK: [[CAST :%.*]] = unchecked_ref_cast [[COPY]] : $Builtin.NativeObject to $T
244
+ // CHECK-NOT: destroy_value [[COPY ]]
245
+ // CHECK-NOT: destroy_value [[CAST ]]
246
+ // CHECK: return [[CAST ]]
247
247
return Builtin . castFromNativeObject ( p)
248
248
}
249
249
250
250
// CHECK-LABEL: sil hidden @$s8builtins41objc_class_existential_from_native_object{{[_0-9a-zA-Z]*}}F
251
251
func objc_class_existential_from_native_object( _ p: Builtin . NativeObject ) -> AnyObject {
252
- // CHECK: [[C :%.*]] = unchecked_ref_cast [[OBJ:%.*]] : $Builtin.NativeObject to $AnyObject
253
- // CHECK: [[C_RETURN :%.*]] = copy_value [[C]]
254
- // CHECK-NOT: destroy_value [[C ]]
255
- // CHECK-NOT: destroy_value [[OBJ ]]
256
- // CHECK: return [[C_RETURN ]]
252
+ // CHECK: [[COPY :%.*]] = copy_value %0
253
+ // CHECK: [[CAST :%.*]] = unchecked_ref_cast [[COPY]] : $Builtin.NativeObject to $AnyObject
254
+ // CHECK-NOT: destroy_value [[COPY ]]
255
+ // CHECK-NOT: destroy_value [[CAST ]]
256
+ // CHECK: return [[CAST ]]
257
257
return Builtin . castFromNativeObject ( p)
258
258
}
259
259
@@ -510,14 +510,16 @@ func unreachable() {
510
510
// CHECK: bb0([[ARG1:%.*]] : @guaranteed $C, [[ARG2:%.*]] : @trivial $Builtin.Word):
511
511
// CHECK-NEXT: debug_value
512
512
// CHECK-NEXT: debug_value
513
- // CHECK-NEXT: [[ARG1_TRIVIAL:%.*]] = unchecked_trivial_bit_cast [[ARG1]] : $C to $Builtin.Word
514
- // CHECK-NEXT: [[ARG1_D:%.*]] = unchecked_ref_cast [[ARG1]] : $C to $D
515
- // CHECK-NEXT: [[ARG1_OPT:%.*]] = unchecked_ref_cast [[ARG1]] : $C to $Optional<C>
513
+ // CHECK-NEXT: [[ARG1_COPY1:%.*]] = copy_value [[ARG1]]
514
+ // CHECK-NEXT: [[ARG1_TRIVIAL:%.*]] = unchecked_trivial_bit_cast [[ARG1_COPY1]] : $C to $Builtin.Word
515
+ // CHECK-NEXT: [[ARG1_COPY2:%.*]] = copy_value [[ARG1]]
516
+ // CHECK-NEXT: [[ARG1_D:%.*]] = unchecked_ref_cast [[ARG1_COPY2]] : $C to $D
517
+ // CHECK-NEXT: [[ARG1_COPY3:%.*]] = copy_value [[ARG1]]
518
+ // CHECK-NEXT: [[ARG1_OPT:%.*]] = unchecked_ref_cast [[ARG1_COPY3]] : $C to $Optional<C>
516
519
// CHECK-NEXT: [[ARG2_FROM_WORD:%.*]] = unchecked_bitwise_cast [[ARG2]] : $Builtin.Word to $C
517
520
// CHECK-NEXT: [[ARG2_FROM_WORD_COPY:%.*]] = copy_value [[ARG2_FROM_WORD]]
518
- // CHECK-NEXT: [[ARG1_D_COPY:%.*]] = copy_value [[ARG1_D]]
519
- // CHECK-NEXT: [[ARG1_OPT_COPY:%.*]] = copy_value [[ARG1_OPT]]
520
- // CHECK-NEXT: [[RESULT:%.*]] = tuple ([[ARG1_TRIVIAL]] : $Builtin.Word, [[ARG1_D_COPY]] : $D, [[ARG1_OPT_COPY]] : $Optional<C>, [[ARG2_FROM_WORD_COPY:%.*]] : $C)
521
+ // CHECK-NEXT: destroy_value [[ARG1_COPY1]]
522
+ // CHECK-NEXT: [[RESULT:%.*]] = tuple ([[ARG1_TRIVIAL]] : $Builtin.Word, [[ARG1_D]] : $D, [[ARG1_OPT]] : $Optional<C>, [[ARG2_FROM_WORD_COPY:%.*]] : $C)
521
523
// CHECK: return [[RESULT]]
522
524
func reinterpretCast( _ c: C , x: Builtin . Word ) -> ( Builtin . Word , D , C ? , C ) {
523
525
return ( Builtin . reinterpretCast ( c) as Builtin . Word,
@@ -534,9 +536,10 @@ func reinterpretAddrOnly<T, U>(_ t: T) -> U {
534
536
535
537
// CHECK-LABEL: sil hidden @$s8builtins28reinterpretAddrOnlyToTrivial{{[_0-9a-zA-Z]*}}F
536
538
func reinterpretAddrOnlyToTrivial< T> ( _ t: T ) -> Int {
537
- // CHECK: [[ADDR:%.*]] = unchecked_addr_cast [[INPUT:%.*]] : $*T to $*Int
539
+ // CHECK: copy_addr %0 to [initialization] [[INPUT:%.*]] : $*T
540
+ // CHECK: [[ADDR:%.*]] = unchecked_addr_cast [[INPUT]] : $*T to $*Int
538
541
// CHECK: [[VALUE:%.*]] = load [trivial] [[ADDR]]
539
- // CHECK-NOT : destroy_addr [[INPUT]]
542
+ // CHECK: destroy_addr [[INPUT]]
540
543
return Builtin . reinterpretCast ( t)
541
544
}
542
545
@@ -553,9 +556,10 @@ func reinterpretAddrOnlyLoadable<T>(_ a: Int, _ b: T) -> (T, Int) {
553
556
}
554
557
555
558
// CHECK-LABEL: sil hidden @$s8builtins18castToBridgeObject{{[_0-9a-zA-Z]*}}F
556
- // CHECK: [[BO:%.*]] = ref_to_bridge_object {{%.*}} : $C, {{%.*}} : $Builtin.Word
557
- // CHECK: [[BO_COPY:%.*]] = copy_value [[BO]]
558
- // CHECK: return [[BO_COPY]]
559
+ // CHECK: [[ARG_COPY:%.*]] = copy_value %0
560
+ // CHECK: [[BO:%.*]] = ref_to_bridge_object [[ARG_COPY]] : $C, {{%.*}} : $Builtin.Word
561
+ // CHECK-NOT: destroy_value [[ARG_COPY]]
562
+ // CHECK: return [[BO]]
559
563
func castToBridgeObject( _ c: C , _ w: Builtin . Word ) -> Builtin . BridgeObject {
560
564
return Builtin . castToBridgeObject ( c, w)
561
565
}
@@ -653,10 +657,10 @@ func refcast_generic_any<T>(_ o: T) -> AnyObject {
653
657
654
658
// CHECK-LABEL: sil hidden @$s8builtins17refcast_class_anyyyXlAA1ACF :
655
659
// CHECK: bb0([[ARG:%.*]] : @guaranteed $A):
656
- // CHECK: [[ARG_CASTED :%.*]] = unchecked_ref_cast [[ARG]] : $A to $AnyObject
657
- // CHECK: [[ARG_CASTED_COPY :%.*]] = copy_value [[ARG_CASTED]]
660
+ // CHECK: [[ARG_COPY :%.*]] = copy_value [[ARG]]
661
+ // CHECK: [[ARG_CASTED :%.*]] = unchecked_ref_cast [[ARG_COPY]] : $A to $AnyObject
658
662
// CHECK-NOT: destroy_value [[ARG]]
659
- // CHECK: return [[ARG_CASTED_COPY ]]
663
+ // CHECK: return [[ARG_CASTED ]]
660
664
// CHECK: } // end sil function '$s8builtins17refcast_class_anyyyXlAA1ACF'
661
665
func refcast_class_any( _ o: A ) -> AnyObject {
662
666
return Builtin . castReference ( o)
@@ -670,9 +674,9 @@ func refcast_punknown_any(_ o: PUnknown) -> AnyObject {
670
674
671
675
// CHECK-LABEL: sil hidden @$s8builtins18refcast_pclass_anyyyXlAA6PClass_pF :
672
676
// CHECK: bb0([[ARG:%.*]] : @guaranteed $PClass):
673
- // CHECK: [[ARG_CAST :%.*]] = unchecked_ref_cast [[ARG]] : $PClass to $AnyObject
674
- // CHECK: [[ARG_CAST_COPY :%.*]] = copy_value [[ARG_CAST]]
675
- // CHECK: return [[ARG_CAST_COPY ]]
677
+ // CHECK: [[ARG_COPY :%.*]] = copy_value [[ARG]]
678
+ // CHECK: [[ARG_CAST :%.*]] = unchecked_ref_cast [[ARG_COPY]] : $PClass to $AnyObject
679
+ // CHECK: return [[ARG_CAST ]]
676
680
// CHECK: } // end sil function '$s8builtins18refcast_pclass_anyyyXlAA6PClass_pF'
677
681
func refcast_pclass_any( _ o: PClass ) -> AnyObject {
678
682
return Builtin . castReference ( o)
0 commit comments