[llvm] [SLP] Check for extracts, being replaced by original scalars, for user nodes (PR #149572)
Gaƫtan Bossu via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 29 01:53:03 PDT 2025
================
@@ -9215,31 +9243,13 @@ bool BoUpSLP::isProfitableToVectorizeWithNonVecUsers(
if (DemandedElts.isZero())
return true;
- auto AreExtractsCheaperThanScalars = [&]() {
- // If extracts are cheaper than the original scalars - success.
- InstructionCost ExtractCost = ::getScalarizationOverhead(
- *TTI, UserScalarTy, UserVecTy, DemandedElts,
- /*Insert=*/false, /*Extract=*/true, CostKind);
- if (ExtractCost <= UserScalarsCost)
- return true;
- SmallPtrSet<Value *, 4> CheckedExtracts;
- InstructionCost NodeCost =
- getEntryCost(UserTreeIdx.UserTE, {}, CheckedExtracts);
- // The node is profitable for vectorization - success.
- if (ExtractCost <= NodeCost)
- return true;
- auto *VecTy = getWidenedType(ScalarTy, VL.size());
- InstructionCost ScalarsCost = ::getScalarizationOverhead(
- *TTI, ScalarTy, VecTy, APInt::getAllOnes(VL.size()),
- /*Insert=*/true, /*Extract=*/false, CostKind);
- if (!Mask.empty())
- ScalarsCost +=
- getShuffleCost(*TTI, TTI::SK_PermuteSingleSrc, VecTy, Mask, CostKind);
- return ExtractCost < UserScalarsCost + ScalarsCost;
- };
-
// User extracts are cheaper than user scalars + immediate scalars - success.
- return AreExtractsCheaperThanScalars();
+ return areExtractsCheaperThanScalars(
+ *TTI, UserScalarTy, UserVecTy, DemandedElts, UserScalarsCost, ScalarTy,
+ VL.size(), Mask, [&]() {
+ SmallPtrSet<Value *, 4> CheckedExtracts;
+ return getEntryCost(UserTreeIdx.UserTE, {}, CheckedExtracts);
+ });
----------------
gbossu wrote:
Instead of creating another lambda which is here to capture this, maybe just pass this as a parameter? Or maybe just make areExtractsCheaperThanScalars part of BoUpSLP? I think at this point one more method there won't make any difference, and at least we get a couple of parameters for free because they are class members.
https://github.com/llvm/llvm-project/pull/149572
More information about the llvm-commits
mailing list