forked from OSchip/llvm-project
[Target][CodeGen] Remove default CostKind arguments on inner/impl TTI overrides
Based off a discussion on D110100, we should be avoiding default CostKinds whenever possible. This initial patch removes them from the 'inner' target implementation callbacks - these should only be used by the main TTI calls, so this should guarantee that we don't cause changes in CostKind by missing it in an inner call. This exposed a few missing arguments in getGEPCost and reduction cost calls that I've cleaned up. Differential Revision: https://reviews.llvm.org/D110242
This commit is contained in:
parent
e5aaf03326
commit
b1f38a27f0
|
@ -1743,8 +1743,8 @@ public:
|
|||
InstructionCost
|
||||
getGEPCost(Type *PointeeType, const Value *Ptr,
|
||||
ArrayRef<const Value *> Operands,
|
||||
enum TargetTransformInfo::TargetCostKind CostKind) override {
|
||||
return Impl.getGEPCost(PointeeType, Ptr, Operands);
|
||||
TargetTransformInfo::TargetCostKind CostKind) override {
|
||||
return Impl.getGEPCost(PointeeType, Ptr, Operands, CostKind);
|
||||
}
|
||||
unsigned getInliningThresholdMultiplier() override {
|
||||
return Impl.getInliningThresholdMultiplier();
|
||||
|
|
|
@ -47,10 +47,9 @@ public:
|
|||
|
||||
const DataLayout &getDataLayout() const { return DL; }
|
||||
|
||||
InstructionCost
|
||||
getGEPCost(Type *PointeeType, const Value *Ptr,
|
||||
ArrayRef<const Value *> Operands,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency) const {
|
||||
InstructionCost getGEPCost(Type *PointeeType, const Value *Ptr,
|
||||
ArrayRef<const Value *> Operands,
|
||||
TTI::TargetCostKind CostKind) const {
|
||||
// In the basic model, we just assume that all-constant GEPs will be folded
|
||||
// into their uses via addressing modes.
|
||||
for (unsigned Idx = 0, Size = Operands.size(); Idx != Size; ++Idx)
|
||||
|
@ -638,9 +637,10 @@ public:
|
|||
return 1;
|
||||
}
|
||||
|
||||
InstructionCost getExtendedAddReductionCost(
|
||||
bool IsMLA, bool IsUnsigned, Type *ResTy, VectorType *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput) const {
|
||||
InstructionCost
|
||||
getExtendedAddReductionCost(bool IsMLA, bool IsUnsigned, Type *ResTy,
|
||||
VectorType *Ty,
|
||||
TTI::TargetCostKind CostKind) const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -862,10 +862,9 @@ protected:
|
|||
public:
|
||||
using BaseT::getGEPCost;
|
||||
|
||||
InstructionCost
|
||||
getGEPCost(Type *PointeeType, const Value *Ptr,
|
||||
ArrayRef<const Value *> Operands,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency) {
|
||||
InstructionCost getGEPCost(Type *PointeeType, const Value *Ptr,
|
||||
ArrayRef<const Value *> Operands,
|
||||
TTI::TargetCostKind CostKind) {
|
||||
assert(PointeeType && Ptr && "can't get GEPCost of nullptr");
|
||||
assert(cast<PointerType>(Ptr->getType()->getScalarType())
|
||||
->isOpaqueOrPointeeTypeMatches(PointeeType) &&
|
||||
|
@ -970,10 +969,10 @@ public:
|
|||
return TTI::TCC_Free;
|
||||
break;
|
||||
case Instruction::GetElementPtr: {
|
||||
const GEPOperator *GEP = cast<GEPOperator>(U);
|
||||
const auto *GEP = cast<GEPOperator>(U);
|
||||
return TargetTTI->getGEPCost(GEP->getSourceElementType(),
|
||||
GEP->getPointerOperand(),
|
||||
Operands.drop_front());
|
||||
Operands.drop_front(), CostKind);
|
||||
}
|
||||
case Instruction::Add:
|
||||
case Instruction::FAdd:
|
||||
|
|
|
@ -364,8 +364,9 @@ public:
|
|||
}
|
||||
|
||||
InstructionCost getGEPCost(Type *PointeeType, const Value *Ptr,
|
||||
ArrayRef<const Value *> Operands) {
|
||||
return BaseT::getGEPCost(PointeeType, Ptr, Operands);
|
||||
ArrayRef<const Value *> Operands,
|
||||
TTI::TargetCostKind CostKind) {
|
||||
return BaseT::getGEPCost(PointeeType, Ptr, Operands, CostKind);
|
||||
}
|
||||
|
||||
unsigned getEstimatedNumberOfCaseClusters(const SwitchInst &SI,
|
||||
|
@ -748,8 +749,7 @@ public:
|
|||
unsigned getMaxInterleaveFactor(unsigned VF) { return 1; }
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -1992,9 +1992,9 @@ public:
|
|||
/// \param RetTy Return value types.
|
||||
/// \param Tys Argument types.
|
||||
/// \returns The cost of Call instruction.
|
||||
InstructionCost
|
||||
getCallInstrCost(Function *F, Type *RetTy, ArrayRef<Type *> Tys,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency) {
|
||||
InstructionCost getCallInstrCost(Function *F, Type *RetTy,
|
||||
ArrayRef<Type *> Tys,
|
||||
TTI::TargetCostKind CostKind) {
|
||||
return 10;
|
||||
}
|
||||
|
||||
|
@ -2078,7 +2078,8 @@ public:
|
|||
// By default reductions need one shuffle per reduction level.
|
||||
ShuffleCost += NumReduxLevels * thisT()->getShuffleCost(
|
||||
TTI::SK_PermuteSingleSrc, Ty, None, 0, Ty);
|
||||
ArithCost += NumReduxLevels * thisT()->getArithmeticInstrCost(Opcode, Ty);
|
||||
ArithCost +=
|
||||
NumReduxLevels * thisT()->getArithmeticInstrCost(Opcode, Ty, CostKind);
|
||||
return ShuffleCost + ArithCost +
|
||||
thisT()->getVectorInstrCost(Instruction::ExtractElement, Ty, 0);
|
||||
}
|
||||
|
|
|
@ -183,8 +183,7 @@ public:
|
|||
InstructionCost getSpliceCost(VectorType *Tp, int Index);
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -303,8 +302,7 @@ public:
|
|||
|
||||
InstructionCost getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
|
||||
bool
|
||||
|
@ -322,9 +320,9 @@ public:
|
|||
bool isLegalToVectorizeReduction(const RecurrenceDescriptor &RdxDesc,
|
||||
ElementCount VF) const;
|
||||
|
||||
InstructionCost getArithmeticReductionCost(
|
||||
unsigned Opcode, VectorType *Ty, Optional<FastMathFlags> FMF,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput);
|
||||
InstructionCost getArithmeticReductionCost(unsigned Opcode, VectorType *Ty,
|
||||
Optional<FastMathFlags> FMF,
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
||||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, VectorType *Tp,
|
||||
ArrayRef<int> Mask, int Index,
|
||||
|
|
|
@ -79,24 +79,21 @@ class GCNTTIImpl final : public BasicTTIImplBase<GCNTTIImpl> {
|
|||
return TargetTransformInfo::TCC_Basic;
|
||||
}
|
||||
|
||||
static inline int getHalfRateInstrCost(
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput) {
|
||||
static inline int getHalfRateInstrCost(TTI::TargetCostKind CostKind) {
|
||||
return CostKind == TTI::TCK_CodeSize ? 2
|
||||
: 2 * TargetTransformInfo::TCC_Basic;
|
||||
}
|
||||
|
||||
// TODO: The size is usually 8 bytes, but takes 4x as many cycles. Maybe
|
||||
// should be 2 or 4.
|
||||
static inline int getQuarterRateInstrCost(
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput) {
|
||||
static inline int getQuarterRateInstrCost(TTI::TargetCostKind CostKind) {
|
||||
return CostKind == TTI::TCK_CodeSize ? 2
|
||||
: 4 * TargetTransformInfo::TCC_Basic;
|
||||
}
|
||||
|
||||
// On some parts, normal fp64 operations are half rate, and others
|
||||
// quarter. This also applies to some integer operations.
|
||||
int get64BitInstrCost(
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput) const;
|
||||
int get64BitInstrCost(TTI::TargetCostKind CostKind) const;
|
||||
|
||||
public:
|
||||
explicit GCNTTIImpl(const AMDGPUTargetMachine *TM, const Function &F);
|
||||
|
@ -152,8 +149,7 @@ public:
|
|||
bool getTgtMemIntrinsic(IntrinsicInst *Inst, MemIntrinsicInfo &Info) const;
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -217,13 +213,13 @@ public:
|
|||
|
||||
InstructionCost getArithmeticReductionCost(
|
||||
unsigned Opcode, VectorType *Ty, Optional<FastMathFlags> FMF,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput);
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
||||
InstructionCost getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
|
||||
TTI::TargetCostKind CostKind);
|
||||
InstructionCost getMinMaxReductionCost(
|
||||
VectorType *Ty, VectorType *CondTy, bool IsUnsigned,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput);
|
||||
TTI::TargetCostKind CostKind);
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -231,8 +231,7 @@ public:
|
|||
const SCEV *Ptr);
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Op1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Op2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -251,8 +250,7 @@ public:
|
|||
|
||||
InstructionCost getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
|
||||
InstructionCost getGatherScatterOpCost(unsigned Opcode, Type *DataTy,
|
||||
|
|
|
@ -56,12 +56,11 @@ public:
|
|||
}
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
TTI::OperandValueProperties Opd2PropInfo = TTI::OP_None,
|
||||
ArrayRef<const Value *> Args = ArrayRef<const Value *>(),
|
||||
const Instruction *CxtI = nullptr) {
|
||||
int ISD = TLI->InstructionOpcodeToISD(Opcode);
|
||||
|
|
|
@ -121,10 +121,9 @@ public:
|
|||
MaybeAlign Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost
|
||||
getMaskedMemoryOpCost(unsigned Opcode, Type *Src, Align Alignment,
|
||||
unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency);
|
||||
InstructionCost getMaskedMemoryOpCost(unsigned Opcode, Type *Src,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind);
|
||||
InstructionCost getShuffleCost(TTI::ShuffleKind Kind, Type *Tp,
|
||||
ArrayRef<int> Mask, int Index, Type *SubTp);
|
||||
InstructionCost getGatherScatterOpCost(unsigned Opcode, Type *DataTy,
|
||||
|
@ -134,16 +133,14 @@ public:
|
|||
const Instruction *I);
|
||||
InstructionCost getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
InstructionCost getCmpSelInstrCost(unsigned Opcode, Type *ValTy, Type *CondTy,
|
||||
CmpInst::Predicate VecPred,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
|
|
@ -91,8 +91,7 @@ public:
|
|||
}
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
|
|
@ -94,8 +94,7 @@ public:
|
|||
unsigned getInliningThresholdMultiplier() { return 5; }
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
|
|
@ -103,8 +103,7 @@ public:
|
|||
InstructionCost vectorCostAdjustment(InstructionCost Cost, unsigned Opcode,
|
||||
Type *Ty1, Type *Ty2);
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -131,8 +130,7 @@ public:
|
|||
const Instruction *I = nullptr);
|
||||
InstructionCost getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
InstructionCost getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
|
|
@ -83,8 +83,7 @@ public:
|
|||
bool enableInterleavedAccessVectorization() { return true; }
|
||||
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -116,8 +115,7 @@ public:
|
|||
|
||||
InstructionCost getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
|
||||
InstructionCost getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
|
||||
|
|
|
@ -60,8 +60,7 @@ public:
|
|||
unsigned getNumberOfRegisters(unsigned ClassID) const;
|
||||
TypeSize getRegisterBitWidth(TargetTransformInfo::RegisterKind K) const;
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
|
|
@ -122,8 +122,7 @@ public:
|
|||
unsigned getLoadStoreVecRegBitWidth(unsigned AS) const;
|
||||
unsigned getMaxInterleaveFactor(unsigned VF);
|
||||
InstructionCost getArithmeticInstrCost(
|
||||
unsigned Opcode, Type *Ty,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput,
|
||||
unsigned Opcode, Type *Ty, TTI::TargetCostKind CostKind,
|
||||
TTI::OperandValueKind Opd1Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueKind Opd2Info = TTI::OK_AnyValue,
|
||||
TTI::OperandValueProperties Opd1PropInfo = TTI::OP_None,
|
||||
|
@ -150,10 +149,9 @@ public:
|
|||
MaybeAlign Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
InstructionCost
|
||||
getMaskedMemoryOpCost(unsigned Opcode, Type *Src, Align Alignment,
|
||||
unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency);
|
||||
InstructionCost getMaskedMemoryOpCost(unsigned Opcode, Type *Src,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind);
|
||||
InstructionCost getGatherScatterOpCost(unsigned Opcode, Type *DataTy,
|
||||
const Value *Ptr, bool VariableMask,
|
||||
Align Alignment,
|
||||
|
@ -182,9 +180,9 @@ public:
|
|||
InstructionCost getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
||||
InstructionCost getArithmeticReductionCost(
|
||||
unsigned Opcode, VectorType *Ty, Optional<FastMathFlags> FMF,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency);
|
||||
InstructionCost getArithmeticReductionCost(unsigned Opcode, VectorType *Ty,
|
||||
Optional<FastMathFlags> FMF,
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
||||
InstructionCost getMinMaxCost(Type *Ty, Type *CondTy, bool IsUnsigned);
|
||||
|
||||
|
@ -194,19 +192,18 @@ public:
|
|||
|
||||
InstructionCost getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
InstructionCost getInterleavedMemoryOpCostAVX512(
|
||||
unsigned Opcode, FixedVectorType *VecTy, unsigned Factor,
|
||||
ArrayRef<unsigned> Indices, Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
TTI::TargetCostKind CostKind, bool UseMaskForCond = false,
|
||||
bool UseMaskForGaps = false);
|
||||
InstructionCost getInterleavedMemoryOpCostAVX2(
|
||||
unsigned Opcode, FixedVectorType *VecTy, unsigned Factor,
|
||||
ArrayRef<unsigned> Indices, Align Alignment, unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind = TTI::TCK_SizeAndLatency,
|
||||
bool UseMaskForCond = false, bool UseMaskForGaps = false);
|
||||
TTI::TargetCostKind CostKind, bool UseMaskForCond = false,
|
||||
bool UseMaskForGaps = false);
|
||||
|
||||
InstructionCost getIntImmCost(int64_t);
|
||||
|
||||
|
|
Loading…
Reference in New Issue