Skip to content

Commit d766aff

Browse files
committed
Rebase
1 parent 7d2123e commit d766aff

File tree

3 files changed

+23
-32
lines changed

3 files changed

+23
-32
lines changed

llvm/lib/Transforms/Utils/SimplifyCFG.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7161,7 +7161,7 @@ static bool switchToLookupTable(SwitchInst *SI, IRBuilder<> &Builder,
71617161

71627162
/// Try to reduce the range of cases with an unreachable default.
71637163
static bool
7164-
ReduceSwitchRangeWithUnreachableDefault(SwitchInst *SI,
7164+
reduceSwitchRangeWithUnreachableDefault(SwitchInst *SI,
71657165
const SmallVectorImpl<int64_t> &Values,
71667166
uint64_t Base, IRBuilder<> &Builder) {
71677167
bool HasDefault =
@@ -7203,12 +7203,14 @@ ReduceSwitchRangeWithUnreachableDefault(SwitchInst *SI,
72037203
CommonBits);
72047204

72057205
llvm::sort(NewValues);
7206-
if (!isSwitchDense(NewValues))
7206+
if (!isSwitchDense(NewValues)) {
72077207
// Transform didn't create a dense switch.
72087208
return false;
7209+
}
72097210

72107211
auto *Ty = cast<IntegerType>(SI->getCondition()->getType());
7211-
APInt Offset(Ty->getBitWidth(), BestOffset - Base);
7212+
APInt Offset(Ty->getBitWidth(), BestOffset - Base, /*isSigned=*/true,
7213+
/*implicitTrunc=*/true);
72127214
auto *Index = Builder.CreateAnd(
72137215
Builder.CreateAdd(SI->getCondition(), ConstantInt::get(Ty, Offset)),
72147216
Mask);
@@ -7261,7 +7263,7 @@ static bool reduceSwitchRange(SwitchInst *SI, IRBuilder<> &Builder,
72617263
for (auto &V : Values)
72627264
V -= (uint64_t)(Base);
72637265

7264-
if (ReduceSwitchRangeWithUnreachableDefault(SI, Values, Base, Builder))
7266+
if (reduceSwitchRangeWithUnreachableDefault(SI, Values, Base, Builder))
72657267
return true;
72667268

72677269
// Now we have signed numbers that have been shifted so that, given enough

llvm/test/Transforms/SimplifyCFG/RISCV/switch-of-powers-of-two.ll

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -157,22 +157,10 @@ return:
157157
define i32 @unable_to_create_dense_switch(i32 %x) {
158158
; CHECK-LABEL: @unable_to_create_dense_switch(
159159
; CHECK-NEXT: entry:
160-
; CHECK-NEXT: switch i32 [[X:%.*]], label [[DEFAULT_CASE:%.*]] [
161-
; CHECK-NEXT: i32 1, label [[RETURN:%.*]]
162-
; CHECK-NEXT: i32 2, label [[BB3:%.*]]
163-
; CHECK-NEXT: i32 4, label [[BB4:%.*]]
164-
; CHECK-NEXT: i32 4096, label [[BB5:%.*]]
165-
; CHECK-NEXT: ]
166-
; CHECK: default_case:
167-
; CHECK-NEXT: unreachable
168-
; CHECK: bb3:
169-
; CHECK-NEXT: br label [[RETURN]]
170-
; CHECK: bb4:
171-
; CHECK-NEXT: br label [[RETURN]]
172-
; CHECK: bb5:
173-
; CHECK-NEXT: br label [[RETURN]]
174-
; CHECK: return:
175-
; CHECK-NEXT: [[P:%.*]] = phi i32 [ 1, [[BB3]] ], [ 0, [[BB4]] ], [ 42, [[BB5]] ], [ 2, [[ENTRY:%.*]] ]
160+
; CHECK-NEXT: [[TMP0:%.*]] = add i32 [[X:%.*]], 0
161+
; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 4095
162+
; CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [5 x i32], ptr @switch.table.unable_to_create_dense_switch, i32 0, i32 [[TMP1]]
163+
; CHECK-NEXT: [[P:%.*]] = load i32, ptr [[SWITCH_GEP]], align 4
176164
; CHECK-NEXT: ret i32 [[P]]
177165
;
178166
entry:
@@ -200,11 +188,13 @@ declare i32 @bar(i32)
200188
define i32 @unable_to_generate_lookup_table(i32 %x, i32 %y) {
201189
; RV64I-LABEL: @unable_to_generate_lookup_table(
202190
; RV64I-NEXT: entry:
203-
; RV64I-NEXT: switch i32 [[Y:%.*]], label [[DEFAULT_CASE:%.*]] [
191+
; RV64I-NEXT: [[TMP0:%.*]] = add i32 [[Y1:%.*]], 0
192+
; RV64I-NEXT: [[Y:%.*]] = and i32 [[TMP0]], 63
193+
; RV64I-NEXT: switch i32 [[Y]], label [[DEFAULT_CASE:%.*]] [
204194
; RV64I-NEXT: i32 1, label [[BB2:%.*]]
205195
; RV64I-NEXT: i32 2, label [[BB3:%.*]]
206196
; RV64I-NEXT: i32 8, label [[BB4:%.*]]
207-
; RV64I-NEXT: i32 64, label [[BB5:%.*]]
197+
; RV64I-NEXT: i32 0, label [[BB5:%.*]]
208198
; RV64I-NEXT: ]
209199
; RV64I: default_case:
210200
; RV64I-NEXT: unreachable

llvm/test/Transforms/SimplifyCFG/rangereduce.ll

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,9 @@ define i8 @reduce_masked_common_high_bits_fail(i32 %0) {
369369
; CHECK-LABEL: @reduce_masked_common_high_bits_fail(
370370
; CHECK-NEXT: start:
371371
; CHECK-NEXT: switch i32 [[TMP0:%.*]], label [[BB2:%.*]] [
372-
; CHECK-NEXT: i32 128, label [[BB5:%.*]]
373-
; CHECK-NEXT: i32 129, label [[BB4:%.*]]
374-
; CHECK-NEXT: i32 511, label [[BB1:%.*]]
372+
; CHECK-NEXT: i32 128, label [[BB5:%.*]]
373+
; CHECK-NEXT: i32 129, label [[BB4:%.*]]
374+
; CHECK-NEXT: i32 511, label [[BB1:%.*]]
375375
; CHECK-NEXT: ]
376376
; CHECK: bb2:
377377
; CHECK-NEXT: unreachable
@@ -409,19 +409,18 @@ define i8 @reduce_masked_default_reachable(i32 %0) {
409409
; CHECK-LABEL: @reduce_masked_default_reachable(
410410
; CHECK-NEXT: start:
411411
; CHECK-NEXT: switch i32 [[TMP0:%.*]], label [[COMMON_RET:%.*]] [
412-
; CHECK-NEXT: i32 0, label [[BB5:%.*]]
413-
; CHECK-NEXT: i32 1, label [[BB4:%.*]]
414-
; CHECK-NEXT: i32 255, label [[BB1:%.*]]
412+
; CHECK-NEXT: i32 0, label [[BB5:%.*]]
413+
; CHECK-NEXT: i32 1, label [[BB4:%.*]]
414+
; CHECK-NEXT: i32 255, label [[BB1:%.*]]
415415
; CHECK-NEXT: ]
416416
; CHECK: common.ret:
417-
; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i8 [ [[DOT0:%.*]], [[BB5]] ], [ 24, [[START:%.*]] ]
417+
; CHECK-NEXT: [[COMMON_RET_OP:%.*]] = phi i8 [ 24, [[START:%.*]] ], [ -1, [[BB1]] ], [ 1, [[BB4]] ], [ 0, [[BB5]] ]
418418
; CHECK-NEXT: ret i8 [[COMMON_RET_OP]]
419419
; CHECK: bb4:
420-
; CHECK-NEXT: br label [[BB5]]
420+
; CHECK-NEXT: br label [[COMMON_RET]]
421421
; CHECK: bb1:
422-
; CHECK-NEXT: br label [[BB5]]
422+
; CHECK-NEXT: br label [[COMMON_RET]]
423423
; CHECK: bb5:
424-
; CHECK-NEXT: [[DOT0]] = phi i8 [ -1, [[BB1]] ], [ 1, [[BB4]] ], [ 0, [[START]] ]
425424
; CHECK-NEXT: br label [[COMMON_RET]]
426425
;
427426
start:

0 commit comments

Comments
 (0)