[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:16:43 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:

I'm a bit confused by your comment.  I wouldn't expect scalable vectors to be lowered via scalars, I'd expect this case to be lowered via the stack and thus your new costing would be relevant.  Are you saying that we fail to lower this case entirely with scalable vectors?

https://github.com/llvm/llvm-project/pull/67334


More information about the llvm-commits mailing list