[llvm] 0733381 - Revert "Revert "Revert "Recommit "Revert "[CVP] processSwitch: Remove default case when switch cover all possible values."""""
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 23 18:44:46 PST 2021
In the future, please edit the title from git revert so it doesn't have a
long string of "Revert Revert". It makes it hard to know the current state
of the change without counting the number of Reverts.
~Craig
On Tue, Nov 23, 2021 at 6:26 PM Jun Ma via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
>
> Author: Jun Ma
> Date: 2021-11-24T10:26:37+08:00
> New Revision: 07333810caee48e94587891191a970be8a117fcf
>
> URL:
> https://github.com/llvm/llvm-project/commit/07333810caee48e94587891191a970be8a117fcf
> DIFF:
> https://github.com/llvm/llvm-project/commit/07333810caee48e94587891191a970be8a117fcf.diff
>
> LOG: Revert "Revert "Revert "Recommit "Revert "[CVP] processSwitch: Remove
> default case when switch cover all possible values."""""
>
> This reverts commit c93f93b2e3f28997f794265089fb8138dd5b5f13.
>
> Added:
>
>
> Modified:
> llvm/include/llvm/Transforms/Utils/Local.h
> llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
> llvm/lib/Transforms/Utils/Local.cpp
> llvm/lib/Transforms/Utils/SimplifyCFG.cpp
> llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
>
> Removed:
>
>
>
>
> ################################################################################
> diff --git a/llvm/include/llvm/Transforms/Utils/Local.h
> b/llvm/include/llvm/Transforms/Utils/Local.h
> index 72cb606eb51a2..3c529abce85a2 100644
> --- a/llvm/include/llvm/Transforms/Utils/Local.h
> +++ b/llvm/include/llvm/Transforms/Utils/Local.h
> @@ -55,7 +55,6 @@ class MDNode;
> class MemorySSAUpdater;
> class PHINode;
> class StoreInst;
> -class SwitchInst;
> class TargetLibraryInfo;
> class TargetTransformInfo;
>
> @@ -238,10 +237,6 @@ CallInst *createCallMatchingInvoke(InvokeInst *II);
> /// This function converts the specified invoek into a normall call.
> void changeToCall(InvokeInst *II, DomTreeUpdater *DTU = nullptr);
>
> -/// This function removes the default destination from the specified
> switch.
> -void createUnreachableSwitchDefault(SwitchInst *Switch,
> - DomTreeUpdater *DTU = nullptr);
> -
>
> ///===---------------------------------------------------------------------===//
> /// Dbg Intrinsic utilities
> ///
>
> diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
> b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
> index 71509ebb6a209..d1ae35cc17ab2 100644
> --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
> +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
> @@ -376,13 +376,7 @@ static bool processSwitch(SwitchInst *I,
> LazyValueInfo *LVI,
> // ConstantFoldTerminator() as the underlying SwitchInst can be
> changed.
> SwitchInstProfUpdateWrapper SI(*I);
>
> - APInt Low =
> - APInt::getSignedMaxValue(Cond->getType()->getScalarSizeInBits());
> - APInt High =
> - APInt::getSignedMinValue(Cond->getType()->getScalarSizeInBits());
> -
> - SwitchInst::CaseIt CI = SI->case_begin();
> - for (auto CE = SI->case_end(); CI != CE;) {
> + for (auto CI = SI->case_begin(), CE = SI->case_end(); CI != CE;) {
> ConstantInt *Case = CI->getCaseValue();
> LazyValueInfo::Tristate State =
> LVI->getPredicateAt(CmpInst::ICMP_EQ, Cond, Case, I,
> @@ -415,28 +409,9 @@ static bool processSwitch(SwitchInst *I,
> LazyValueInfo *LVI,
> break;
> }
>
> - // Get Lower/Upper bound from switch cases.
> - Low = APIntOps::smin(Case->getValue(), Low);
> - High = APIntOps::smax(Case->getValue(), High);
> -
> // Increment the case iterator since we didn't delete it.
> ++CI;
> }
> -
> - // Try to simplify default case as unreachable
> - if (CI == SI->case_end() && SI->getNumCases() != 0 &&
> -
> !isa<UnreachableInst>(SI->getDefaultDest()->getFirstNonPHIOrDbg())) {
> - const ConstantRange SIRange =
> - LVI->getConstantRange(SI->getCondition(), SI);
> -
> - // If the numbered switch cases cover the entire range of the
> condition,
> - // then the default case is not reachable.
> - if (SIRange.getSignedMin() == Low && SIRange.getSignedMax() == High
> &&
> - SI->getNumCases() == High - Low + 1) {
> - createUnreachableSwitchDefault(SI, &DTU);
> - Changed = true;
> - }
> - }
> }
>
> if (Changed)
>
> diff --git a/llvm/lib/Transforms/Utils/Local.cpp
> b/llvm/lib/Transforms/Utils/Local.cpp
> index 74ab37fadf36e..3e36f498523d6 100644
> --- a/llvm/lib/Transforms/Utils/Local.cpp
> +++ b/llvm/lib/Transforms/Utils/Local.cpp
> @@ -2190,26 +2190,6 @@ void llvm::changeToCall(InvokeInst *II,
> DomTreeUpdater *DTU) {
> DTU->applyUpdates({{DominatorTree::Delete, BB, UnwindDestBB}});
> }
>
> -void llvm::createUnreachableSwitchDefault(SwitchInst *Switch,
> - DomTreeUpdater *DTU) {
> - LLVM_DEBUG(dbgs() << "SimplifyCFG: switch default is dead.\n");
> - auto *BB = Switch->getParent();
> - auto *OrigDefaultBlock = Switch->getDefaultDest();
> - OrigDefaultBlock->removePredecessor(BB);
> - BasicBlock *NewDefaultBlock = BasicBlock::Create(
> - BB->getContext(), BB->getName() + ".unreachabledefault",
> BB->getParent(),
> - OrigDefaultBlock);
> - new UnreachableInst(Switch->getContext(), NewDefaultBlock);
> - Switch->setDefaultDest(&*NewDefaultBlock);
> - if (DTU) {
> - SmallVector<DominatorTree::UpdateType, 2> Updates;
> - Updates.push_back({DominatorTree::Insert, BB, &*NewDefaultBlock});
> - if (!is_contained(successors(BB), OrigDefaultBlock))
> - Updates.push_back({DominatorTree::Delete, BB, &*OrigDefaultBlock});
> - DTU->applyUpdates(Updates);
> - }
> -}
> -
> BasicBlock *llvm::changeToInvokeAndSplitBasicBlock(CallInst *CI,
> BasicBlock *UnwindEdge,
> DomTreeUpdater *DTU) {
>
> diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
> b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
> index f467de5f924e7..32b5855ef9547 100644
> --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
> +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
> @@ -4782,6 +4782,26 @@ static bool
> CasesAreContiguous(SmallVectorImpl<ConstantInt *> &Cases) {
> return true;
> }
>
> +static void createUnreachableSwitchDefault(SwitchInst *Switch,
> + DomTreeUpdater *DTU) {
> + LLVM_DEBUG(dbgs() << "SimplifyCFG: switch default is dead.\n");
> + auto *BB = Switch->getParent();
> + auto *OrigDefaultBlock = Switch->getDefaultDest();
> + OrigDefaultBlock->removePredecessor(BB);
> + BasicBlock *NewDefaultBlock = BasicBlock::Create(
> + BB->getContext(), BB->getName() + ".unreachabledefault",
> BB->getParent(),
> + OrigDefaultBlock);
> + new UnreachableInst(Switch->getContext(), NewDefaultBlock);
> + Switch->setDefaultDest(&*NewDefaultBlock);
> + if (DTU) {
> + SmallVector<DominatorTree::UpdateType, 2> Updates;
> + Updates.push_back({DominatorTree::Insert, BB, &*NewDefaultBlock});
> + if (!is_contained(successors(BB), OrigDefaultBlock))
> + Updates.push_back({DominatorTree::Delete, BB, &*OrigDefaultBlock});
> + DTU->applyUpdates(Updates);
> + }
> +}
> +
> /// Turn a switch with two reachable destinations into an integer range
> /// comparison and branch.
> bool SimplifyCFGOpt::TurnSwitchRangeIntoICmp(SwitchInst *SI,
>
> diff --git a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
> b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
> index 9caaacfa00d21..7cea6ace5df59 100644
> --- a/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
> +++ b/llvm/test/Transforms/CorrelatedValuePropagation/basic.ll
> @@ -382,7 +382,7 @@ define i32 @switch_range(i32 %cond) {
> ; CHECK-NEXT: entry:
> ; CHECK-NEXT: [[S:%.*]] = urem i32 [[COND:%.*]], 3
> ; CHECK-NEXT: [[S1:%.*]] = add nuw nsw i32 [[S]], 1
> -; CHECK-NEXT: switch i32 [[S1]], label
> [[ENTRY_UNREACHABLEDEFAULT:%.*]] [
> +; CHECK-NEXT: switch i32 [[S1]], label [[UNREACHABLE:%.*]] [
> ; CHECK-NEXT: i32 1, label [[EXIT1:%.*]]
> ; CHECK-NEXT: i32 2, label [[EXIT2:%.*]]
> ; CHECK-NEXT: i32 3, label [[EXIT1]]
> @@ -391,8 +391,6 @@ define i32 @switch_range(i32 %cond) {
> ; CHECK-NEXT: ret i32 1
> ; CHECK: exit2:
> ; CHECK-NEXT: ret i32 2
> -; CHECK: entry.unreachabledefault:
> -; CHECK-NEXT: unreachable
> ; CHECK: unreachable:
> ; CHECK-NEXT: ret i32 0
> ;
> @@ -455,9 +453,10 @@ define i8 @switch_defaultdest_multipleuse(i8 %t0) {
> ; CHECK-NEXT: entry:
> ; CHECK-NEXT: [[O:%.*]] = or i8 [[T0:%.*]], 1
> ; CHECK-NEXT: [[R:%.*]] = srem i8 1, [[O]]
> -; CHECK-NEXT: br label [[EXIT:%.*]]
> -; CHECK: entry.unreachabledefault:
> -; CHECK-NEXT: unreachable
> +; CHECK-NEXT: switch i8 [[R]], label [[EXIT:%.*]] [
> +; CHECK-NEXT: i8 0, label [[EXIT]]
> +; CHECK-NEXT: i8 1, label [[EXIT]]
> +; CHECK-NEXT: ]
> ; CHECK: exit:
> ; CHECK-NEXT: ret i8 0
> ;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211123/a9aa1bf0/attachment.html>
More information about the llvm-commits
mailing list