[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
Tue Sep 26 09:31:30 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:
That test crashes in argument lowering, not insertelement handling. However, you point stands, here's an alternative example: https://godbolt.org/z/13v643fGe
It does look like we're trying to scalarize the type rather than legalize the operation via the stack.
https://github.com/llvm/llvm-project/pull/67334
More information about the llvm-commits
mailing list