@@ -308,10 +308,10 @@ define i32 @overflow(i32 %type) {
308
308
; CHECK-LABEL: @overflow(
309
309
; CHECK-NEXT: entry:
310
310
; CHECK-NEXT: switch i32 [[TYPE:%.*]], label [[IF_END:%.*]] [
311
- ; CHECK-NEXT: i32 3, label [[SW_BB3:%.*]]
312
- ; CHECK-NEXT: i32 -2147483645, label [[SW_BB3]]
313
- ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
314
- ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]]
311
+ ; CHECK-NEXT: i32 3, label [[SW_BB3:%.*]]
312
+ ; CHECK-NEXT: i32 -2147483645, label [[SW_BB3]]
313
+ ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
314
+ ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]]
315
315
; CHECK-NEXT: ]
316
316
; CHECK: sw.bb1:
317
317
; CHECK-NEXT: br label [[IF_END]]
@@ -931,11 +931,11 @@ define i96 @illegaltype(i32 %c) {
931
931
; CHECK-LABEL: @illegaltype(
932
932
; CHECK-NEXT: entry:
933
933
; CHECK-NEXT: switch i32 [[C:%.*]], label [[SW_DEFAULT:%.*]] [
934
- ; CHECK-NEXT: i32 42, label [[RETURN:%.*]]
935
- ; CHECK-NEXT: i32 43, label [[SW_BB1:%.*]]
936
- ; CHECK-NEXT: i32 44, label [[SW_BB2:%.*]]
937
- ; CHECK-NEXT: i32 45, label [[SW_BB3:%.*]]
938
- ; CHECK-NEXT: i32 46, label [[SW_BB4:%.*]]
934
+ ; CHECK-NEXT: i32 42, label [[RETURN:%.*]]
935
+ ; CHECK-NEXT: i32 43, label [[SW_BB1:%.*]]
936
+ ; CHECK-NEXT: i32 44, label [[SW_BB2:%.*]]
937
+ ; CHECK-NEXT: i32 45, label [[SW_BB3:%.*]]
938
+ ; CHECK-NEXT: i32 46, label [[SW_BB4:%.*]]
939
939
; CHECK-NEXT: ]
940
940
; CHECK: sw.bb1:
941
941
; CHECK-NEXT: br label [[RETURN]]
@@ -1050,9 +1050,9 @@ define i32 @threecasesholes(i32 %c) {
1050
1050
; CHECK-LABEL: @threecasesholes(
1051
1051
; CHECK-NEXT: entry:
1052
1052
; CHECK-NEXT: switch i32 [[C:%.*]], label [[SW_DEFAULT:%.*]] [
1053
- ; CHECK-NEXT: i32 0, label [[RETURN:%.*]]
1054
- ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
1055
- ; CHECK-NEXT: i32 3, label [[SW_BB2:%.*]]
1053
+ ; CHECK-NEXT: i32 0, label [[RETURN:%.*]]
1054
+ ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
1055
+ ; CHECK-NEXT: i32 3, label [[SW_BB2:%.*]]
1056
1056
; CHECK-NEXT: ]
1057
1057
; CHECK: sw.bb1:
1058
1058
; CHECK-NEXT: br label [[RETURN]]
@@ -1142,9 +1142,9 @@ define ptr @tls(i32 %x) {
1142
1142
; CHECK-LABEL: @tls(
1143
1143
; CHECK-NEXT: entry:
1144
1144
; CHECK-NEXT: switch i32 [[X:%.*]], label [[SW_DEFAULT:%.*]] [
1145
- ; CHECK-NEXT: i32 0, label [[RETURN:%.*]]
1146
- ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
1147
- ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]]
1145
+ ; CHECK-NEXT: i32 0, label [[RETURN:%.*]]
1146
+ ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
1147
+ ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]]
1148
1148
; CHECK-NEXT: ]
1149
1149
; CHECK: sw.bb1:
1150
1150
; CHECK-NEXT: br label [[RETURN]]
@@ -1182,9 +1182,9 @@ define ptr @dllimport(i32 %x) {
1182
1182
; CHECK-LABEL: @dllimport(
1183
1183
; CHECK-NEXT: entry:
1184
1184
; CHECK-NEXT: switch i32 [[X:%.*]], label [[SW_DEFAULT:%.*]] [
1185
- ; CHECK-NEXT: i32 0, label [[RETURN:%.*]]
1186
- ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
1187
- ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]]
1185
+ ; CHECK-NEXT: i32 0, label [[RETURN:%.*]]
1186
+ ; CHECK-NEXT: i32 1, label [[SW_BB1:%.*]]
1187
+ ; CHECK-NEXT: i32 2, label [[SW_BB2:%.*]]
1188
1188
; CHECK-NEXT: ]
1189
1189
; CHECK: sw.bb1:
1190
1190
; CHECK-NEXT: br label [[RETURN]]
@@ -1476,11 +1476,11 @@ define void @pr20210(i8 %x, i1 %y) {
1476
1476
; CHECK-NEXT: br i1 [[Y:%.*]], label [[SW:%.*]], label [[INTERMEDIATE:%.*]]
1477
1477
; CHECK: sw:
1478
1478
; CHECK-NEXT: switch i8 [[X:%.*]], label [[END:%.*]] [
1479
- ; CHECK-NEXT: i8 7, label [[INTERMEDIATE]]
1480
- ; CHECK-NEXT: i8 3, label [[INTERMEDIATE]]
1481
- ; CHECK-NEXT: i8 2, label [[INTERMEDIATE]]
1482
- ; CHECK-NEXT: i8 1, label [[INTERMEDIATE]]
1483
- ; CHECK-NEXT: i8 0, label [[INTERMEDIATE]]
1479
+ ; CHECK-NEXT: i8 7, label [[INTERMEDIATE]]
1480
+ ; CHECK-NEXT: i8 3, label [[INTERMEDIATE]]
1481
+ ; CHECK-NEXT: i8 2, label [[INTERMEDIATE]]
1482
+ ; CHECK-NEXT: i8 1, label [[INTERMEDIATE]]
1483
+ ; CHECK-NEXT: i8 0, label [[INTERMEDIATE]]
1484
1484
; CHECK-NEXT: ]
1485
1485
; CHECK: intermediate:
1486
1486
; CHECK-NEXT: [[Z:%.*]] = zext i8 [[X]] to i32
@@ -1612,15 +1612,15 @@ define void @wineh_test(i64 %val) personality ptr @__CxxFrameHandler3 {
1612
1612
; CHECK-LABEL: @wineh_test(
1613
1613
; CHECK-NEXT: entry:
1614
1614
; CHECK-NEXT: invoke void @throw(i1 false)
1615
- ; CHECK-NEXT: to label [[UNREACHABLE:%.*]] unwind label [[CLEANUP1:%.*]]
1615
+ ; CHECK-NEXT: to label [[UNREACHABLE:%.*]] unwind label [[CLEANUP1:%.*]]
1616
1616
; CHECK: unreachable:
1617
1617
; CHECK-NEXT: unreachable
1618
1618
; CHECK: cleanup1:
1619
1619
; CHECK-NEXT: [[CLEANUPPAD1:%.*]] = cleanuppad within none []
1620
1620
; CHECK-NEXT: switch i64 [[VAL:%.*]], label [[CLEANUPDONE2:%.*]] [
1621
- ; CHECK-NEXT: i64 0, label [[CLEANUPDONE1:%.*]]
1622
- ; CHECK-NEXT: i64 1, label [[CLEANUPDONE1]]
1623
- ; CHECK-NEXT: i64 6, label [[CLEANUPDONE1]]
1621
+ ; CHECK-NEXT: i64 0, label [[CLEANUPDONE1:%.*]]
1622
+ ; CHECK-NEXT: i64 1, label [[CLEANUPDONE1]]
1623
+ ; CHECK-NEXT: i64 6, label [[CLEANUPDONE1]]
1624
1624
; CHECK-NEXT: ]
1625
1625
; CHECK: cleanupdone1:
1626
1626
; CHECK-NEXT: cleanupret from [[CLEANUPPAD1]] unwind label [[CLEANUP2:%.*]]
@@ -1733,9 +1733,9 @@ define i32 @signed_overflow2(i8 %n) {
1733
1733
; CHECK-NEXT: start:
1734
1734
; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2
1735
1735
; CHECK-NEXT: switch i2 [[TRUNC]], label [[BB1:%.*]] [
1736
- ; CHECK-NEXT: i2 1, label [[BB6:%.*]]
1737
- ; CHECK-NEXT: i2 -2, label [[BB4:%.*]]
1738
- ; CHECK-NEXT: i2 -1, label [[BB5:%.*]]
1736
+ ; CHECK-NEXT: i2 1, label [[BB6:%.*]]
1737
+ ; CHECK-NEXT: i2 -2, label [[BB4:%.*]]
1738
+ ; CHECK-NEXT: i2 -1, label [[BB5:%.*]]
1739
1739
; CHECK-NEXT: ]
1740
1740
; CHECK: bb1:
1741
1741
; CHECK-NEXT: unreachable
@@ -1772,6 +1772,57 @@ bb6: ; preds = %start, %bb3, %bb4,
1772
1772
ret i32 %.sroa.0.0
1773
1773
}
1774
1774
1775
+ ; This is the same as @signed_overflow2 except that the default case calls @exit(), so it
1776
+ ; isn't treated as unreachable
1777
+ define i32 @signed_overflow3 (i8 %n ) {
1778
+ ; CHECK-LABEL: @signed_overflow3(
1779
+ ; CHECK-NEXT: start:
1780
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2
1781
+ ; CHECK-NEXT: switch i2 [[TRUNC]], label [[START_UNREACHABLEDEFAULT:%.*]] [
1782
+ ; CHECK-NEXT: i2 1, label [[BB6:%.*]]
1783
+ ; CHECK-NEXT: i2 -2, label [[BB4:%.*]]
1784
+ ; CHECK-NEXT: i2 -1, label [[BB5:%.*]]
1785
+ ; CHECK-NEXT: i2 0, label [[BB1:%.*]]
1786
+ ; CHECK-NEXT: ]
1787
+ ; CHECK: start.unreachabledefault:
1788
+ ; CHECK-NEXT: unreachable
1789
+ ; CHECK: bb1:
1790
+ ; CHECK-NEXT: call void @exit(i32 1)
1791
+ ; CHECK-NEXT: unreachable
1792
+ ; CHECK: bb4:
1793
+ ; CHECK-NEXT: br label [[BB6]]
1794
+ ; CHECK: bb5:
1795
+ ; CHECK-NEXT: br label [[BB6]]
1796
+ ; CHECK: bb6:
1797
+ ; CHECK-NEXT: [[DOTSROA_0_0:%.*]] = phi i32 [ 4444, [[BB5]] ], [ 3333, [[BB4]] ], [ 2222, [[START:%.*]] ]
1798
+ ; CHECK-NEXT: ret i32 [[DOTSROA_0_0]]
1799
+ ;
1800
+ start:
1801
+ %trunc = trunc i8 %n to i2
1802
+ switch i2 %trunc , label %bb1 [
1803
+ i2 1 , label %bb3
1804
+ i2 -2 , label %bb4
1805
+ i2 -1 , label %bb5
1806
+ ]
1807
+
1808
+ bb1: ; preds = %start
1809
+ call void @exit (i32 1 )
1810
+ unreachable
1811
+
1812
+ bb3: ; preds = %start
1813
+ br label %bb6
1814
+
1815
+ bb4: ; preds = %start
1816
+ br label %bb6
1817
+
1818
+ bb5: ; preds = %start
1819
+ br label %bb6
1820
+
1821
+ bb6: ; preds = %start, %bb3, %bb4, %bb5
1822
+ %.sroa.0.0 = phi i32 [ 4444 , %bb5 ], [ 3333 , %bb4 ], [ 2222 , %bb3 ]
1823
+ ret i32 %.sroa.0.0
1824
+ }
1825
+
1775
1826
define i32 @signed_overflow_negative (i8 %n ) {
1776
1827
; CHECK-LABEL: @signed_overflow_negative(
1777
1828
; CHECK-NEXT: start:
0 commit comments