@@ -1778,6 +1778,57 @@ bb6: ; preds = %start, %bb3, %bb4,
1778
1778
ret i32 %.sroa.0.0
1779
1779
}
1780
1780
1781
+ ; This is the same as @signed_overflow2 except that the default case calls @exit(), so it
1782
+ ; isn't treated as unreachable
1783
+ define i32 @signed_overflow3 (i8 %n ) {
1784
+ ; CHECK-LABEL: @signed_overflow3(
1785
+ ; CHECK-NEXT: start:
1786
+ ; CHECK-NEXT: [[TRUNC:%.*]] = trunc i8 [[N:%.*]] to i2
1787
+ ; CHECK-NEXT: switch i2 [[TRUNC]], label [[START_UNREACHABLEDEFAULT:%.*]] [
1788
+ ; CHECK-NEXT: i2 1, label [[BB6:%.*]]
1789
+ ; CHECK-NEXT: i2 -2, label [[BB4:%.*]]
1790
+ ; CHECK-NEXT: i2 -1, label [[BB5:%.*]]
1791
+ ; CHECK-NEXT: i2 0, label [[BB1:%.*]]
1792
+ ; CHECK-NEXT: ]
1793
+ ; CHECK: start.unreachabledefault:
1794
+ ; CHECK-NEXT: unreachable
1795
+ ; CHECK: bb1:
1796
+ ; CHECK-NEXT: call void @exit(i32 1)
1797
+ ; CHECK-NEXT: unreachable
1798
+ ; CHECK: bb4:
1799
+ ; CHECK-NEXT: br label [[BB6]]
1800
+ ; CHECK: bb5:
1801
+ ; CHECK-NEXT: br label [[BB6]]
1802
+ ; CHECK: bb6:
1803
+ ; CHECK-NEXT: [[DOTSROA_0_0:%.*]] = phi i32 [ 4444, [[BB5]] ], [ 3333, [[BB4]] ], [ 2222, [[START:%.*]] ]
1804
+ ; CHECK-NEXT: ret i32 [[DOTSROA_0_0]]
1805
+ ;
1806
+ start:
1807
+ %trunc = trunc i8 %n to i2
1808
+ switch i2 %trunc , label %bb1 [
1809
+ i2 1 , label %bb3
1810
+ i2 -2 , label %bb4
1811
+ i2 -1 , label %bb5
1812
+ ]
1813
+
1814
+ bb1: ; preds = %start
1815
+ call void @exit (i32 1 )
1816
+ unreachable
1817
+
1818
+ bb3: ; preds = %start
1819
+ br label %bb6
1820
+
1821
+ bb4: ; preds = %start
1822
+ br label %bb6
1823
+
1824
+ bb5: ; preds = %start
1825
+ br label %bb6
1826
+
1827
+ bb6: ; preds = %start, %bb3, %bb4, %bb5
1828
+ %.sroa.0.0 = phi i32 [ 4444 , %bb5 ], [ 3333 , %bb4 ], [ 2222 , %bb3 ]
1829
+ ret i32 %.sroa.0.0
1830
+ }
1831
+
1781
1832
define i32 @signed_overflow_negative (i8 %n ) {
1782
1833
; CHECK-LABEL: @signed_overflow_negative(
1783
1834
; CHECK-NEXT: start:
0 commit comments