diff --git a/llvm/include/llvm/Analysis/TargetTransformInfo.h b/llvm/include/llvm/Analysis/TargetTransformInfo.h --- a/llvm/include/llvm/Analysis/TargetTransformInfo.h +++ b/llvm/include/llvm/Analysis/TargetTransformInfo.h @@ -1221,7 +1221,7 @@ /// \returns The number of pieces into which the provided type must be /// split during legalization. Zero is returned when the answer is unknown. - unsigned getNumberOfParts(Type *Tp) const; + InstructionCost getNumberOfParts(Type *Tp) const; /// \returns The cost of the address computation. For most targets this can be /// merged into the instruction indexing mode. Some targets might want to @@ -1670,7 +1670,7 @@ virtual InstructionCost getCallInstrCost(Function *F, Type *RetTy, ArrayRef Tys, TTI::TargetCostKind CostKind) = 0; - virtual unsigned getNumberOfParts(Type *Tp) = 0; + virtual InstructionCost getNumberOfParts(Type *Tp) = 0; virtual InstructionCost getAddressComputationCost(Type *Ty, ScalarEvolution *SE, const SCEV *Ptr) = 0; virtual InstructionCost @@ -2184,7 +2184,7 @@ TTI::TargetCostKind CostKind) override { return Impl.getCallInstrCost(F, RetTy, Tys, CostKind); } - unsigned getNumberOfParts(Type *Tp) override { + InstructionCost getNumberOfParts(Type *Tp) override { return Impl.getNumberOfParts(Tp); } InstructionCost getAddressComputationCost(Type *Ty, ScalarEvolution *SE, diff --git a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h --- a/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h +++ b/llvm/include/llvm/Analysis/TargetTransformInfoImpl.h @@ -613,7 +613,7 @@ return 1; } - unsigned getNumberOfParts(Type *Tp) const { return 0; } + InstructionCost getNumberOfParts(Type *Tp) const { return 0; } InstructionCost getAddressComputationCost(Type *Tp, ScalarEvolution *, const SCEV *) const { diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h --- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h +++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h @@ -1953,10 +1953,10 @@ return 10; } - unsigned getNumberOfParts(Type *Tp) { + InstructionCost getNumberOfParts(Type *Tp) { std::pair LT = getTLI()->getTypeLegalizationCost(DL, Tp); - return *LT.first.getValue(); + return LT.first; } InstructionCost getAddressComputationCost(Type *Ty, ScalarEvolution *, diff --git a/llvm/lib/Analysis/TargetTransformInfo.cpp b/llvm/lib/Analysis/TargetTransformInfo.cpp --- a/llvm/lib/Analysis/TargetTransformInfo.cpp +++ b/llvm/lib/Analysis/TargetTransformInfo.cpp @@ -874,7 +874,7 @@ return Cost; } -unsigned TargetTransformInfo::getNumberOfParts(Type *Tp) const { +InstructionCost TargetTransformInfo::getNumberOfParts(Type *Tp) const { return TTIImpl->getNumberOfParts(Tp); } diff --git a/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp b/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp --- a/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp +++ b/llvm/lib/Target/SystemZ/SystemZTargetTransformInfo.cpp @@ -1102,8 +1102,8 @@ } } - unsigned NumOps = - (Src->isVectorTy() ? getNumVectorRegs(Src) : getNumberOfParts(Src)); + InstructionCost NumOps = + (Src->isVectorTy() ? getNumVectorRegs(Src) : getNumberOfParts(Src)); // Store/Load reversed saves one instruction. if (((!Src->isVectorTy() && NumOps == 1) || ST->hasVectorEnhancements2()) && diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -3543,7 +3543,7 @@ computeExtractCost(ArrayRef VL, FixedVectorType *VecTy, TargetTransformInfo::ShuffleKind ShuffleKind, ArrayRef Mask, TargetTransformInfo &TTI) { - unsigned NumOfParts = TTI.getNumberOfParts(VecTy); + unsigned NumOfParts = *TTI.getNumberOfParts(VecTy).getValue(); if (ShuffleKind != TargetTransformInfo::SK_PermuteSingleSrc || !NumOfParts || VecTy->getNumElements() < NumOfParts)