[llvm] [RISCV][CostModel] Estimate cost of Extract/InsertElement with non-constant index when vector instructions are not available (PR #67334)

Sergey Kachkov via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 26 09:23:16 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();
----------------
skachkov-sc wrote:

Sorry for the bad wording, I mean that is possible to lower only fixed-width vector insertelement/extractelement via stack, scalable vectors will fail now: https://godbolt.org/z/9qj68zfTv

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


More information about the llvm-commits mailing list