@@ -474,8 +474,8 @@ enum SinglePayloadNoXI2 {
474
474
// CHECK-32: define{{( dllexport)?}}{{( protected)?}} swiftcc i1 @select_enum([[WORD:i32]] %0, i8 %1)
475
475
// CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc i1 @select_enum([[WORD:i64]] %0, i8 %1)
476
476
// CHECK: entry:
477
- // CHECK: [[TAG:%.*]] = trunc i8 %1 to i1
478
477
// CHECK: [[PAYLOAD:%.*]] = icmp eq [[WORD]] %0, 1
478
+ // CHECK: [[TAG:%.*]] = trunc i8 %1 to i1
479
479
// CHECK: [[MATCHES:%.*]] = and i1 [[TAG]], [[PAYLOAD]]
480
480
// CHECK: [[RES:%.*]] = select i1 [[MATCHES]], i1 false, i1 true
481
481
// CHECK: ret i1 [[RES]]
@@ -637,7 +637,7 @@ entry(%0 : $Builtin.Word):
637
637
// CHECK: entry:
638
638
// CHECK: store [[WORD]] %0, ptr %1
639
639
// CHECK: [[T0:%.*]] = getelementptr inbounds %T11enum_future18SinglePayloadNoXI2O, ptr %1, i32 0, i32 1
640
- // CHECK: store i1 false , ptr [[T0]]
640
+ // CHECK: store i8 0 , ptr [[T0]]
641
641
// CHECK: ret void
642
642
// CHECK: }
643
643
sil @single_payload_no_xi_inject_x_indirect : $(Builtin.Word, @inout SinglePayloadNoXI2) -> () {
@@ -663,7 +663,7 @@ entry:
663
663
// CHECK: entry:
664
664
// CHECK: store [[WORD]] 0, ptr %0
665
665
// CHECK: [[T0:%.*]] = getelementptr inbounds %T11enum_future18SinglePayloadNoXI2O, ptr %0, i32 0, i32 1
666
- // CHECK: store i1 true , ptr [[T0]]
666
+ // CHECK: store i8 1 , ptr [[T0]]
667
667
// CHECK: ret void
668
668
// CHECK: }
669
669
sil @single_payload_no_xi_inject_y_indirect : $(@inout SinglePayloadNoXI2) -> () {
@@ -1597,12 +1597,10 @@ enum MultiPayloadOneSpareBit {
1597
1597
// CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_switch(i64 %0, i8 %1) {{.*}} {
1598
1598
sil @multi_payload_one_spare_bit_switch : $(MultiPayloadOneSpareBit) -> () {
1599
1599
entry(%u : $MultiPayloadOneSpareBit):
1600
- // CHECK-64: [[NATIVECC_TRUNC:%.*]] = trunc i8 %1 to i1
1601
1600
// CHECK-64: [[SPARE_TAG_LSHR:%.*]] = lshr i64 %0, 63
1602
1601
// CHECK-64: [[SPARE_TAG_TRUNC:%.*]] = trunc i64 [[SPARE_TAG_LSHR]] to i8
1603
1602
// CHECK-64: [[SPARE_TAG:%.*]] = and i8 [[SPARE_TAG_TRUNC]], 1
1604
- // CHECK-64: [[EXTRA_TAG_ZEXT:%.*]] = zext i1 [[NATIVECC_TRUNC]] to i8
1605
- // CHECK-64: [[EXTRA_TAG:%.*]] = shl i8 [[EXTRA_TAG_ZEXT]], 1
1603
+ // CHECK-64: [[EXTRA_TAG:%.*]] = shl i8 %1, 1
1606
1604
// CHECK-64: [[TAG:%.*]] = or i8 [[SPARE_TAG]], [[EXTRA_TAG]]
1607
1605
// CHECK-64: switch i8 [[TAG]], label %[[UNREACHABLE:[0-9]+]] [
1608
1606
// CHECK-64: i8 0, label %[[X_PREDEST:[0-9]+]]
@@ -1685,7 +1683,7 @@ sil @multi_payload_one_spare_bit_switch_indirect : $(@inout MultiPayloadOneSpare
1685
1683
entry(%u : $*MultiPayloadOneSpareBit):
1686
1684
// CHECK-64: [[PAYLOAD:%.*]] = load i64, ptr %0
1687
1685
// CHECK-64: [[T0:%.*]] = getelementptr inbounds %T11enum_future23MultiPayloadOneSpareBitO, ptr %0, i32 0, i32 1
1688
- // CHECK-64: [[TAG:%.*]] = load i1 , ptr [[T0]]
1686
+ // CHECK-64: [[TAG:%.*]] = load i8 , ptr [[T0]]
1689
1687
// CHECK-64: switch i8 {{%.*}}
1690
1688
// CHECK-64: switch i64 [[PAYLOAD]]
1691
1689
// CHECK-64: {{[0-9]+}}:
@@ -1752,7 +1750,7 @@ entry(%0 : $Builtin.Int62):
1752
1750
// CHECK-64: [[PAYLOAD_MASKED:%.*]] = and i64 [[PAYLOAD]], 9223372036854775807
1753
1751
// CHECK-64: store i64 [[PAYLOAD_MASKED]], ptr %1
1754
1752
// CHECK-64: [[T0:%.*]] = getelementptr inbounds %T11enum_future23MultiPayloadOneSpareBitO, ptr %1, i32 0, i32 1
1755
- // CHECK-64: store i1 false , ptr [[T0]]
1753
+ // CHECK-64: store i8 0 , ptr [[T0]]
1756
1754
// CHECK-64: ret void
1757
1755
// CHECK-64: }
1758
1756
sil @multi_payload_one_spare_bit_inject_x_indirect : $(Builtin.Int62, @inout MultiPayloadOneSpareBit) -> () {
@@ -1792,7 +1790,7 @@ entry(%0 : $Builtin.Int63):
1792
1790
// CHECK-64: [[PAYLOAD_TAGGED:%.*]] = or i64 [[PAYLOAD_MASKED]], -9223372036854775808
1793
1791
// CHECK-64: store i64 [[PAYLOAD_TAGGED]], ptr %1
1794
1792
// CHECK-64: [[T0:%.*]] = getelementptr inbounds %T11enum_future23MultiPayloadOneSpareBitO, ptr %1, i32 0, i32 1
1795
- // CHECK-64: store i1 false , ptr [[T0]]
1793
+ // CHECK-64: store i8 0 , ptr [[T0]]
1796
1794
// CHECK-64: ret void
1797
1795
// CHECK-64: }
1798
1796
@@ -1835,7 +1833,7 @@ entry:
1835
1833
// -- 0x8000_0000_0000_0000
1836
1834
// CHECK-64: store i64 -9223372036854775808, ptr %0
1837
1835
// CHECK-64: [[T0:%.*]] = getelementptr inbounds %T11enum_future23MultiPayloadOneSpareBitO, ptr %0, i32 0, i32 1
1838
- // CHECK-64: store i1 true , ptr [[T0]]
1836
+ // CHECK-64: store i8 1 , ptr [[T0]]
1839
1837
// CHECK-64: ret void
1840
1838
// CHECK-64: }
1841
1839
sil @multi_payload_one_spare_bit_inject_a_indirect : $(@inout MultiPayloadOneSpareBit) -> () {
@@ -2231,8 +2229,9 @@ enum MultiPayloadNested {
2231
2229
// CHECK: %3 = getelementptr
2232
2230
// CHECK: %4 = load i8, ptr %3
2233
2231
// CHECK: %5 = lshr i8 %4, 7
2234
- // CHECK: %6 = trunc i8 %5 to i1
2235
- // CHECK: br i1 %6
2232
+ // CHECK: %6 = and i8 %5, 1
2233
+ // CHECK: %7 = icmp ne i8 %6, 1
2234
+ // CHECK: br i1 %7
2236
2235
sil @multi_payload_nested_switch : $(@in MultiPayloadNested) -> () {
2237
2236
entry(%c : $*MultiPayloadNested):
2238
2237
switch_enum_addr %c : $*MultiPayloadNested, case #MultiPayloadNested.A!enumelt: a_dest, case #MultiPayloadNested.B!enumelt: b_dest
@@ -2263,8 +2262,10 @@ enum MultiPayloadNestedSpareBits {
2263
2262
// CHECK-64: entry:
2264
2263
// CHECK-64: %1 = load [[WORD]], ptr %0
2265
2264
// CHECK-64: %2 = lshr [[WORD]] %1, 61
2266
- // CHECK-64: %3 = trunc [[WORD]] %2 to i1
2267
- // CHECK-64: br i1 %3
2265
+ // CHECK-64: %3 = trunc [[WORD]] %2 to i8
2266
+ // CHECK-64: %4 = and i8 %3, 1
2267
+ // CHECK-64: %5 = icmp ne i8 %4, 1
2268
+ // CHECK-64: br i1 %5
2268
2269
sil @multi_payload_nested_spare_bits_switch : $(@in MultiPayloadNestedSpareBits) -> () {
2269
2270
entry(%c : $*MultiPayloadNestedSpareBits):
2270
2271
switch_enum_addr %c : $*MultiPayloadNestedSpareBits, case #MultiPayloadNestedSpareBits.A!enumelt: a_dest, case #MultiPayloadNestedSpareBits.B!enumelt: b_dest
@@ -2463,7 +2464,7 @@ entry(%x : $Int32):
2463
2464
// CHECK-64: [[INT_ZEXT:%.*]] = zext i32 %0 to i64
2464
2465
// CHECK-64: [[INT_SHL:%.*]] = shl i64 [[INT_ZEXT]], 32
2465
2466
%d = enum $Optional<(Optional<()>, Int32)>, #Optional.some!enumelt, %c : $(Optional<()>, Int32)
2466
- // CHECK-64: [[BIT:%.*]] = trunc i64 [[INT_SHL]] to i1
2467
+ // CHECK-64: [[BIT:%.*]] = trunc i64 [[INT_SHL]] to i8
2467
2468
// CHECK-64: [[INT_SHR:%.*]] = lshr i64 [[INT_SHL]], 32
2468
2469
// CHECK-64: [[INT:%.*]] = trunc i64 [[INT_SHR]] to i32
2469
2470
%e = unchecked_enum_data %d : $Optional<(Optional<()>, Int32)>, #Optional.some!enumelt
0 commit comments