[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