@@ -44,8 +44,10 @@ sil [ossa] @synchronization_point : $@convention(thin) () -> ()
44
44
// Hoist over br.
45
45
// CHECK-LABEL: sil [ossa] @hoist_over_branch_1 : {{.*}} {
46
46
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C):
47
+ // CHECK: [[LIFETIME:%[^,]]] = begin_borrow [[INSTANCE]]
47
48
// CHECK: [[CALLEE_GUARANTEED:%[^,]+]] = function_ref @callee_guaranteed
48
- // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[INSTANCE]])
49
+ // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[LIFETIME]])
50
+ // CHECK: end_borrow [[LIFETIME]]
49
51
// CHECK: br [[EXIT:bb[0-9]+]]
50
52
// CHECK: [[EXIT]]:
51
53
// CHECK: return [[INSTANCE]]
64
66
// Hoist over cond_br.
65
67
// CHECK-LABEL: sil [ossa] @hoist_over_branch_2 : {{.*}} {
66
68
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C):
69
+ // CHECK: [[LIFETIME:%[^,]]] = begin_borrow [[INSTANCE]]
67
70
// CHECK: [[CALLEE_GUARANTEED:%[^,]+]] = function_ref @callee_guaranteed
68
- // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[INSTANCE]])
71
+ // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[LIFETIME]])
72
+ // CHECK: end_borrow [[LIFETIME]]
69
73
// CHECK: cond_br undef, [[BL1:bb[0-9]+]], [[BL2:bb[0-9]+]]
70
74
// CHECK: [[BL1]]:
71
75
// CHECK: br [[EXIT:bb[0-9]+]]
93
97
// Hoist over two brs.
94
98
// CHECK-LABEL: sil [ossa] @hoist_over_branch_3 : {{.*}} {
95
99
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C):
100
+ // CHECK: [[LIFETIME:%[^,]]] = begin_borrow [[INSTANCE]]
96
101
// CHECK: [[CALLEE_GUARANTEED:%[^,]+]] = function_ref @callee_guaranteed
97
- // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[INSTANCE]])
102
+ // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[LIFETIME]])
103
+ // CHECK: end_borrow [[LIFETIME]]
98
104
// CHECK: cond_br undef, [[BL1:bb[0-9]+]], [[BL2:bb[0-9]+]]
99
105
// CHECK: [[BL1]]:
100
106
// CHECK: br [[EXIT:bb[0-9]+]]
@@ -121,12 +127,15 @@ exit:
121
127
// Don't hoist over 1 / 2 brs.
122
128
// CHECK-LABEL: sil [ossa] @hoist_over_branch_4 : {{.*}} {
123
129
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C):
130
+ // CHECK: [[LIFETIME:%[^,]]] = begin_borrow [[INSTANCE]]
124
131
// CHECK: cond_br undef, [[BL1:bb[0-9]+]], [[BL2:bb[0-9]+]]
125
132
// CHECK: [[BL1]]:
126
133
// CHECK: [[CALLEE_GUARANTEED:%[^,]+]] = function_ref @callee_guaranteed
127
- // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[INSTANCE]])
134
+ // CHECK: {{%[^,]+}} = apply [[CALLEE_GUARANTEED]]([[LIFETIME]])
135
+ // CHECK: end_borrow [[LIFETIME]]
128
136
// CHECK: br [[EXIT:bb[0-9]+]]
129
137
// CHECK: [[BL2]]:
138
+ // CHECK: end_borrow [[LIFETIME]]
130
139
// CHECK: br [[EXIT]]
131
140
// CHECK: [[EXIT]]:
132
141
// CHECK: return [[INSTANCE]]
@@ -149,8 +158,10 @@ exit:
149
158
// Hoist over switch_enum destinations.
150
159
// CHECK-LABEL: sil [ossa] @hoist_over_branch_5 : {{.*}} {
151
160
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C, [[CASE:%[^,]+]] : $OneOfThree):
161
+ // CHECK: [[LIFETIME:%[^,]]] = begin_borrow [[INSTANCE]]
152
162
// CHECK: [[CALLEE_GUARANTEED:%[^,]+]] = function_ref @callee_guaranteed
153
- // CHECK: {{%[0-9]+}} = apply [[CALLEE_GUARANTEED]]([[INSTANCE]])
163
+ // CHECK: {{%[0-9]+}} = apply [[CALLEE_GUARANTEED]]([[LIFETIME]])
164
+ // CHECK: end_borrow [[LIFETIME]]
154
165
// CHECK: switch_enum [[CASE]] : $OneOfThree, case #OneOfThree.one!enumelt: [[ONE_DEST:bb[0-9]+]], case #OneOfThree.two!enumelt: [[TWO_DEST:bb[0-9]+]], case #OneOfThree.three!enumelt: [[THREE_DEST:bb[0-9]+]]
155
166
// CHECK: [[ONE_DEST]]:
156
167
// CHECK: br [[EXIT:bb[0-9]+]]
@@ -590,11 +601,15 @@ entry(%instance : @guaranteed $C):
590
601
return %result : $()
591
602
}
592
603
593
- // Hoist over an apply that uses a copy of the borrow.
594
- // CHECK-LABEL: sil [ossa] @hoist_over_apply_at_copy : {{.*}} {
595
- // CHECK-NOT: copy_value
596
- // CHECK-LABEL: } // end sil function 'hoist_over_apply_at_copy'
597
- sil [ossa] @hoist_over_apply_at_copy : $@convention(thin) (@owned C) -> () {
604
+ // Don't hoist over an apply that uses a copy of the borrow.
605
+ // CHECK-LABEL: sil [ossa] @dont_hoist_over_apply_at_copy : {{.*}} {
606
+ // CHECK: begin_borrow
607
+ // CHECK: copy_value
608
+ // CHECK: apply
609
+ // CHECK: end_borrow
610
+ // CHECK: destroy_value
611
+ // CHECK-LABEL: } // end sil function 'dont_hoist_over_apply_at_copy'
612
+ sil [ossa] @dont_hoist_over_apply_at_copy : $@convention(thin) (@owned C) -> () {
598
613
entry(%instance : @owned $C):
599
614
%synchronization_point = function_ref @synchronization_point : $@convention(thin) () -> ()
600
615
%callee_owned = function_ref @callee_owned : $@convention(thin) (@owned C) -> ()
@@ -612,12 +627,12 @@ entry(%instance : @owned $C):
612
627
return %result : $()
613
628
}
614
629
615
- // Hoist over an apply that uses the borrow.
630
+ // Don't hoist over an apply that uses the borrow.
616
631
// CHECK-LABEL: sil [ossa] @hoist_over_apply_at_borrow : {{.*}} {
617
632
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C):
618
633
// CHECK: [[LIFETIME:%[^,]+]] = begin_borrow [[INSTANCE]]
634
+ // CHECK: apply {{%[^,]+}}([[LIFETIME]])
619
635
// CHECK: end_borrow [[LIFETIME]]
620
- // CHECK: apply {{%[^,]+}}([[INSTANCE]])
621
636
// CHECK-LABEL: } // end sil function 'hoist_over_apply_at_borrow'
622
637
sil [ossa] @hoist_over_apply_at_borrow : $@convention(thin) (@owned C) -> () {
623
638
entry(%instance : @owned $C):
@@ -695,11 +710,18 @@ entry(%instance : @owned $C):
695
710
return %result : $()
696
711
}
697
712
698
- // CHECK-LABEL: sil [ossa] @hoist_over_try_apply_at_borrow : {{.*}} {
713
+ // CHECK-LABEL: sil [ossa] @dont_hoist_over_try_apply_at_borrow : {{.*}} {
699
714
// CHECK: {{bb[0-9]+}}([[INSTANCE:%[^,]+]] : @owned $C):
700
- // CHECK-NEXT: try_apply undef([[INSTANCE]]) : $@convention(thin) (@guaranteed C) -> @error Error, normal bb1, error bb2
701
- // CHECK-LABEL: } // end sil function 'hoist_over_try_apply_at_borrow'
702
- sil [ossa] @hoist_over_try_apply_at_borrow : $@convention(thin) (@owned C) -> @error Error {
715
+ // CHECK: [[LIFETIME:%[^,]+]] = begin_borrow [[INSTANCE]]
716
+ // CHECK: try_apply undef([[LIFETIME]]) : {{.*}}, normal [[GOOD:bb[0-9]+]], error [[BAD:bb[0-9]+]]
717
+ // CHECK: [[GOOD]]
718
+ // CHECK: end_borrow [[LIFETIME]]
719
+ // CHECK: destroy_value [[INSTANCE]]
720
+ // CHECK: [[BAD]]
721
+ // CHECK: end_borrow [[LIFETIME]]
722
+ // CHECK: destroy_value [[INSTANCE]]
723
+ // CHECK-LABEL: } // end sil function 'dont_hoist_over_try_apply_at_borrow'
724
+ sil [ossa] @dont_hoist_over_try_apply_at_borrow : $@convention(thin) (@owned C) -> @error Error {
703
725
bb0(%instance : @owned $C):
704
726
%lifetime = begin_borrow %instance : $C
705
727
try_apply undef(%lifetime) : $@convention(thin) (@guaranteed C) -> @error Error, normal good, error bad
0 commit comments