Skip to content

Commit ca61e6a

Browse files
authored
Revert "[CVP] Check whether the default case is reachable (#79993)" (#81585)
This reverts commit a034e65. Some protobuf users reported that this patch caused a significant compile-time regression because `TailDuplicator` works poorly with a specific pattern. We will reland it once the codegen issue is fixed.
1 parent 44706bd commit ca61e6a

File tree

3 files changed

+5
-341
lines changed

3 files changed

+5
-341
lines changed

llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp

-34
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ static bool processSwitch(SwitchInst *I, LazyValueInfo *LVI,
371371
{ // Scope for SwitchInstProfUpdateWrapper. It must not live during
372372
// ConstantFoldTerminator() as the underlying SwitchInst can be changed.
373373
SwitchInstProfUpdateWrapper SI(*I);
374-
unsigned ReachableCaseCount = 0;
375374

376375
for (auto CI = SI->case_begin(), CE = SI->case_end(); CI != CE;) {
377376
ConstantInt *Case = CI->getCaseValue();
@@ -408,33 +407,6 @@ static bool processSwitch(SwitchInst *I, LazyValueInfo *LVI,
408407

409408
// Increment the case iterator since we didn't delete it.
410409
++CI;
411-
++ReachableCaseCount;
412-
}
413-
414-
BasicBlock *DefaultDest = SI->getDefaultDest();
415-
if (ReachableCaseCount > 1 &&
416-
!isa<UnreachableInst>(DefaultDest->getFirstNonPHIOrDbg())) {
417-
ConstantRange CR = LVI->getConstantRangeAtUse(I->getOperandUse(0),
418-
/*UndefAllowed*/ false);
419-
// The default dest is unreachable if all cases are covered.
420-
if (!CR.isSizeLargerThan(ReachableCaseCount)) {
421-
BasicBlock *NewUnreachableBB =
422-
BasicBlock::Create(BB->getContext(), "default.unreachable",
423-
BB->getParent(), DefaultDest);
424-
new UnreachableInst(BB->getContext(), NewUnreachableBB);
425-
426-
DefaultDest->removePredecessor(BB);
427-
SI->setDefaultDest(NewUnreachableBB);
428-
429-
if (SuccessorsCount[DefaultDest] == 1)
430-
DTU.applyUpdatesPermissive(
431-
{{DominatorTree::Delete, BB, DefaultDest}});
432-
DTU.applyUpdatesPermissive(
433-
{{DominatorTree::Insert, BB, NewUnreachableBB}});
434-
435-
++NumDeadCases;
436-
Changed = true;
437-
}
438410
}
439411
}
440412

@@ -1255,12 +1227,6 @@ CorrelatedValuePropagationPass::run(Function &F, FunctionAnalysisManager &AM) {
12551227
if (!Changed) {
12561228
PA = PreservedAnalyses::all();
12571229
} else {
1258-
#if defined(EXPENSIVE_CHECKS)
1259-
assert(DT->verify(DominatorTree::VerificationLevel::Full));
1260-
#else
1261-
assert(DT->verify(DominatorTree::VerificationLevel::Fast));
1262-
#endif // EXPENSIVE_CHECKS
1263-
12641230
PA.preserve<DominatorTreeAnalysis>();
12651231
PA.preserve<LazyValueAnalysis>();
12661232
}

llvm/test/Transforms/CorrelatedValuePropagation/basic.ll

+5-6
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ define i32 @switch_range(i32 %cond) {
442442
; CHECK-NEXT: entry:
443443
; CHECK-NEXT: [[S:%.*]] = urem i32 [[COND:%.*]], 3
444444
; CHECK-NEXT: [[S1:%.*]] = add nuw nsw i32 [[S]], 1
445-
; CHECK-NEXT: switch i32 [[S1]], label [[DEFAULT_UNREACHABLE:%.*]] [
445+
; CHECK-NEXT: switch i32 [[S1]], label [[UNREACHABLE:%.*]] [
446446
; CHECK-NEXT: i32 1, label [[EXIT1:%.*]]
447447
; CHECK-NEXT: i32 2, label [[EXIT2:%.*]]
448448
; CHECK-NEXT: i32 3, label [[EXIT1]]
@@ -451,8 +451,6 @@ define i32 @switch_range(i32 %cond) {
451451
; CHECK-NEXT: ret i32 1
452452
; CHECK: exit2:
453453
; CHECK-NEXT: ret i32 2
454-
; CHECK: default.unreachable:
455-
; CHECK-NEXT: unreachable
456454
; CHECK: unreachable:
457455
; CHECK-NEXT: ret i32 0
458456
;
@@ -515,9 +513,10 @@ define i8 @switch_defaultdest_multipleuse(i8 %t0) {
515513
; CHECK-NEXT: entry:
516514
; CHECK-NEXT: [[O:%.*]] = or i8 [[T0:%.*]], 1
517515
; CHECK-NEXT: [[R:%.*]] = srem i8 1, [[O]]
518-
; CHECK-NEXT: br label [[EXIT:%.*]]
519-
; CHECK: default.unreachable:
520-
; CHECK-NEXT: unreachable
516+
; CHECK-NEXT: switch i8 [[R]], label [[EXIT:%.*]] [
517+
; CHECK-NEXT: i8 0, label [[EXIT]]
518+
; CHECK-NEXT: i8 1, label [[EXIT]]
519+
; CHECK-NEXT: ]
521520
; CHECK: exit:
522521
; CHECK-NEXT: ret i8 0
523522
;

llvm/test/Transforms/CorrelatedValuePropagation/switch.ll

-301
This file was deleted.

0 commit comments

Comments
 (0)