@@ -17,8 +17,6 @@ import Swift
17
17
//
18
18
// CHECK: define {{.*}} void @yield1.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %{{.*}}, i1 %[[UNWIND:.*]])
19
19
// CHECK-NEXT: entryresume.0:
20
- // CHECK-NEXT: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
21
- // CHECK-NEXT: call void @llvm.assume(i1 %[[NOUNWIND]])
22
20
// CHECK-NEXT: ret void
23
21
// CHECK-NEXT: }
24
22
//
@@ -129,11 +127,10 @@ bb0(%0 : $Float):
129
127
//
130
128
// CHECK: define {{.*}} i64 @yield2.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %[[CTX:.*]], i1 %[[UNWIND:.*]])
131
129
// CHECK-NEXT: entryresume.0:
132
- // CHECK-NEXT: %[[NOUNWIND]] = xor i1 %[[UNWIND]], true
133
- // CHECK-NEXT: call void @llvm.assume(i1 %[[NOUNWIND]])
134
130
// CHECK-NEXT: %[[FRAME:.*]] = getelementptr inbounds %yield2.Frame, ptr %[[CTX]], i32 0, i32 0
135
131
// CHECK-NEXT: %[[RET:.*]] = load i64, ptr %[[FRAME]], align 8
136
- // CHECK-NEXT: ret i64 %[[RET]]
132
+ // CHECK-NEXT: %[[RET_SEL:.*]] = select i1 %[[UNWIND]], i64 undef, i64 %[[RET]]
133
+ // CHECK-NEXT: ret i64 %[[RET_SEL]]
137
134
// CHECK-NEXT: }
138
135
//
139
136
sil [ossa] @yield2 : $@yield_once(Int, Float) -> (Int, @yields Float) {
@@ -250,8 +247,6 @@ bb0(%0 : $Int, %1 : $Float):
250
247
//
251
248
// CHECK: define {{.*}} void @yieldgen1.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %{{.*}}, i1 %[[UNWIND:.*]])
252
249
// CHECK: entryresume.0:
253
- // CHECK: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
254
- // CHECK: call void @llvm.assume(i1 %[[NOUNWIND]])
255
250
// CHECK: ret void
256
251
// CHECK: }
257
252
//
@@ -360,11 +355,10 @@ bb0(%0 : $Float):
360
355
//
361
356
// CHECK: define {{.*}} ptr @yieldgen2.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %[[CTX:.*]], i1 %[[UNWIND:.*]])
362
357
// CHECK: entryresume.0:
363
- // CHECK: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
364
- // CHECK: call void @llvm.assume(i1 %[[NOUNWIND]])
365
358
// CHECK: %[[FRAME:.*]] = getelementptr inbounds %yieldgen2.Frame, ptr %[[CTX]], i32 0, i32 0
366
359
// CHECK: %[[ARG0:.*]] = load ptr, ptr %[[FRAME]], align 8
367
- // CHECK: ret ptr %[[ARG0]]
360
+ // CHECK: %[[RET_SEL:.*]] = select i1 %[[UNWIND]], ptr undef, ptr %[[ARG0]]
361
+ // CHECK: ret ptr %[[RET_SEL]]
368
362
// CHECK: }
369
363
//
370
364
sil @yieldgen2 : $@yield_once @convention(thin) <T : F> (T) -> (@yields T, T) {
@@ -474,8 +468,6 @@ sil @$s13partial_apply10SwiftClassCfD : $@convention(method) (SwiftClass) -> ()
474
468
//
475
469
// CHECK: define {{.*}} void @partially_applyable_to_class.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %{{.*}}, i1 %[[UNWIND:.*]])
476
470
// CHECK: entryresume.0:
477
- // CHECK: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
478
- // CHECK: call void @llvm.assume(i1 %[[NOUNWIND]])
479
471
// CHECK: ret void
480
472
// CHECK: }
481
473
//
@@ -617,11 +609,10 @@ entry(%a : $SwiftClass):
617
609
//
618
610
// CHECK: define {{.*}} ptr @partially_applyable_to_two_classes.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %[[CTX:.*]], i1 %[[UNWIND:.*]])
619
611
// CHECK: entryresume.0:
620
- // CHECK: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
621
- // CHECK: call void @llvm.assume(i1 %[[NOUNWIND]])
622
612
// CHECK: %[[FRAME:.*]] = getelementptr inbounds %partially_applyable_to_two_classes.Frame, ptr %[[CTX]], i32 0, i32 0
623
613
// CHECK: %[[ARG:.*]] = load ptr, ptr %[[FRAME]], align 8
624
- // CHECK: ret ptr %[[ARG]]
614
+ // CHECK: %[[RET_SEL:.*]] = select i1 %[[UNWIND]], ptr undef, ptr %[[ARG]]
615
+ // CHECK: ret ptr %[[RET_SEL]]
625
616
// CHECK: }
626
617
//
627
618
sil @partially_applyable_to_two_classes : $@convention(thin) @yield_once (@guaranteed SwiftClass, @guaranteed SwiftClass) -> (@yields SwiftClass, SwiftClass) {
@@ -714,8 +705,6 @@ entry(%a : $SwiftClass, %b: $SwiftClass):
714
705
//
715
706
// CHECK: define {{.*}} void @generic_captured_param.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %[[CTX:.*]], i1 %[[UNWIND:.*]])
716
707
// CHECK: entryresume.0:
717
- // CHECK: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
718
- // CHECK: call void @llvm.assume(i1 %[[NOUNWIND]])
719
708
// CHECK: ret void
720
709
// CHECK: }
721
710
//
@@ -1411,11 +1400,10 @@ sil public_external @receive_closure2 : $@yield_once @convention(thin) <C where
1411
1400
//
1412
1401
// CHECK: define {{.*}} ptr @parametric_casting_closure.resume.0(ptr noalias noundef nonnull align 8 dereferenceable(32) %[[CTX:.*]], i1 %[[UNWIND:.*]])
1413
1402
// CHECK: entryresume.0:
1414
- // CHECK: %[[NOUNWIND:.*]] = xor i1 %[[UNWIND]], true
1415
- // CHECK: call void @llvm.assume(i1 %[[NOUNWIND]])
1416
1403
// CHECK: %[[FRAME:.*]] = getelementptr inbounds %parametric_casting_closure.Frame, ptr %[[CTX]], i32 0, i32 0
1417
1404
// CHECK: %[[RET:.*]] = load ptr, ptr %[[FRAME]], align 8
1418
- // CHECK: ret ptr %[[RET]]
1405
+ // CHECK: %[[RET_SEL:.*]] = select i1 %[[UNWIND]], ptr undef, ptr %[[RET]]
1406
+ // CHECK: ret ptr %[[RET_SEL]]
1419
1407
// CHECK: }
1420
1408
//
1421
1409
sil @parametric_casting_closure : $@yield_once @convention(thin) <C where C : Base> (@guaranteed Base) -> (@owned C, @yields C) {
0 commit comments