[llvm] [LV] Reland "Add costs for VPInstructionWithType::computeCost" (PR #202952)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 10 12:46:46 PDT 2026
================
@@ -1790,6 +1790,38 @@ void VPInstruction::printRecipe(raw_ostream &O, const Twine &Indent,
}
#endif
+InstructionCost VPInstructionWithType::computeCost(ElementCount VF,
+ VPCostContext &Ctx) const {
+ // NOTE: At the moment it seems only possible to expose this path for
+ // the trunc, zext and sext opcodes. However, isScalarCast also covers
+ // int<>fp conversions, bitcasts, ptr<>int conversions, etc.
+ if (Instruction::isCast(getOpcode()))
+ return getCostForRecipeWithOpcode(getOpcode(), ElementCount::getFixed(1),
+ Ctx);
+
+ switch (getOpcode()) {
+ case VPInstruction::VScale: {
+ Type *Ty = this->getScalarType();
+ ArrayRef<Type *> Tys;
+ IntrinsicCostAttributes Attrs(Intrinsic::vscale, Ty, Tys);
+ return Ctx.TTI.getIntrinsicInstrCost(Attrs, Ctx.CostKind);
+ }
+ case VPInstruction::StepVector:
+ // TODO: This isn't quite right since even if the step-vector is hoisted
+ // out of the loop it has a non-zero cost in the middle block, etc.
+ // Once the stepvector is correctly hoisted out of the vector loop by the
+ // licm transform we can add the cost here so that it doesn't incorrectly
+ // affect the choice of VF.
+ return 0;
+ default:
+ // Although VPInstructionWithType is also used for
+ // VPInstruction::WideIVStep it isn't currently possible to expose cases
+ // where the cost is queried.
+ break;
+ }
+ return 0;
----------------
fhahn wrote:
I think it would still be good to keep the urneachable; this would help us make sure we do not miss other opcodes by accident in the future.
https://github.com/llvm/llvm-project/pull/202952
More information about the llvm-commits
mailing list