[llvm] r295992 - [InstCombine] use loop instead of recursion to peek through FPExt; NFCI
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Thu Feb 23 08:39:51 PST 2017
Author: spatel
Date: Thu Feb 23 10:39:51 2017
New Revision: 295992
URL: http://llvm.org/viewvc/llvm-project?rev=295992&view=rev
Log:
[InstCombine] use loop instead of recursion to peek through FPExt; NFCI
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp?rev=295992&r1=295991&r2=295992&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCasts.cpp Thu Feb 23 10:39:51 2017
@@ -1223,17 +1223,15 @@ static Constant *fitsInFPType(ConstantFP
return nullptr;
}
-/// If this is a floating-point extension instruction, look
-/// through it until we get the source value.
+/// Look through floating-point extensions until we get the source value.
static Value *lookThroughFPExtensions(Value *V) {
- if (Instruction *I = dyn_cast<Instruction>(V))
- if (I->getOpcode() == Instruction::FPExt)
- return lookThroughFPExtensions(I->getOperand(0));
+ while (auto *FPExt = dyn_cast<FPExtInst>(V))
+ V = FPExt->getOperand(0);
// If this value is a constant, return the constant in the smallest FP type
// that can accurately represent it. This allows us to turn
// (float)((double)X+2.0) into x+2.0f.
- if (ConstantFP *CFP = dyn_cast<ConstantFP>(V)) {
+ if (auto *CFP = dyn_cast<ConstantFP>(V)) {
if (CFP->getType() == Type::getPPC_FP128Ty(V->getContext()))
return V; // No constant folding of this.
// See if the value can be truncated to half and then reextended.
More information about the llvm-commits
mailing list