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