@@ -24,6 +24,7 @@ sil [ossa] @takeOwnedC : $@convention(thin) (@owned C) -> ()
2424sil [ossa] @takeOwnedCTwice : $@convention(thin) (@owned C, @owned C) -> ()
2525sil [ossa] @takeGuaranteedC : $@convention(thin) (@guaranteed C) -> ()
2626sil [ossa] @accessRawP : $@convention(method) (Builtin.RawPointer) -> ()
27+ sil [ossa] @synchronization_point : $@convention(thin) () -> ()
2728
2829struct NativeObjectPair {
2930 var obj1 : Builtin.NativeObject
@@ -329,7 +330,8 @@ bb0(%0 : @owned $C):
329330 %copy3 = copy_value %borrow : $C
330331 %copy4 = copy_value %borrow : $C
331332 // Force the borrow not to be eliminated early.
332- %call0 = apply %fguaranteed(%borrow) : $@convention(thin) (@guaranteed C) -> ()
333+ %synchronization_point = function_ref @synchronization_point : $@convention(thin) () -> ()
334+ %synchronized = apply %synchronization_point() : $@convention(thin) () -> ()
333335 end_borrow %borrow : $C
334336 cond_br undef, bb1, bb2
335337bb1:
421423//
422424// CHECK-LABEL: sil [ossa] @testInterleavedBorrowCrossBlock : $@convention(thin) () -> @owned C {
423425// CHECK: [[ALLOC:%.*]] = alloc_ref $C
424- // CHECK: apply %{{.*}}([[ALLOC]]) : $@convention(thin) (@guaranteed C) -> ()
426+ // CHECK: [[B1:%.*]] = begin_borrow [[ALLOC]]
427+ // CHECK: apply %{{.*}}([[B1]]) : $@convention(thin) (@guaranteed C) -> ()
428+ // CHECK-NEXT: end_borrow [[B1]] : $C
425429// CHECK-NEXT: cond_br undef, bb1, bb2
426430// CHECK: bb1:
427431// CHECK: apply %{{.*}}([[ALLOC]]) : $@convention(thin) (@guaranteed C) -> ()
507511// CHECK-LABEL: sil [ossa] @testEscapingForward : $@convention(method) (@guaranteed HasObject) -> () {
508512// CHECK: begin_borrow %0 : $HasObject
509513// CHECK: copy_value
510- // CHECK: end_borrow
511514// CHECK: destructure_struct
515+ // CHECK: end_borrow
512516// CHECK: ref_to_unmanaged
513517// CHECK: destroy_value
514518// CHECK-LABEL: } // end sil function 'testEscapingForward'
@@ -748,15 +752,18 @@ bb3(%borrow3 : @guaranteed $C, %copy3 : @owned $C):
748752
749753// Test conversion from struct_extract to destructure.
750754//
755+ // TODO: The redundant borrow scope should be removed by a SemanticARC pass.
756+ //
751757// CHECK-LABEL: sil [ossa] @testDestructureConversion : $@convention(thin) (@owned Wrapper) -> () {
752758// CHECK: bb0(%0 : @owned $Wrapper):
753759// CHECK-NOT: copy
754- // CHECK: [[SPLIT:%.*]] = destructure_struct %0 : $Wrapper
760+ // CHECK: [[BORROW:%.*]] = begin_borrow %0 : $Wrapper
761+ // CHECK: [[SPLIT:%.*]] = destructure_struct [[BORROW]] : $Wrapper
755762// CHECK: [[BORROWINNER:%.*]] = begin_borrow [[SPLIT]] : $HasObjectAndInt
756763// CHECK: debug_value [[BORROWINNER]] : $HasObjectAndInt, let, name "self", argno 1
757764// CHECK: struct_extract [[BORROWINNER]] : $HasObjectAndInt, #HasObjectAndInt.value
758765// CHECK: end_borrow [[BORROWINNER]] : $HasObjectAndInt
759- // CHECK: destroy_value [[SPLIT]] : $HasObjectAndInt
766+ // CHECK: destroy_value %0 : $Wrapper
760767// CHECK-LABEL: } // end sil function 'testDestructureConversion'
761768sil [ossa] @testDestructureConversion : $@convention(thin) (@owned Wrapper) -> () {
762769bb0(%0 : @owned $Wrapper):
@@ -950,13 +957,17 @@ bb0(%0 : @owned $HasObjectAndInt):
950957
951958// Test removing copies within an outer borrow scope with no outer uses.
952959//
960+ // TODO: The redundant borrow scope should be removed by a SemanticARC pass.
961+ //
953962// CHECK-LABEL: sil [ossa] @testBorrowCopy : $@convention(thin) (@guaranteed C) -> Int64 {
954963// CHECK: bb0(%0 : @guaranteed $C):
955964// CHECK-NEXT: %1 = begin_borrow %0 : $C
956- // CHECK-NEXT: %2 = ref_element_addr %1 : $C, #C.a
957- // CHECK-NEXT: %3 = load [trivial] %2 : $*Int64
965+ // CHECK-NEXT: %2 = begin_borrow %1 : $C
966+ // CHECK-NEXT: %3 = ref_element_addr %2 : $C, #C.a
967+ // CHECK-NEXT: %4 = load [trivial] %3 : $*Int64
968+ // CHECK-NEXT: end_borrow %2 : $C
958969// CHECK-NEXT: end_borrow %1 : $C
959- // CHECK-NEXT: return %3 : $Int64
970+ // CHECK-NEXT: return %4 : $Int64
960971// CHECK-LABEL: } // end sil function 'testBorrowCopy'
961972sil [ossa] @testBorrowCopy : $@convention(thin) (@guaranteed C) -> Int64 {
962973bb0(%0 : @guaranteed $C):
0 commit comments