@@ -50,7 +50,7 @@ define i32 @f(i32 %c) {
5050; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 7
5151; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
5252; CHECK: switch.lookup:
53- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
53+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
5454; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [7 x i32], ptr @switch.table.f, i64 0, i64 [[TMP1]]
5555; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
5656; CHECK-NEXT: br label [[RETURN]]
@@ -91,7 +91,7 @@ define i8 @char(i32 %c) {
9191; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 9
9292; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
9393; CHECK: switch.lookup:
94- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
94+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
9595; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [9 x i8], ptr @switch.table.char, i64 0, i64 [[TMP1]]
9696; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i8, ptr [[SWITCH_GEP]], align 1
9797; CHECK-NEXT: br label [[RETURN]]
@@ -139,7 +139,7 @@ define void @h(i32 %x) {
139139; CHECK-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i32 [[X]], 8
140140; CHECK-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i32 89655594, [[SWITCH_SHIFTAMT]]
141141; CHECK-NEXT: [[SWITCH_MASKED:%.*]] = trunc i32 [[SWITCH_DOWNSHIFT]] to i8
142- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
142+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
143143; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x float], ptr @switch.table.h, i64 0, i64 [[TMP1]]
144144; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load float, ptr [[SWITCH_GEP]], align 4
145145; CHECK-NEXT: br label [[SW_EPILOG]]
@@ -185,7 +185,7 @@ define ptr @foostring(i32 %x) {
185185; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X:%.*]], 4
186186; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
187187; CHECK: switch.lookup:
188- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
188+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
189189; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x ptr], ptr @switch.table.foostring, i64 0, i64 [[TMP1]]
190190; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load ptr, ptr [[SWITCH_GEP]], align 8
191191; CHECK-NEXT: br label [[RETURN]]
@@ -225,10 +225,10 @@ define i32 @earlyreturncrash(i32 %x) {
225225; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X:%.*]], 4
226226; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[SW_EPILOG:%.*]]
227227; CHECK: switch.lookup:
228- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
228+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
229229; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.earlyreturncrash, i64 0, i64 [[TMP1]]
230230; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
231- ; CHECK-NEXT: [[TMP2:%.*]] = zext i32 [[X]] to i64
231+ ; CHECK-NEXT: [[TMP2:%.*]] = zext nneg i32 [[X]] to i64
232232; CHECK-NEXT: [[SWITCH_GEP1:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.earlyreturncrash.1, i64 0, i64 [[TMP2]]
233233; CHECK-NEXT: [[SWITCH_LOAD2:%.*]] = load i32, ptr [[SWITCH_GEP1]], align 4
234234; CHECK-NEXT: br label [[SW_EPILOG]]
@@ -410,7 +410,7 @@ define i32 @large(i32 %x) {
410410; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 199
411411; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
412412; CHECK: switch.lookup:
413- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
413+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
414414; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [199 x i32], ptr @switch.table.large, i64 0, i64 [[TMP1]]
415415; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
416416; CHECK-NEXT: br label [[RETURN]]
@@ -842,7 +842,7 @@ define i32 @cprop(i32 %x, i32 %y) {
842842; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 7
843843; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
844844; CHECK: switch.lookup:
845- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
845+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
846846; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [7 x i32], ptr @switch.table.cprop, i64 0, i64 [[TMP1]]
847847; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
848848; CHECK-NEXT: br label [[RETURN]]
@@ -893,7 +893,7 @@ define i32 @unreachable_case(i32 %x) {
893893; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X:%.*]], 9
894894; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
895895; CHECK: switch.lookup:
896- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
896+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
897897; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [9 x i32], ptr @switch.table.unreachable_case, i64 0, i64 [[TMP1]]
898898; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
899899; CHECK-NEXT: br label [[RETURN]]
@@ -929,7 +929,7 @@ return:
929929define i32 @unreachable_default (i32 %x ) {
930930; CHECK-LABEL: @unreachable_default(
931931; CHECK-NEXT: entry:
932- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
932+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
933933; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.unreachable_default, i64 0, i64 [[TMP0]]
934934; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
935935; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -1010,7 +1010,7 @@ define i32 @nodefaultnoholes(i32 %c) {
10101010; CHECK-NEXT: call void @exit(i32 1)
10111011; CHECK-NEXT: unreachable
10121012; CHECK: switch.lookup:
1013- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[C]] to i64
1013+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[C]] to i64
10141014; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.nodefaultnoholes, i64 0, i64 [[TMP1]]
10151015; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
10161016; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -1048,7 +1048,7 @@ define i32 @nodefaultwithholes(i32 %c) {
10481048; CHECK-NEXT: call void @exit(i32 1)
10491049; CHECK-NEXT: unreachable
10501050; CHECK: switch.lookup:
1051- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[C]] to i64
1051+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[C]] to i64
10521052; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [6 x i32], ptr @switch.table.nodefaultwithholes, i64 0, i64 [[TMP1]]
10531053; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
10541054; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -1114,7 +1114,7 @@ define i32 @threecases(i32 %c) {
11141114; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[C:%.*]], 3
11151115; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
11161116; CHECK: switch.lookup:
1117- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[C]] to i64
1117+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[C]] to i64
11181118; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [3 x i32], ptr @switch.table.threecases, i64 0, i64 [[TMP1]]
11191119; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
11201120; CHECK-NEXT: br label [[RETURN]]
@@ -2228,7 +2228,7 @@ return:
22282228define i32 @constant_hole_unreachable_default_firstundef (i32 %x ) {
22292229; CHECK-LABEL: @constant_hole_unreachable_default_firstundef(
22302230; CHECK-NEXT: entry:
2231- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
2231+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
22322232; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.constant_hole_unreachable_default_firstundef, i64 0, i64 [[TMP0]]
22332233; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
22342234; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -2255,7 +2255,7 @@ return:
22552255define i32 @constant_hole_unreachable_default_lastundef (i32 %x ) {
22562256; CHECK-LABEL: @constant_hole_unreachable_default_lastundef(
22572257; CHECK-NEXT: entry:
2258- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
2258+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
22592259; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.constant_hole_unreachable_default_lastundef, i64 0, i64 [[TMP0]]
22602260; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
22612261; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -2374,7 +2374,7 @@ return:
23742374define i32 @linearmap_hole_unreachable_default (i32 %x ) {
23752375; CHECK-LABEL: @linearmap_hole_unreachable_default(
23762376; CHECK-NEXT: entry:
2377- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
2377+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
23782378; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.linearmap_hole_unreachable_default, i64 0, i64 [[TMP0]]
23792379; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
23802380; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
0 commit comments