[llvm-branch-commits] [llvm] 305fcc9 - [LoopIdiomRecognize] Merge a conditional operator with an earlier if and remove an extra temporary variable. NFC
Craig Topper via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Dec 6 15:28:04 PST 2020
Author: Craig Topper
Date: 2020-12-06T15:23:18-08:00
New Revision: 305fcc91225b5c8fa840e8d94d01af1f70bc5445
URL: https://github.com/llvm/llvm-project/commit/305fcc91225b5c8fa840e8d94d01af1f70bc5445
DIFF: https://github.com/llvm/llvm-project/commit/305fcc91225b5c8fa840e8d94d01af1f70bc5445.diff
LOG: [LoopIdiomRecognize] Merge a conditional operator with an earlier if and remove an extra temporary variable. NFC
The CountPrev variable was only used to forward a value from
the if statement to the conditional operator under the same
condition.
While there move some variable declarations to their first
assignment.
Added:
Modified:
llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
index 526f1fe2388f..7e69cc5beffe 100644
--- a/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
@@ -1717,11 +1717,13 @@ void LoopIdiomRecognize::transformLoopToCountable(
// Step 1: Insert the CTLZ/CTTZ instruction at the end of the preheader block
IRBuilder<> Builder(PreheaderBr);
Builder.SetCurrentDebugLocation(DL);
- Value *FFS, *Count, *CountPrev, *NewCount, *InitXNext;
// Count = BitWidth - CTLZ(InitX);
+ // NewCount = Count;
// If there are uses of CntPhi create:
- // CountPrev = BitWidth - CTLZ(InitX >> 1);
+ // NewCount = BitWidth - CTLZ(InitX >> 1);
+ // Count = NewCount + 1;
+ Value *InitXNext;
if (IsCntPhiUsedOutsideLoop) {
if (DefX->getOpcode() == Instruction::AShr)
InitXNext =
@@ -1736,21 +1738,18 @@ void LoopIdiomRecognize::transformLoopToCountable(
llvm_unreachable("Unexpected opcode!");
} else
InitXNext = InitX;
- FFS = createFFSIntrinsic(Builder, InitXNext, DL, ZeroCheck, IntrinID);
- Count = Builder.CreateSub(
- ConstantInt::get(FFS->getType(),
- FFS->getType()->getIntegerBitWidth()),
+ Value *FFS = createFFSIntrinsic(Builder, InitXNext, DL, ZeroCheck, IntrinID);
+ Value *Count = Builder.CreateSub(
+ ConstantInt::get(FFS->getType(), FFS->getType()->getIntegerBitWidth()),
FFS);
+ Value *NewCount = Count;
if (IsCntPhiUsedOutsideLoop) {
- CountPrev = Count;
- Count = Builder.CreateAdd(
- CountPrev,
- ConstantInt::get(CountPrev->getType(), 1));
+ NewCount = Count;
+ Count = Builder.CreateAdd(Count, ConstantInt::get(Count->getType(), 1));
}
- NewCount = Builder.CreateZExtOrTrunc(
- IsCntPhiUsedOutsideLoop ? CountPrev : Count,
- cast<IntegerType>(CntInst->getType()));
+ NewCount = Builder.CreateZExtOrTrunc(NewCount,
+ cast<IntegerType>(CntInst->getType()));
// If the counter's initial value is not zero, insert Add Inst.
Value *CntInitVal = CntPhi->getIncomingValueForBlock(Preheader);
More information about the llvm-branch-commits
mailing list