diff options
author | Craig Topper <craig.topper@sifive.com> | 2020-12-06 11:44:22 -0800 |
---|---|---|
committer | Craig Topper <craig.topper@sifive.com> | 2020-12-06 15:23:18 -0800 |
commit | 305fcc91225b5c8fa840e8d94d01af1f70bc5445 (patch) | |
tree | 9ee25fd41cf1ade56f2fd5c393f34a199f516a3d /llvm/lib/Transforms/Scalar | |
parent | 6785ca01248ce271dfff16e03cce82f649fa14f7 (diff) | |
download | llvm-project-305fcc91225b5c8fa840e8d94d01af1f70bc5445.tar.gz |
[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.
Diffstat (limited to 'llvm/lib/Transforms/Scalar')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopIdiomRecognize.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
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); |