[llvm] 68490ae - [NFC] Move lambdae into static functions
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 16 19:13:06 PST 2020
Might be worth having a bit more detail/justification for changes like
this. Presumably the author was comfortable with this phrasing - is
this change intended to stage these functions for later reuse? Some
other purpose?
On Fri, Nov 13, 2020 at 2:08 AM Max Kazantsev via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
>
> Author: Max Kazantsev
> Date: 2020-11-13T17:07:25+07:00
> New Revision: 68490aec4e19d72b9249f3144380f006df23aac5
>
> URL: https://github.com/llvm/llvm-project/commit/68490aec4e19d72b9249f3144380f006df23aac5
> DIFF: https://github.com/llvm/llvm-project/commit/68490aec4e19d72b9249f3144380f006df23aac5.diff
>
> LOG: [NFC] Move lambdae into static functions
>
> Added:
>
>
> Modified:
> llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
>
> Removed:
>
>
>
> ################################################################################
> diff --git a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> index 4c31064a77da..dfcf89f6d225 100644
> --- a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> +++ b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
> @@ -1350,6 +1350,41 @@ analyzeCond(const Loop *L, BranchInst *BI, ScalarEvolution *SE,
> return CanBeReplacedWithInvariant;
> }
>
> +static void replaceExitCond(BranchInst *BI, Value *NewCond,
> + SmallVectorImpl<WeakTrackingVH> &DeadInsts) {
> + auto *OldCond = BI->getCondition();
> + BI->setCondition(NewCond);
> + if (OldCond->use_empty())
> + DeadInsts.emplace_back(OldCond);
> +}
> +
> +static void foldExit(const Loop *L, BasicBlock *ExitingBB, bool IsTaken,
> + SmallVectorImpl<WeakTrackingVH> &DeadInsts) {
> + BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
> + bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB));
> + auto *OldCond = BI->getCondition();
> + auto *NewCond =
> + ConstantInt::get(OldCond->getType(), IsTaken ? ExitIfTrue : !ExitIfTrue);
> + replaceExitCond(BI, NewCond, DeadInsts);
> +}
> +
> +static void replaceWithInvariantCond(
> + const Loop *L, BasicBlock *ExitingBB, ICmpInst::Predicate InvariantPred,
> + const SCEV *InvariantLHS, const SCEV *InvariantRHS, SCEVExpander &Rewriter,
> + SmallVectorImpl<WeakTrackingVH> &DeadInsts) {
> + BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
> + Rewriter.setInsertPoint(BI);
> + auto *LHSV = Rewriter.expandCodeFor(InvariantLHS);
> + auto *RHSV = Rewriter.expandCodeFor(InvariantRHS);
> + bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB));
> + if (ExitIfTrue)
> + InvariantPred = ICmpInst::getInversePredicate(InvariantPred);
> + IRBuilder<> Builder(BI);
> + auto *NewCond = Builder.CreateICmp(InvariantPred, LHSV, RHSV,
> + BI->getCondition()->getName());
> + replaceExitCond(BI, NewCond, DeadInsts);
> +}
> +
> bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> SmallVector<BasicBlock*, 16> ExitingBlocks;
> L->getExitingBlocks(ExitingBlocks);
> @@ -1409,38 +1444,6 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> }
> #endif
>
> - auto ReplaceExitCond = [&](BranchInst *BI, Value *NewCond) {
> - auto *OldCond = BI->getCondition();
> - BI->setCondition(NewCond);
> - if (OldCond->use_empty())
> - DeadInsts.emplace_back(OldCond);
> - };
> -
> - auto FoldExit = [&](BasicBlock *ExitingBB, bool IsTaken) {
> - BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
> - bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB));
> - auto *OldCond = BI->getCondition();
> - auto *NewCond = ConstantInt::get(OldCond->getType(),
> - IsTaken ? ExitIfTrue : !ExitIfTrue);
> - ReplaceExitCond(BI, NewCond);
> - };
> -
> - auto ReplaceWithInvariantCond = [&](
> - BasicBlock *ExitingBB, ICmpInst::Predicate InvariantPred,
> - const SCEV *InvariantLHS, const SCEV *InvariantRHS) {
> - BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
> - Rewriter.setInsertPoint(BI);
> - auto *LHSV = Rewriter.expandCodeFor(InvariantLHS);
> - auto *RHSV = Rewriter.expandCodeFor(InvariantRHS);
> - bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB));
> - if (ExitIfTrue)
> - InvariantPred = ICmpInst::getInversePredicate(InvariantPred);
> - IRBuilder<> Builder(BI);
> - auto *NewCond = Builder.CreateICmp(InvariantPred, LHSV, RHSV,
> - BI->getCondition()->getName());
> - ReplaceExitCond(BI, NewCond);
> - };
> -
> bool Changed = false;
> bool SkipLastIter = false;
> SmallSet<const SCEV*, 8> DominatingExitCounts;
> @@ -1450,9 +1453,8 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> // Okay, we do not know the exit count here. Can we at least prove that it
> // will remain the same within iteration space?
> auto *BI = cast<BranchInst>(ExitingBB->getTerminator());
> - auto OptimizeCond = [this, L, BI, ExitingBB, MaxExitCount, &FoldExit,
> - &ReplaceWithInvariantCond](bool Inverted,
> - bool SkipLastIter) {
> + auto OptimizeCond = [this, L, BI, ExitingBB, MaxExitCount, &Rewriter](
> + bool Inverted, bool SkipLastIter) {
> const SCEV *MaxIter = MaxExitCount;
> if (SkipLastIter) {
> const SCEV *One = SE->getOne(MaxIter->getType());
> @@ -1463,11 +1465,11 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> switch (analyzeCond(L, BI, SE, Inverted, MaxIter, InvariantPred,
> InvariantLHS, InvariantRHS)) {
> case CanBeRemoved:
> - FoldExit(ExitingBB, Inverted);
> + foldExit(L, ExitingBB, Inverted, DeadInsts);
> return true;
> case CanBeReplacedWithInvariant: {
> - ReplaceWithInvariantCond(ExitingBB, InvariantPred, InvariantLHS,
> - InvariantRHS);
> + replaceWithInvariantCond(L, ExitingBB, InvariantPred, InvariantLHS,
> + InvariantRHS, Rewriter, DeadInsts);
> return true;
> }
> case CannotOptimize:
> @@ -1511,7 +1513,7 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> // TODO: Given we know the backedge can't be taken, we should go ahead
> // and break it. Or at least, kill all the header phis and simplify.
> if (ExitCount->isZero()) {
> - FoldExit(ExitingBB, true);
> + foldExit(L, ExitingBB, true, DeadInsts);
> Changed = true;
> continue;
> }
> @@ -1533,7 +1535,7 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> // one?
> if (SE->isLoopEntryGuardedByCond(L, CmpInst::ICMP_ULT,
> MaxExitCount, ExitCount)) {
> - FoldExit(ExitingBB, false);
> + foldExit(L, ExitingBB, false, DeadInsts);
> Changed = true;
> continue;
> }
> @@ -1543,7 +1545,7 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L, SCEVExpander &Rewriter) {
> // exiting iteration, but (from the visit order) strictly follows another
> // which does the same and is thus dead.
> if (!DominatingExitCounts.insert(ExitCount).second) {
> - FoldExit(ExitingBB, false);
> + foldExit(L, ExitingBB, false, DeadInsts);
> Changed = true;
> continue;
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list