[llvm] [RISCV][CostModel] Estimate cost of Extract/InsertElement with non-constant index when vector instructions are not available (PR #67334)
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 25 10:25:28 PDT 2023
================
@@ -1456,6 +1456,24 @@ InstructionCost RISCVTTIImpl::getVectorInstrCost(unsigned Opcode, Type *Val,
Opcode != Instruction::InsertElement)
return BaseT::getVectorInstrCost(Opcode, Val, CostKind, Index, Op0, Op1);
+ // Extract/InsertElement with non-constant index is very costly without
+ // V instructions; estimate cost of loads/stores sequence via the stack:
+ // ExtractElement cost: store vector to stack, load scalar;
+ // InsertElement cost: store vector to stack, store scalar, load vector.
+ if (Index == -1U && !ST->hasVInstructions()) {
+ auto *VecTy = cast<VectorType>(Val);
+ auto *ElemTy = VecTy->getElementType();
+ auto NumElems = VecTy->getElementCount().getKnownMinValue();
----------------
preames wrote:
This will produce a significant under-estimate on cost for scalable vectors as the number elements will be very low. See getEstimatedVLFor.
https://github.com/llvm/llvm-project/pull/67334
More information about the llvm-commits
mailing list