@@ -50,7 +50,7 @@ define i32 @f(i32 %c) {
50
50
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 7
51
51
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
52
52
; CHECK: switch.lookup:
53
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
53
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
54
54
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [7 x i32], ptr @switch.table.f, i64 0, i64 [[TMP1]]
55
55
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
56
56
; CHECK-NEXT: br label [[RETURN]]
@@ -91,7 +91,7 @@ define i8 @char(i32 %c) {
91
91
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 9
92
92
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
93
93
; CHECK: switch.lookup:
94
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
94
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
95
95
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [9 x i8], ptr @switch.table.char, i64 0, i64 [[TMP1]]
96
96
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i8, ptr [[SWITCH_GEP]], align 1
97
97
; CHECK-NEXT: br label [[RETURN]]
@@ -139,7 +139,7 @@ define void @h(i32 %x) {
139
139
; CHECK-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i32 [[X]], 8
140
140
; CHECK-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i32 89655594, [[SWITCH_SHIFTAMT]]
141
141
; 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
143
143
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x float], ptr @switch.table.h, i64 0, i64 [[TMP1]]
144
144
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load float, ptr [[SWITCH_GEP]], align 4
145
145
; CHECK-NEXT: br label [[SW_EPILOG]]
@@ -185,7 +185,7 @@ define ptr @foostring(i32 %x) {
185
185
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X:%.*]], 4
186
186
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
187
187
; CHECK: switch.lookup:
188
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
188
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
189
189
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x ptr], ptr @switch.table.foostring, i64 0, i64 [[TMP1]]
190
190
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load ptr, ptr [[SWITCH_GEP]], align 8
191
191
; CHECK-NEXT: br label [[RETURN]]
@@ -225,10 +225,10 @@ define i32 @earlyreturncrash(i32 %x) {
225
225
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X:%.*]], 4
226
226
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[SW_EPILOG:%.*]]
227
227
; CHECK: switch.lookup:
228
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
228
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
229
229
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.earlyreturncrash, i64 0, i64 [[TMP1]]
230
230
; 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
232
232
; CHECK-NEXT: [[SWITCH_GEP1:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.earlyreturncrash.1, i64 0, i64 [[TMP2]]
233
233
; CHECK-NEXT: [[SWITCH_LOAD2:%.*]] = load i32, ptr [[SWITCH_GEP1]], align 4
234
234
; CHECK-NEXT: br label [[SW_EPILOG]]
@@ -410,7 +410,7 @@ define i32 @large(i32 %x) {
410
410
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 199
411
411
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
412
412
; CHECK: switch.lookup:
413
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
413
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
414
414
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [199 x i32], ptr @switch.table.large, i64 0, i64 [[TMP1]]
415
415
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
416
416
; CHECK-NEXT: br label [[RETURN]]
@@ -842,7 +842,7 @@ define i32 @cprop(i32 %x, i32 %y) {
842
842
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[SWITCH_TABLEIDX]], 7
843
843
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
844
844
; CHECK: switch.lookup:
845
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[SWITCH_TABLEIDX]] to i64
845
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[SWITCH_TABLEIDX]] to i64
846
846
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [7 x i32], ptr @switch.table.cprop, i64 0, i64 [[TMP1]]
847
847
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
848
848
; CHECK-NEXT: br label [[RETURN]]
@@ -893,7 +893,7 @@ define i32 @unreachable_case(i32 %x) {
893
893
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X:%.*]], 9
894
894
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
895
895
; CHECK: switch.lookup:
896
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[X]] to i64
896
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[X]] to i64
897
897
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [9 x i32], ptr @switch.table.unreachable_case, i64 0, i64 [[TMP1]]
898
898
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
899
899
; CHECK-NEXT: br label [[RETURN]]
@@ -929,7 +929,7 @@ return:
929
929
define i32 @unreachable_default (i32 %x ) {
930
930
; CHECK-LABEL: @unreachable_default(
931
931
; CHECK-NEXT: entry:
932
- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
932
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
933
933
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.unreachable_default, i64 0, i64 [[TMP0]]
934
934
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
935
935
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -1010,7 +1010,7 @@ define i32 @nodefaultnoholes(i32 %c) {
1010
1010
; CHECK-NEXT: call void @exit(i32 1)
1011
1011
; CHECK-NEXT: unreachable
1012
1012
; CHECK: switch.lookup:
1013
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[C]] to i64
1013
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[C]] to i64
1014
1014
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i32], ptr @switch.table.nodefaultnoholes, i64 0, i64 [[TMP1]]
1015
1015
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
1016
1016
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -1048,7 +1048,7 @@ define i32 @nodefaultwithholes(i32 %c) {
1048
1048
; CHECK-NEXT: call void @exit(i32 1)
1049
1049
; CHECK-NEXT: unreachable
1050
1050
; CHECK: switch.lookup:
1051
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[C]] to i64
1051
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[C]] to i64
1052
1052
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [6 x i32], ptr @switch.table.nodefaultwithholes, i64 0, i64 [[TMP1]]
1053
1053
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
1054
1054
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -1114,7 +1114,7 @@ define i32 @threecases(i32 %c) {
1114
1114
; CHECK-NEXT: [[TMP0:%.*]] = icmp ult i32 [[C:%.*]], 3
1115
1115
; CHECK-NEXT: br i1 [[TMP0]], label [[SWITCH_LOOKUP:%.*]], label [[RETURN:%.*]]
1116
1116
; CHECK: switch.lookup:
1117
- ; CHECK-NEXT: [[TMP1:%.*]] = zext i32 [[C]] to i64
1117
+ ; CHECK-NEXT: [[TMP1:%.*]] = zext nneg i32 [[C]] to i64
1118
1118
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [3 x i32], ptr @switch.table.threecases, i64 0, i64 [[TMP1]]
1119
1119
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
1120
1120
; CHECK-NEXT: br label [[RETURN]]
@@ -2228,7 +2228,7 @@ return:
2228
2228
define i32 @constant_hole_unreachable_default_firstundef (i32 %x ) {
2229
2229
; CHECK-LABEL: @constant_hole_unreachable_default_firstundef(
2230
2230
; CHECK-NEXT: entry:
2231
- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
2231
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
2232
2232
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.constant_hole_unreachable_default_firstundef, i64 0, i64 [[TMP0]]
2233
2233
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
2234
2234
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -2255,7 +2255,7 @@ return:
2255
2255
define i32 @constant_hole_unreachable_default_lastundef (i32 %x ) {
2256
2256
; CHECK-LABEL: @constant_hole_unreachable_default_lastundef(
2257
2257
; CHECK-NEXT: entry:
2258
- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
2258
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
2259
2259
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.constant_hole_unreachable_default_lastundef, i64 0, i64 [[TMP0]]
2260
2260
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
2261
2261
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
@@ -2374,7 +2374,7 @@ return:
2374
2374
define i32 @linearmap_hole_unreachable_default (i32 %x ) {
2375
2375
; CHECK-LABEL: @linearmap_hole_unreachable_default(
2376
2376
; CHECK-NEXT: entry:
2377
- ; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[X:%.*]] to i64
2377
+ ; CHECK-NEXT: [[TMP0:%.*]] = zext nneg i32 [[X:%.*]] to i64
2378
2378
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.linearmap_hole_unreachable_default, i64 0, i64 [[TMP0]]
2379
2379
; CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
2380
2380
; CHECK-NEXT: ret i32 [[SWITCH_LOAD]]
0 commit comments