@@ -166,23 +166,11 @@ end:
166166define i4 @bitmap_no_default (i32 %x ) {
167167; OPTNOLUT-LABEL: define i4 @bitmap_no_default(
168168; OPTNOLUT-SAME: i32 [[X:%.*]]) {
169- ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
170- ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
171- ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
172- ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
173- ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
174- ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
175- ; OPTNOLUT-NEXT: ]
176- ; OPTNOLUT: [[CASE1]]:
177- ; OPTNOLUT-NEXT: br label %[[END]]
178- ; OPTNOLUT: [[CASE2]]:
179- ; OPTNOLUT-NEXT: br label %[[END]]
180- ; OPTNOLUT: [[CASE3]]:
181- ; OPTNOLUT-NEXT: br label %[[END]]
182- ; OPTNOLUT: [[DEFAULT]]:
183- ; OPTNOLUT-NEXT: unreachable
184- ; OPTNOLUT: [[END]]:
185- ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = phi i4 [ 2, %[[CASE1]] ], [ 4, %[[CASE2]] ], [ -8, %[[CASE3]] ], [ 0, %[[ENTRY]] ]
169+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
170+ ; OPTNOLUT-NEXT: [[SWITCH_CAST:%.*]] = trunc i32 [[X]] to i16
171+ ; OPTNOLUT-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i16 [[SWITCH_CAST]], 4
172+ ; OPTNOLUT-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i16 -31712, [[SWITCH_SHIFTAMT]]
173+ ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = trunc i16 [[SWITCH_DOWNSHIFT]] to i4
186174; OPTNOLUT-NEXT: ret i4 [[SWITCH_MASKED]]
187175;
188176; TTINOLUT-LABEL: define i4 @bitmap_no_default(
@@ -221,23 +209,13 @@ end:
221209define i4 @bitmap_with_default (i32 %x ) {
222210; OPTNOLUT-LABEL: define i4 @bitmap_with_default(
223211; OPTNOLUT-SAME: i32 [[X:%.*]]) {
224- ; OPTNOLUT-NEXT: [[ENTRY:.*]]:
225- ; OPTNOLUT-NEXT: switch i32 [[X]], label %[[DEFAULT:.*]] [
226- ; OPTNOLUT-NEXT: i32 0, label %[[END:.*]]
227- ; OPTNOLUT-NEXT: i32 1, label %[[CASE1:.*]]
228- ; OPTNOLUT-NEXT: i32 2, label %[[CASE2:.*]]
229- ; OPTNOLUT-NEXT: i32 3, label %[[CASE3:.*]]
230- ; OPTNOLUT-NEXT: ]
231- ; OPTNOLUT: [[CASE1]]:
232- ; OPTNOLUT-NEXT: br label %[[END]]
233- ; OPTNOLUT: [[CASE2]]:
234- ; OPTNOLUT-NEXT: br label %[[END]]
235- ; OPTNOLUT: [[CASE3]]:
236- ; OPTNOLUT-NEXT: br label %[[END]]
237- ; OPTNOLUT: [[DEFAULT]]:
238- ; OPTNOLUT-NEXT: br label %[[END]]
239- ; OPTNOLUT: [[END]]:
240- ; OPTNOLUT-NEXT: [[IDX:%.*]] = phi i4 [ 2, %[[CASE1]] ], [ 4, %[[CASE2]] ], [ -8, %[[CASE3]] ], [ -1, %[[DEFAULT]] ], [ 0, %[[ENTRY]] ]
212+ ; OPTNOLUT-NEXT: [[ENTRY:.*:]]
213+ ; OPTNOLUT-NEXT: [[TMP0:%.*]] = icmp ult i32 [[X]], 4
214+ ; OPTNOLUT-NEXT: [[SWITCH_CAST:%.*]] = trunc i32 [[X]] to i16
215+ ; OPTNOLUT-NEXT: [[SWITCH_SHIFTAMT:%.*]] = mul nuw nsw i16 [[SWITCH_CAST]], 4
216+ ; OPTNOLUT-NEXT: [[SWITCH_DOWNSHIFT:%.*]] = lshr i16 -31712, [[SWITCH_SHIFTAMT]]
217+ ; OPTNOLUT-NEXT: [[SWITCH_MASKED:%.*]] = trunc i16 [[SWITCH_DOWNSHIFT]] to i4
218+ ; OPTNOLUT-NEXT: [[IDX:%.*]] = select i1 [[TMP0]], i4 [[SWITCH_MASKED]], i4 -1
241219; OPTNOLUT-NEXT: ret i4 [[IDX]]
242220;
243221; TTINOLUT-LABEL: define i4 @bitmap_with_default(
0 commit comments