@@ -817,6 +817,90 @@ die:
817
817
unreachable
818
818
}
819
819
820
+ // CHECK-LABEL: begin running test {{.*}} on load_borrow_of_store_borrow_1: ossa_lifetime_completion
821
+ // CHECK-LABEL: sil [ossa] @load_borrow_of_store_borrow_1 : {{.*}} {
822
+ // CHECK: [[TOKEN:%[^,]+]] = store_borrow
823
+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[TOKEN]]
824
+ // CHECK: [[BORROW:%[^,]+]] = begin_borrow [[LOAD]]
825
+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
826
+ // CHECK: [[DIE]]:
827
+ // CHECK-NEXT: end_borrow [[BORROW]]
828
+ // CHECK-NEXT: end_borrow [[LOAD]]
829
+ // CHECK-NEXT: end_borrow [[TOKEN]]
830
+ // CHECK-NEXT: unreachable
831
+ // CHECK-LABEL: } // end sil function 'load_borrow_of_store_borrow_1'
832
+ // CHECK-LABEL: end running test {{.*}} on load_borrow_of_store_borrow_1: ossa_lifetime_completion
833
+ sil [ossa] @load_borrow_of_store_borrow_1 : $@convention(thin) (@guaranteed C) -> () {
834
+ entry(%instance : @guaranteed $C):
835
+ specify_test "ossa_lifetime_completion %token availability"
836
+ %addr = alloc_stack $C
837
+ %token = store_borrow %instance to %addr : $*C
838
+ %load = load_borrow %token : $*C
839
+ %borrow = begin_borrow %load : $C
840
+ cond_br undef, exit, die
841
+
842
+ exit:
843
+ end_borrow %borrow : $C
844
+ end_borrow %load : $C
845
+ end_borrow %token : $*C
846
+ dealloc_stack %addr : $*C
847
+ %retval = tuple ()
848
+ return %retval : $()
849
+ die:
850
+ unreachable
851
+ }
852
+
853
+ // CHECK-LABEL: begin running test {{.*}} on load_borrow_of_store_borrow_2: ossa_lifetime_completion
854
+ // CHECK-LABEL: sil [ossa] @load_borrow_of_store_borrow_2 : {{.*}} {
855
+ // CHECK: [[TOKEN:%[^,]+]] = store_borrow
856
+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[TOKEN]]
857
+ // CHECK: [[BORROW:%[^,]+]] = begin_borrow [[LOAD]]
858
+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
859
+ // CHECK: [[DIE]]:
860
+ // CHECK-NEXT: end_borrow [[BORROW]]
861
+ // CHECK-NEXT: end_borrow [[LOAD]]
862
+ // CHECK-NEXT: end_borrow [[TOKEN]]
863
+ // CHECK-NEXT: unreachable
864
+ // CHECK-LABEL: } // end sil function 'load_borrow_of_store_borrow_2'
865
+ // CHECK-LABEL: end running test {{.*}} on load_borrow_of_store_borrow_2: ossa_lifetime_completion
866
+ sil [ossa] @load_borrow_of_store_borrow_2 : $@convention(thin) (@guaranteed C) -> () {
867
+ entry(%instance : @guaranteed $C):
868
+ specify_test "ossa_lifetime_completion %token availability"
869
+ %addr = alloc_stack $C
870
+ %token = store_borrow %instance to %addr : $*C
871
+ %load = load_borrow %token : $*C
872
+ %borrow = begin_borrow %load : $C
873
+ cond_br undef, exit, die
874
+
875
+ exit:
876
+ end_borrow %borrow : $C
877
+ end_borrow %load : $C
878
+ end_borrow %token : $*C
879
+ dealloc_stack %addr : $*C
880
+ %retval = tuple ()
881
+ return %retval : $()
882
+ die:
883
+ end_borrow %borrow : $C
884
+ end_borrow %load : $C
885
+ unreachable
886
+ }
887
+
888
+ sil [ossa] @load_borrow_1 : $@convention(thin) (@in_guaranteed C) -> () {
889
+ entry(%addr : $*C):
890
+ specify_test "ossa_lifetime_completion %load availability"
891
+ %load = load_borrow %addr : $*C
892
+ %borrow = begin_borrow %load : $C
893
+ cond_br undef, exit, die
894
+
895
+ exit:
896
+ end_borrow %borrow : $C
897
+ end_borrow %load : $C
898
+ %retval = tuple ()
899
+ return %retval : $()
900
+ die:
901
+ unreachable
902
+ }
903
+
820
904
// CHECK-LABEL: begin running test {{.*}} on begin_access: ossa_lifetime_completion
821
905
// CHECK-LABEL: sil [ossa] @begin_access : {{.*}} {
822
906
// CHECK: [[TOKEN:%[^,]+]] = begin_access
@@ -841,3 +925,34 @@ exit:
841
925
die:
842
926
unreachable
843
927
}
928
+
929
+ // CHECK-LABEL: begin running test {{.*}} on load_borrow_of_begin_access: ossa_lifetime_completion
930
+ // CHECK-LABEL: sil [ossa] @load_borrow_of_begin_access : {{.*}} {
931
+ // CHECK: [[ACCESS:%[^,]+]] = begin_access
932
+ // CHECK: [[LOAD:%[^,]+]] = load_borrow [[ACCESS]]
933
+ // CHECK: [[BORROW:%[^,]+]] = begin_borrow [[LOAD]]
934
+ // CHECK: cond_br undef, {{bb[0-9]+}}, [[DIE:bb[0-9]+]]
935
+ // CHECK: [[DIE]]:
936
+ // CHECK-NEXT: end_borrow [[BORROW]]
937
+ // CHECK-NEXT: end_borrow [[LOAD]]
938
+ // CHECK-NEXT: end_access [[ACCESS]]
939
+ // CHECK-NEXT: unreachable
940
+ // CHECK-LABEL: } // end sil function 'load_borrow_of_begin_access'
941
+ // CHECK-LABEL: end running test {{.*}} on load_borrow_of_begin_access: ossa_lifetime_completion
942
+ sil [ossa] @load_borrow_of_begin_access : $@convention(thin) (@in_guaranteed C) -> () {
943
+ entry(%addr : $*C):
944
+ specify_test "ossa_lifetime_completion %access availability"
945
+ %access = begin_access [static] [read] %addr : $*C
946
+ %load = load_borrow %access : $*C
947
+ %borrow = begin_borrow %load : $C
948
+ cond_br undef, exit, die
949
+
950
+ exit:
951
+ end_borrow %borrow : $C
952
+ end_borrow %load : $C
953
+ end_access %access : $*C
954
+ %retval = tuple ()
955
+ return %retval : $()
956
+ die:
957
+ unreachable
958
+ }
0 commit comments