[llvm] [VPlan] Add cost for `VPWidenMemoryRecipe` (PR #105614)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 26 02:18:12 PDT 2024
================
@@ -2084,6 +2084,37 @@ void VPPredInstPHIRecipe::print(raw_ostream &O, const Twine &Indent,
}
#endif
+InstructionCost VPWidenMemoryRecipe::computeCost(ElementCount VF,
+ VPCostContext &Ctx) const {
+ Instruction *I = getInstructionForCost(this);
+ Type *Ty = ToVectorTy(getElementType(), VF);
+ const Align Alignment = getLoadStoreAlignment(const_cast<Instruction *>(I));
+ const Value *Ptr = getLoadStorePointerOperand(I);
+ unsigned AS = getLoadStoreAddressSpace(const_cast<Instruction *>(I));
+ TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput;
+
+ if (Consecutive) {
+ InstructionCost Cost = 0;
+ if (IsMasked) {
+ Cost += Ctx.TTI.getMaskedMemoryOpCost(I->getOpcode(), Ty, Alignment, AS,
+ CostKind);
+ } else {
+ TTI::OperandValueInfo OpInfo = Ctx.TTI.getOperandInfo(I->getOperand(0));
+ Cost += Ctx.TTI.getMemoryOpCost(I->getOpcode(), Ty, Alignment, AS,
+ CostKind, OpInfo, I);
+ }
+ if (Reverse)
+ Cost += Ctx.TTI.getShuffleCost(TargetTransformInfo::SK_Reverse,
+ cast<VectorType>(Ty), std::nullopt,
+ CostKind, 0);
+
+ return Cost;
+ }
+ return Ctx.TTI.getAddressComputationCost(Ty) +
----------------
fhahn wrote:
maybe handle the simpler case `(!Consecutive)` first with an early return?
https://github.com/llvm/llvm-project/pull/105614
More information about the llvm-commits
mailing list