Index: llvm/include/llvm/Analysis/TargetTransformInfo.h =================================================================== --- llvm/include/llvm/Analysis/TargetTransformInfo.h +++ llvm/include/llvm/Analysis/TargetTransformInfo.h @@ -211,9 +211,6 @@ ArrayRef Operands, TargetCostKind CostKind = TCK_SizeAndLatency) const; - /// Estimate the cost of a EXT operation when lowered. - int getExtCost(const Instruction *I, const Value *Src) const; - /// \returns A value by which our inlining threshold should be multiplied. /// This is primarily used to bump up the inlining threshold wholesale on /// targets where calls are unusually expensive. @@ -1188,7 +1185,6 @@ virtual int getGEPCost(Type *PointeeType, const Value *Ptr, ArrayRef Operands, TTI::TargetCostKind CostKind) = 0; - virtual int getExtCost(const Instruction *I, const Value *Src) = 0; virtual unsigned getInliningThresholdMultiplier() = 0; virtual int getInlinerVectorBonusPercent() = 0; virtual int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy, @@ -1456,9 +1452,6 @@ enum TargetTransformInfo::TargetCostKind CostKind) override { return Impl.getGEPCost(PointeeType, Ptr, Operands); } - int getExtCost(const Instruction *I, const Value *Src) override { - return Impl.getExtCost(I, Src); - } unsigned getInliningThresholdMultiplier() override { return Impl.getInliningThresholdMultiplier(); } Index: llvm/include/llvm/Analysis/TargetTransformInfoImpl.h =================================================================== --- llvm/include/llvm/Analysis/TargetTransformInfoImpl.h +++ llvm/include/llvm/Analysis/TargetTransformInfoImpl.h @@ -65,10 +65,6 @@ return SI.getNumCases(); } - int getExtCost(const Instruction *I, const Value *Src) { - return TTI::TCC_Basic; - } - unsigned getInliningThresholdMultiplier() { return 1; } int getInlinerVectorBonusPercent() { return 150; } @@ -882,7 +878,7 @@ case Instruction::FPExt: case Instruction::SExt: case Instruction::ZExt: - if (I && TargetTTI->getExtCost(I, Operands.back()) == TTI::TCC_Free) + if (TargetTTI->getCastInstrCost(Opcode, Ty, OpTy, CostKind, I) == TTI::TCC_Free) return TTI::TCC_Free; break; } Index: llvm/include/llvm/CodeGen/BasicTTIImpl.h =================================================================== --- llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -292,18 +292,6 @@ return BaseT::getGEPCost(PointeeType, Ptr, Operands); } - int getExtCost(const Instruction *I, const Value *Src) { - if (getTLI()->isExtFree(I)) - return TargetTransformInfo::TCC_Free; - - if (isa(I) || isa(I)) - if (const LoadInst *LI = dyn_cast(Src)) - if (getTLI()->isExtLoad(LI, I, DL)) - return TargetTransformInfo::TCC_Free; - - return TargetTransformInfo::TCC_Basic; - } - unsigned getIntrinsicCost(Intrinsic::ID IID, Type *RetTy, ArrayRef Arguments, const User *U, TTI::TargetCostKind CostKind) { @@ -714,11 +702,18 @@ if (SrcLT.first == DstLT.first && SrcSize == DstSize) return 0; break; + case Instruction::FPExt: + if (I && getTLI()->isExtFree(I)) + return TargetTransformInfo::TCC_Free; + break; case Instruction::ZExt: if (TLI->isZExtFree(SrcLT.second, DstLT.second)) return 0; LLVM_FALLTHROUGH; case Instruction::SExt: { + if (I && getTLI()->isExtFree(I)) + return TargetTransformInfo::TCC_Free; + // If this is a zext/sext of a load, return 0 if the corresponding // extending load exists on target. if (I && isa(I->getOperand(0))) { Index: llvm/lib/Analysis/TargetTransformInfo.cpp =================================================================== --- llvm/lib/Analysis/TargetTransformInfo.cpp +++ llvm/lib/Analysis/TargetTransformInfo.cpp @@ -159,11 +159,6 @@ return TTIImpl->getGEPCost(PointeeType, Ptr, Operands, CostKind); } -int TargetTransformInfo::getExtCost(const Instruction *I, - const Value *Src) const { - return TTIImpl->getExtCost(I, Src); -} - int TargetTransformInfo::getIntrinsicCost(Intrinsic::ID IID, Type *RetTy, ArrayRef Arguments, const User *U, Index: llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp =================================================================== --- llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp +++ llvm/lib/Target/PowerPC/PPCTargetTransformInfo.cpp @@ -758,7 +758,7 @@ const Instruction *I) { assert(TLI->InstructionOpcodeToISD(Opcode) && "Invalid opcode"); - int Cost = BaseT::getCastInstrCost(Opcode, Dst, Src, CostKind); + int Cost = BaseT::getCastInstrCost(Opcode, Dst, Src, CostKind, I); return vectorCostAdjustment(Cost, Opcode, Dst, Src); }