@@ -1329,6 +1329,9 @@ bb0(%0 : @owned $E):
1329
1329
return %2 : $Builtin.NativeObject
1330
1330
}
1331
1331
1332
+ // NOTE: We currently promote the switch_enum, but we do not handle the
1333
+ // unchecked_take_enum_data_addr yet.
1334
+ //
1332
1335
// CHECK-LABEL: sil [ossa] @unchecked_take_enum_data_addr_promotion : $@convention(thin) (@inout FakeOptional<B>) -> @owned B {
1333
1336
// XHECK: bb0(%0 : $*FakeOptional<B>):
1334
1337
// XHECK-NEXT: [[BORROW:%.*]] = load_borrow
@@ -2254,12 +2257,13 @@ struct FakeInt32 {
2254
2257
var val : Builtin.Int32
2255
2258
}
2256
2259
2257
- // CHECK-LABEL: sil [ossa] @loadable_switchenumaddr_promotion : $@convention(thin) (@in FakeOptional<Builtin.RawPointer>) -> () {
2258
- // XHECK-NOT: switch_enum_addr
2259
- // XHECK: load
2260
- // XHECK-NEXT: switch_enum
2261
- // XHECK-NOT: switch_enum_addr
2262
- sil [ossa] @loadable_switchenumaddr_promotion : $@convention(thin) (@in FakeOptional<Builtin.RawPointer>) -> () {
2260
+ // CHECK-LABEL: sil [ossa] @loadable_switchenumaddr_promotion_trivial : $@convention(thin) (@in FakeOptional<Builtin.RawPointer>) -> () {
2261
+ // CHECK-NOT: switch_enum_addr
2262
+ // CHECK: load [trivial]
2263
+ // CHECK-NEXT: switch_enum
2264
+ // CHECK-NOT: switch_enum_addr
2265
+ // CHECK: } // end sil function 'loadable_switchenumaddr_promotion_trivial'
2266
+ sil [ossa] @loadable_switchenumaddr_promotion_trivial : $@convention(thin) (@in FakeOptional<Builtin.RawPointer>) -> () {
2263
2267
bb0(%0 : $*FakeOptional<Builtin.RawPointer>):
2264
2268
switch_enum_addr %0 : $*FakeOptional<Builtin.RawPointer>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
2265
2269
@@ -2274,11 +2278,75 @@ bb3:
2274
2278
return %2 : $()
2275
2279
}
2276
2280
2277
- // CHECK-LABEL: sil [ossa] @resilient_enum_case_propagation
2278
- // XHECK: bb0:
2279
- // XHECK: br bb2
2280
- // XHECK: bb1:
2281
- // XHECK: return
2281
+ // CHECK-LABEL: sil [ossa] @loadable_switchenumaddr_promotion_nontrivial : $@convention(thin) (@in_guaranteed FakeOptional<Builtin.NativeObject>) -> () {
2282
+ // CHECK-NOT: switch_enum_addr
2283
+ // CHECK: load_borrow
2284
+ // CHECK-NEXT: switch_enum
2285
+ // CHECK-NOT: switch_enum_addr
2286
+ // CHECK: } // end sil function 'loadable_switchenumaddr_promotion_nontrivial'
2287
+ sil [ossa] @loadable_switchenumaddr_promotion_nontrivial : $@convention(thin) (@in_guaranteed FakeOptional<Builtin.NativeObject>) -> () {
2288
+ bb0(%0 : $*FakeOptional<Builtin.NativeObject>):
2289
+ switch_enum_addr %0 : $*FakeOptional<Builtin.NativeObject>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
2290
+
2291
+ bb1:
2292
+ br bb3
2293
+
2294
+ bb2:
2295
+ br bb3
2296
+
2297
+ bb3:
2298
+ %2 = tuple()
2299
+ return %2 : $()
2300
+ }
2301
+
2302
+ // CHECK-LABEL: sil [ossa] @loadable_switchenumaddr_promotion_trivial_default : $@convention(thin) (@in FakeOptional<Builtin.RawPointer>) -> () {
2303
+ // CHECK-NOT: switch_enum_addr
2304
+ // CHECK: load [trivial]
2305
+ // CHECK-NEXT: switch_enum
2306
+ // CHECK-NOT: switch_enum_addr
2307
+ // CHECK: } // end sil function 'loadable_switchenumaddr_promotion_trivial_default'
2308
+ sil [ossa] @loadable_switchenumaddr_promotion_trivial_default : $@convention(thin) (@in FakeOptional<Builtin.RawPointer>) -> () {
2309
+ bb0(%0 : $*FakeOptional<Builtin.RawPointer>):
2310
+ switch_enum_addr %0 : $*FakeOptional<Builtin.RawPointer>, case #FakeOptional.some!enumelt: bb1, default bb2
2311
+
2312
+ bb1:
2313
+ br bb3
2314
+
2315
+ bb2:
2316
+ br bb3
2317
+
2318
+ bb3:
2319
+ %2 = tuple()
2320
+ return %2 : $()
2321
+ }
2322
+
2323
+ // CHECK-LABEL: sil [ossa] @loadable_switchenumaddr_promotion_nontrivial_default : $@convention(thin) (@in_guaranteed FakeOptional<Builtin.NativeObject>) -> () {
2324
+ // CHECK-NOT: switch_enum_addr
2325
+ // CHECK: load_borrow
2326
+ // CHECK-NEXT: switch_enum
2327
+ // CHECK-NOT: switch_enum_addr
2328
+ // CHECK: } // end sil function 'loadable_switchenumaddr_promotion_nontrivial_default'
2329
+ sil [ossa] @loadable_switchenumaddr_promotion_nontrivial_default : $@convention(thin) (@in_guaranteed FakeOptional<Builtin.NativeObject>) -> () {
2330
+ bb0(%0 : $*FakeOptional<Builtin.NativeObject>):
2331
+ switch_enum_addr %0 : $*FakeOptional<Builtin.NativeObject>, case #FakeOptional.some!enumelt: bb1, default bb2
2332
+
2333
+ bb1:
2334
+ br bb3
2335
+
2336
+ bb2:
2337
+ br bb3
2338
+
2339
+ bb3:
2340
+ %2 = tuple()
2341
+ return %2 : $()
2342
+ }
2343
+
2344
+ // CHECK-LABEL: sil [ossa] @resilient_enum_case_propagation :
2345
+ // CHECK: bb0:
2346
+ // CHECK: br bb2
2347
+ // CHECK: bb1:
2348
+ // CHECK: return
2349
+ // CHECK: } // end sil function 'resilient_enum_case_propagation'
2282
2350
sil [ossa] @resilient_enum_case_propagation : $@convention(thin) () -> Builtin.Int64 {
2283
2351
bb0:
2284
2352
%0 = alloc_stack $FloatingPointRoundingRule
0 commit comments