[llvm] [RISCV][CostModel] Add cost for @llvm.experimental.vp.splice (PR #122223)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 10 10:21:07 PST 2025


================
@@ -1235,6 +1235,33 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
                                                   : RISCV::VMV_V_X,
                                               LT.second, CostKind);
   }
+  case Intrinsic::experimental_vp_splice: {
+    auto LT = getTypeLegalizationCost(RetTy);
+    SmallVector<unsigned, 3> Opcodes;
+    Value *ImmValue = *(ICA.getInst()->arg_begin() + 2);
+    auto *Imm = dyn_cast<ConstantInt>(ImmValue);
+    if (Imm->isNegative())
+      Opcodes = {RISCV::VSLIDEDOWN_VI, RISCV::VSLIDEUP_VX};
+    else
+      Opcodes = {RISCV::VSLIDEDOWN_VX, RISCV::VSLIDEUP_VI};
+
+    if (!ST->hasVInstructions())
+      return InstructionCost::getInvalid();
+
+    if (LT.second.getScalarType() == MVT::i1) {
+      SmallVector<unsigned, 8> AddOpcodes = {
----------------
topperc wrote:

You can use a normal C array here. It doesn't need to be a SmallVector.

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


More information about the llvm-commits mailing list