211
211
br bb3(%4 : $FakeOptional<Klass>)
212
212
213
213
bb3(%6 :@owned $FakeOptional<Klass>):
214
- test_specification "simplify-cfg-simplify-switch-enum-block @instruction[7 ]"
214
+ test_specification "simplify-cfg-simplify-switch-enum-block @instruction[5 ]"
215
215
switch_enum %6 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb4, case #FakeOptional.none!enumelt: bb5
216
216
217
217
bb4(%8 : @owned $Klass):
@@ -226,3 +226,143 @@ bb6:
226
226
return %t : $()
227
227
}
228
228
229
+ sil [ossa] @test_simplify_switch_enum_unreachable1 : $@convention(thin) (@owned Klass) -> () {
230
+ bb0(%0 : @owned $Klass):
231
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[1]"
232
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %0 : $Klass
233
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
234
+
235
+ bb2:
236
+ unreachable
237
+
238
+ bb1(%3 : @owned $Klass):
239
+ destroy_value %3 : $Klass
240
+ unreachable
241
+
242
+ bb3:
243
+ %t = tuple ()
244
+ return %t : $()
245
+ }
246
+
247
+ sil [ossa] @test_simplify_switch_enum_unreachable2 : $@convention(thin) (@owned Klass) -> () {
248
+ bb0(%0 : @owned $Klass):
249
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[1]"
250
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %0 : $Klass
251
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
252
+
253
+ bb2:
254
+ unreachable
255
+
256
+ bb1(%3 : @owned $Klass):
257
+ destroy_value %3 : $Klass
258
+ br bb3
259
+
260
+ bb3:
261
+ %t = tuple ()
262
+ return %t : $()
263
+ }
264
+
265
+ sil [ossa] @test_simplify_switch_enum_unreachable3 : $@convention(thin) (@owned Klass) -> () {
266
+ bb0(%0 : @owned $Klass):
267
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[1]"
268
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %0 : $Klass
269
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
270
+
271
+ bb2:
272
+ br bb3
273
+
274
+ bb1(%3 : @owned $Klass):
275
+ destroy_value %3 : $Klass
276
+ unreachable
277
+
278
+ bb3:
279
+ %t = tuple ()
280
+ return %t : $()
281
+ }
282
+
283
+ // CHECK-LABEL: sil [ossa] @test_simplify_switch_enum_unreachable4 :
284
+ // CHECK-NOT: switch_enum
285
+ // CHECK-LABEL: } // end sil function 'test_simplify_switch_enum_unreachable4'
286
+ sil [ossa] @test_simplify_switch_enum_unreachable4 : $@convention(thin) (@guaranteed Klass) -> () {
287
+ bb0(%0 : @guaranteed $Klass):
288
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[1]"
289
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %0 : $Klass
290
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
291
+
292
+ bb2:
293
+ unreachable
294
+
295
+ bb1(%3 : @guaranteed $Klass):
296
+ unreachable
297
+
298
+ bb3:
299
+ %t = tuple ()
300
+ return %t : $()
301
+ }
302
+
303
+ // CHECK-LABEL: sil [ossa] @test_simplify_switch_enum_unreachable5 :
304
+ // CHECK-NOT: switch_enum
305
+ // CHECK-LABEL: } // end sil function 'test_simplify_switch_enum_unreachable5'
306
+ sil [ossa] @test_simplify_switch_enum_unreachable5 : $@convention(thin) (@owned Klass) -> () {
307
+ bb0(%0 : @owned $Klass):
308
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[2]"
309
+ %b = begin_borrow %0 : $Klass
310
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %b : $Klass
311
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
312
+
313
+ bb2:
314
+ unreachable
315
+
316
+ bb1(%3 : @guaranteed $Klass):
317
+ unreachable
318
+
319
+ bb3:
320
+ end_borrow %b : $Klass
321
+ destroy_value %0 : $Klass
322
+ %t = tuple ()
323
+ return %t : $()
324
+ }
325
+
326
+ // CHECK-LABEL: sil [ossa] @test_simplify_switch_enum_unreachable6 :
327
+ // CHECK-NOT: switch_enum
328
+ // CHECK-LABEL: } // end sil function 'test_simplify_switch_enum_unreachable6'
329
+ sil [ossa] @test_simplify_switch_enum_unreachable6 : $@convention(thin) (@guaranteed Klass) -> () {
330
+ bb0(%0 : @guaranteed $Klass):
331
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[1]"
332
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %0 : $Klass
333
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
334
+
335
+ bb2:
336
+ unreachable
337
+
338
+ bb1(%3 : @guaranteed $Klass):
339
+ br bb3
340
+
341
+ bb3:
342
+ %t = tuple ()
343
+ return %t : $()
344
+ }
345
+
346
+ // CHECK-LABEL: sil [ossa] @test_simplify_switch_enum_unreachable7 :
347
+ // CHECK-NOT: switch_enum
348
+ // CHECK-LABEL: } // end sil function 'test_simplify_switch_enum_unreachable7'
349
+ sil [ossa] @test_simplify_switch_enum_unreachable7 : $@convention(thin) (@owned Klass) -> () {
350
+ bb0(%0 : @owned $Klass):
351
+ test_specification "simplify-cfg-simplify-switch-enum-unreachable-blocks @instruction[2]"
352
+ %b = begin_borrow %0 : $Klass
353
+ %1 = enum $FakeOptional<Klass>, #FakeOptional.some!enumelt, %b : $Klass
354
+ switch_enum %1 : $FakeOptional<Klass>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
355
+
356
+ bb2:
357
+ unreachable
358
+
359
+ bb1(%3 : @guaranteed $Klass):
360
+ br bb3
361
+
362
+ bb3:
363
+ end_borrow %b : $Klass
364
+ destroy_value %0 : $Klass
365
+ %t = tuple ()
366
+ return %t : $()
367
+ }
368
+
0 commit comments