diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h index 60065731784a3..d825a0796c5d3 100644 --- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h +++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h @@ -882,33 +882,32 @@ class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase { if (A->isStaticAlloca()) return TTI::TCC_Free; - if (const GEPOperator *GEP = dyn_cast(U)) { - return static_cast(this)->getGEPCost(GEP->getSourceElementType(), - GEP->getPointerOperand(), - Operands.drop_front()); - } + auto *TargetTTI = static_cast(this); + + if (const GEPOperator *GEP = dyn_cast(U)) + return TargetTTI->getGEPCost(GEP->getSourceElementType(), + GEP->getPointerOperand(), + Operands.drop_front()); if (auto CS = ImmutableCallSite(U)) { const Function *F = CS.getCalledFunction(); if (!F) { // Just use the called value type. Type *FTy = CS.getCalledValue()->getType()->getPointerElementType(); - return static_cast(this) - ->getCallCost(cast(FTy), CS.arg_size(), U); + return TargetTTI->getCallCost(cast(FTy), + CS.arg_size(), U); } SmallVector Arguments(CS.arg_begin(), CS.arg_end()); - return static_cast(this)->getCallCost(F, Arguments, U); + return TargetTTI->getCallCost(F, Arguments, U); } if (isa(U) || isa(U) || isa(U)) // The old behaviour of generally treating extensions of icmp to be free // has been removed. A target that needs it should override getUserCost(). - return static_cast(this)->getExtCost(cast(U), - Operands.back()); + return TargetTTI->getExtCost(cast(U), Operands.back()); - return static_cast(this)->getOperationCost( - Operator::getOpcode(U), U->getType(), + return TargetTTI->getOperationCost(Operator::getOpcode(U), U->getType(), U->getNumOperands() == 1 ? U->getOperand(0)->getType() : nullptr); }