@@ -105,3 +105,159 @@ bb7(%64 : $Optional<Data>):
105
105
%102 = tuple ()
106
106
return %102 : $()
107
107
}
108
+
109
+ sil @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
110
+ sil @$sSS21_builtinStringLiteral17utf8CodeUnitCount7isASCIISSBp_BwBi1_tcfC : $@convention(method) (Builtin.RawPointer, Builtin.Word, Builtin.Int1, @thin String.Type) -> @owned String
111
+ sil @get : $@convention(thin) () -> @owned String
112
+
113
+ @objc class Ty {
114
+ @objc static func take2(_: String?, _: String?)
115
+ @objc static func take3(_: String?, _: String?, _: String?)
116
+ }
117
+
118
+ // CHECK-LABEL: sil [Osize] [ossa] @reuse_owned_2 : {{.*}} {
119
+ // CHECK: [[NATIVE:%[^,]+]] = apply {{%[^,]+}}()
120
+ // CHECK: [[TY:%[^,]+]] = metatype
121
+ // CHECK: [[OUTLINED:%[^,]+]] = function_ref @$s4main2TyC5take2yySSSg_AEtFZToTembgbgnn_
122
+ // CHECK: apply [[OUTLINED]]([[NATIVE]], [[NATIVE]], [[TY]])
123
+ // CHECK: destroy_value [[NATIVE]] : $String
124
+ // CHECK-LABEL: } // end sil function 'reuse_owned_2'
125
+ sil [ossa] [Osize] @reuse_owned_2 : $@convention(thin) () -> () {
126
+ bb0:
127
+ %get = function_ref @get : $@convention(thin) () -> @owned String
128
+ %native = apply %get() : $@convention(thin) () -> @owned String
129
+ %ty = metatype $@objc_metatype Ty.Type
130
+ %bridge = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
131
+ %bridged1 = apply %bridge(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
132
+ %optbridged1 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged1 : $NSString
133
+ %bridge2 = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
134
+ %bridged2 = apply %bridge2(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
135
+ %optbridged2 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged2 : $NSString
136
+ destroy_value %native : $String
137
+ %take2 = objc_method %ty : $@objc_metatype Ty.Type, #Ty.take2!foreign : (Ty.Type) -> (String?, String?) -> (), $@convention(objc_method) (Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
138
+ %27 = apply %take2(%optbridged1, %optbridged2, %ty) : $@convention(objc_method) (Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
139
+ destroy_value %optbridged2 : $Optional<NSString>
140
+ destroy_value %optbridged1 : $Optional<NSString>
141
+ %31 = tuple ()
142
+ return %31 : $()
143
+ }
144
+
145
+ // CHECK-LABEL: sil [Osize] [ossa] @reuse_owned_3 : {{.*}} {
146
+ // CHECK: [[NATIVE:%[^,]+]] = apply {{%[^,]+}}()
147
+ // CHECK: [[TY:%[^,]+]] = metatype
148
+ // CHECK: [[OUTLINED:%[^,]+]] = function_ref @$s4main2TyC5take3yySSSg_A2EtFZToTembgbgbgnn_
149
+ // CHECK: apply [[OUTLINED]]([[NATIVE]], [[NATIVE]], [[NATIVE]], [[TY]])
150
+ // CHECK: destroy_value [[NATIVE]] : $String
151
+ // CHECK-LABEL: } // end sil function 'reuse_owned_3'
152
+ sil [ossa] [Osize] @reuse_owned_3 : $@convention(thin) () -> () {
153
+ bb0:
154
+ %get = function_ref @get : $@convention(thin) () -> @owned String
155
+ %native = apply %get() : $@convention(thin) () -> @owned String
156
+ %ty = metatype $@objc_metatype Ty.Type
157
+ %bridge = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
158
+ %bridged1 = apply %bridge(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
159
+ %optbridged1 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged1 : $NSString
160
+ %bridge2 = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
161
+ %bridged2 = apply %bridge2(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
162
+ %optbridged2 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged2 : $NSString
163
+ %bridge3 = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
164
+ %bridged3 = apply %bridge3(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
165
+ %optbridged3 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged3 : $NSString
166
+ destroy_value %native : $String
167
+ %take2 = objc_method %ty : $@objc_metatype Ty.Type, #Ty.take3!foreign : (Ty.Type) -> (String?, String?, String?) -> (), $@convention(objc_method) (Optional<NSString>, Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
168
+ %27 = apply %take2(%optbridged1, %optbridged2, %optbridged3, %ty) : $@convention(objc_method) (Optional<NSString>, Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
169
+ destroy_value %optbridged3 : $Optional<NSString>
170
+ destroy_value %optbridged2 : $Optional<NSString>
171
+ destroy_value %optbridged1 : $Optional<NSString>
172
+ %31 = tuple ()
173
+ return %31 : $()
174
+ }
175
+
176
+ // CHECK-LABEL: sil [Osize] [ossa] @reuse_guaranteed_2 : {{.*}} {
177
+ // CHECK: bb0([[NATIVE:%[^,]+]] :
178
+ // CHECK: [[TY:%[^,]+]] = metatype
179
+ // CHECK: [[OUTLINED:%[^,]+]] = function_ref @$s4main2TyC5take2yySSSg_AEtFZToTembgbgnn_
180
+ // CHECK: apply [[OUTLINED]]([[NATIVE]], [[NATIVE]], [[TY]])
181
+ // CHECK-LABEL: } // end sil function 'reuse_guaranteed_2'
182
+ sil [ossa] [Osize] @reuse_guaranteed_2 : $@convention(thin) (@guaranteed String) -> () {
183
+ bb0(%native : @guaranteed $String):
184
+ %ty = metatype $@objc_metatype Ty.Type
185
+ %bridge = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
186
+ %bridged1 = apply %bridge(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
187
+ %optbridged1 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged1 : $NSString
188
+ %bridge2 = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
189
+ %bridged2 = apply %bridge2(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
190
+ %optbridged2 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged2 : $NSString
191
+ %take2 = objc_method %ty : $@objc_metatype Ty.Type, #Ty.take2!foreign : (Ty.Type) -> (String?, String?) -> (), $@convention(objc_method) (Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
192
+ %27 = apply %take2(%optbridged1, %optbridged2, %ty) : $@convention(objc_method) (Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
193
+ destroy_value %optbridged2 : $Optional<NSString>
194
+ destroy_value %optbridged1 : $Optional<NSString>
195
+ %31 = tuple ()
196
+ return %31 : $()
197
+ }
198
+
199
+ // CHECK-LABEL: sil [Osize] [ossa] @reuse_guaranteed_3 : {{.*}} {
200
+ // CHECK: bb0([[NATIVE:%[^,]+]] :
201
+ // CHECK: [[TY:%[^,]+]] = metatype
202
+ // CHECK: [[OUTLINED:%[^,]+]] = function_ref @$s4main2TyC5take3yySSSg_A2EtFZToTembgbgbgnn_
203
+ // CHECK: apply [[OUTLINED]]([[NATIVE]], [[NATIVE]], [[NATIVE]], [[TY]])
204
+ // CHECK-LABEL: } // end sil function 'reuse_guaranteed_3'
205
+ sil [ossa] [Osize] @reuse_guaranteed_3 : $@convention(thin) (@guaranteed String) -> () {
206
+ bb0(%native : @guaranteed $String):
207
+ %ty = metatype $@objc_metatype Ty.Type
208
+ %bridge = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
209
+ %bridged1 = apply %bridge(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
210
+ %optbridged1 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged1 : $NSString
211
+ %bridge2 = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
212
+ %bridged2 = apply %bridge2(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
213
+ %optbridged2 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged2 : $NSString
214
+ %bridge3 = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF : $@convention(method) (@guaranteed String) -> @owned NSString
215
+ %bridged3 = apply %bridge3(%native) : $@convention(method) (@guaranteed String) -> @owned NSString
216
+ %optbridged3 = enum $Optional<NSString>, #Optional.some!enumelt, %bridged3 : $NSString
217
+ %take2 = objc_method %ty : $@objc_metatype Ty.Type, #Ty.take3!foreign : (Ty.Type) -> (String?, String?, String?) -> (), $@convention(objc_method) (Optional<NSString>, Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
218
+ %27 = apply %take2(%optbridged1, %optbridged2, %optbridged3, %ty) : $@convention(objc_method) (Optional<NSString>, Optional<NSString>, Optional<NSString>, @objc_metatype Ty.Type) -> ()
219
+ destroy_value %optbridged3 : $Optional<NSString>
220
+ destroy_value %optbridged2 : $Optional<NSString>
221
+ destroy_value %optbridged1 : $Optional<NSString>
222
+ %31 = tuple ()
223
+ return %31 : $()
224
+ }
225
+
226
+ // CHECK-LABEL: sil shared [serialized] [noinline] [ossa] @$s4main2TyC5take2yySSSg_AEtFZToTembgbgnn_ : {{.*}} {
227
+ // CHECK: bb0([[FIRST:%[^,]+]] : @guaranteed
228
+ // CHECK-SAME: , [[SECOND:%[^,]+]] : @guaranteed
229
+ // CHECK-SAME: , [[TY:%[^,]+]] : $@objc_metatype
230
+ // CHECK-SAME: ):
231
+ // CHECK: [[CALLEE:%[^,]+]] = objc_method [[TY]]
232
+ // CHECK: [[BRIDGE_1:%[^,]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF
233
+ // CHECK: [[BRIDGED_1:%[^,]+]] = apply [[BRIDGE_1]]([[FIRST]])
234
+ // CHECK: [[OPT_BRIDGED_1:%[^,]+]] = enum $Optional<NSString>, #Optional.some!enumelt, [[BRIDGED_1]]
235
+ // CHECK: [[BRIDGE_2:%[^,]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF
236
+ // CHECK: [[BRIDGED_2:%[^,]+]] = apply [[BRIDGE_2]]([[SECOND]])
237
+ // CHECK: [[OPT_BRIDGED_2:%[^,]+]] = enum $Optional<NSString>, #Optional.some!enumelt, [[BRIDGED_2]]
238
+ // CHECK: apply [[CALLEE]]([[OPT_BRIDGED_1]], [[OPT_BRIDGED_2]], [[TY]])
239
+ // CHECK: destroy_value [[OPT_BRIDGED_2]]
240
+ // CHECK: destroy_value [[OPT_BRIDGED_1]]
241
+ // CHECK-LABEL: } // end sil function '$s4main2TyC5take2yySSSg_AEtFZToTembgbgnn_'
242
+
243
+ // CHECK-LABEL: sil shared [serialized] [noinline] [ossa] @$s4main2TyC5take3yySSSg_A2EtFZToTembgbgbgnn_ : {{.*}} {
244
+ // CHECK: bb0([[FIRST:%[^,]+]] : @guaranteed
245
+ // CHECK-SAME: , [[SECOND:%[^,]+]] : @guaranteed
246
+ // CHECK-SAME: , [[THIRD:%[^,]+]] : @guaranteed
247
+ // CHECK-SAME: , [[TY:%[^,]+]] : $@objc_metatype
248
+ // CHECK-SAME: ):
249
+ // CHECK: [[CALLEE:%[^,]+]] = objc_method [[TY]]
250
+ // CHECK: [[BRIDGE_1:%[^,]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF
251
+ // CHECK: [[BRIDGED_1:%[^,]+]] = apply [[BRIDGE_1]]([[FIRST]])
252
+ // CHECK: [[OPT_BRIDGED_1:%[^,]+]] = enum $Optional<NSString>, #Optional.some!enumelt, [[BRIDGED_1]]
253
+ // CHECK: [[BRIDGE_2:%[^,]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF
254
+ // CHECK: [[BRIDGED_2:%[^,]+]] = apply [[BRIDGE_2]]([[SECOND]])
255
+ // CHECK: [[OPT_BRIDGED_2:%[^,]+]] = enum $Optional<NSString>, #Optional.some!enumelt, [[BRIDGED_2]]
256
+ // CHECK: [[BRIDGE_3:%[^,]+]] = function_ref @$sSS10FoundationE19_bridgeToObjectiveCSo8NSStringCyF
257
+ // CHECK: [[BRIDGED_3:%[^,]+]] = apply [[BRIDGE_3]]([[THIRD]])
258
+ // CHECK: [[OPT_BRIDGED_3:%[^,]+]] = enum $Optional<NSString>, #Optional.some!enumelt, [[BRIDGED_3]]
259
+ // CHECK: apply [[CALLEE]]([[OPT_BRIDGED_1]], [[OPT_BRIDGED_2]], [[OPT_BRIDGED_3]], [[TY]])
260
+ // CHECK: destroy_value [[OPT_BRIDGED_3]]
261
+ // CHECK: destroy_value [[OPT_BRIDGED_2]]
262
+ // CHECK: destroy_value [[OPT_BRIDGED_1]]
263
+ // CHECK-LABEL: } // end sil function '$s4main2TyC5take3yySSSg_A2EtFZToTembgbgbgnn_'
0 commit comments