[llvm] [VPlan] Implement VPWidenStoreEVLRecipe::computeCost(). (PR #109644)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 24 00:28:03 PDT 2024
================
@@ -2464,6 +2464,43 @@ void VPWidenStoreEVLRecipe::execute(VPTransformState &State) {
State.addMetadata(NewSI, SI);
}
+InstructionCost VPWidenStoreEVLRecipe::computeCost(ElementCount VF,
+ VPCostContext &Ctx) const {
+ Type *Ty = ToVectorTy(getLoadStoreType(&Ingredient), VF);
+ const Align Alignment =
+ getLoadStoreAlignment(const_cast<Instruction *>(&Ingredient));
+ unsigned AS =
+ getLoadStoreAddressSpace(const_cast<Instruction *>(&Ingredient));
+ TTI::TargetCostKind CostKind = TTI::TCK_RecipThroughput;
+
+ if (!Consecutive) {
+ // TODO: Using the original IR may not be accurate.
+ // Currently, ARM will use the underlying IR to calculate gather/scatter
+ // instruction cost.
+ const Value *Ptr = getLoadStorePointerOperand(&Ingredient);
+ assert(!Reverse &&
+ "Inconsecutive memory access should not have the order.");
+ return Ctx.TTI.getAddressComputationCost(Ty) +
+ Ctx.TTI.getGatherScatterOpCost(Ingredient.getOpcode(), Ty, Ptr,
+ IsMasked, Alignment, CostKind,
+ &Ingredient);
+ }
+
+ InstructionCost Cost = 0;
+ // We need to use the getMaskedMemoryOpCost() instead of getMemoryOpCost()
+ // here because the EVL recipes using EVL to replace the tail mask. But in the
+ // legacy model, it will always calculate the cost of mask.
+ // TODO: Using getMemoryOpCost() instead of getMaskedMemoryOpCost when we
+ // don't need to care the legacy cost model.
+ Cost += Ctx.TTI.getMaskedMemoryOpCost(Ingredient.getOpcode(), Ty, Alignment,
----------------
fhahn wrote:
```suggestion
// We need to use the getMaskedMemoryOpCost() instead of getMemoryOpCost()
// here because the EVL recipes using EVL to replace the tail mask. But in the
// legacy model, it will always calculate the cost of mask.
// TODO: Using getMemoryOpCost() instead of getMaskedMemoryOpCost when we
// don't need to care the legacy cost model.
InstructionCost Cost = Ctx.TTI.getMaskedMemoryOpCost(Ingredient.getOpcode(), Ty, Alignment,
```
https://github.com/llvm/llvm-project/pull/109644
More information about the llvm-commits
mailing list