[llvm] [X86][CostModel] Cost gathers by the instructions CodeGen emits (PR #220565)
Sumukh J Bharadwaj via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 8 06:21:44 PDT 2026
================
@@ -6649,34 +6657,29 @@ InstructionCost X86TTIImpl::getGSVectorCost(unsigned Opcode,
// Trying to reduce IndexSize to 32 bits for vector 16.
// By default the IndexSize is equal to pointer size.
- unsigned IndexSize = (ST->hasAVX512() && VF >= 16)
- ? getIndexSizeInBits(Ptr, DL)
- : DL.getPointerSizeInBits();
+ unsigned IndexSize =
+ (ST->hasAVX512() && VF >= 16) ? getIndexSizeInBits(Ptr) : PtrSizeInBits;
auto *IndexVTy = FixedVectorType::get(
IntegerType::get(SrcVTy->getContext(), IndexSize), VF);
std::pair<InstructionCost, MVT> IdxsLT = getTypeLegalizationCost(IndexVTy);
std::pair<InstructionCost, MVT> SrcLT = getTypeLegalizationCost(SrcVTy);
InstructionCost::CostType SplitFactor =
std::max(IdxsLT.first, SrcLT.first).getValue();
- if (SplitFactor > 1) {
- // Handle splitting of vector of pointers
- auto *SplitSrcTy =
- FixedVectorType::get(SrcVTy->getScalarType(), VF / SplitFactor);
- return SplitFactor * getGSVectorCost(Opcode, CostKind, SplitSrcTy, Ptr,
- Alignment, AddressSpace);
- }
-
- // If we didn't split, this will be a single gather/scatter instruction.
+ // A vector of pointers that does not fit one register is split into
+ // SplitFactor gather/scatter instructions, each paying the overhead.
----------------
amd-subharad wrote:
Agreed, this has been accounted into now
https://github.com/llvm/llvm-project/pull/220565
More information about the llvm-commits
mailing list