forked from OSchip/llvm-project
[ARM] Add basic masked load/store costs
This adds some basic MVE masked load/store costs, notably changing the cost of legal loads/stores to the MVECostFactor and the cost of scalarized instructions to 8*NumElts. Differential Revision: https://reviews.llvm.org/D86538
This commit is contained in:
parent
ab97c9bdb7
commit
a4823377fd
|
@ -1318,6 +1318,24 @@ int ARMTTIImpl::getMemoryOpCost(unsigned Opcode, Type *Src,
|
|||
CostKind, I);
|
||||
}
|
||||
|
||||
unsigned ARMTTIImpl::getMaskedMemoryOpCost(unsigned Opcode, Type *Src,
|
||||
Align Alignment,
|
||||
unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind) {
|
||||
if (ST->hasMVEIntegerOps()) {
|
||||
if (Opcode == Instruction::Load && isLegalMaskedLoad(Src, Alignment))
|
||||
return ST->getMVEVectorCostFactor();
|
||||
if (Opcode == Instruction::Store && isLegalMaskedStore(Src, Alignment))
|
||||
return ST->getMVEVectorCostFactor();
|
||||
}
|
||||
if (!isa<FixedVectorType>(Src))
|
||||
return BaseT::getMaskedMemoryOpCost(Opcode, Src, Alignment, AddressSpace,
|
||||
CostKind);
|
||||
// Scalar cost, which is currently very high due to the efficiency of the
|
||||
// generated code.
|
||||
return cast<FixedVectorType>(Src)->getNumElements() * 8;
|
||||
}
|
||||
|
||||
int ARMTTIImpl::getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace, TTI::TargetCostKind CostKind,
|
||||
|
|
|
@ -229,6 +229,10 @@ public:
|
|||
TTI::TargetCostKind CostKind,
|
||||
const Instruction *I = nullptr);
|
||||
|
||||
unsigned getMaskedMemoryOpCost(unsigned Opcode, Type *Src, Align Alignment,
|
||||
unsigned AddressSpace,
|
||||
TTI::TargetCostKind CostKind);
|
||||
|
||||
int getInterleavedMemoryOpCost(
|
||||
unsigned Opcode, Type *VecTy, unsigned Factor, ArrayRef<unsigned> Indices,
|
||||
Align Alignment, unsigned AddressSpace,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue