[llvm] LV: generalize profitability criterion over TC (PR #93300)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Wed May 29 00:15:56 PDT 2024
================
@@ -4893,13 +4871,36 @@ bool LoopVectorizationPlanner::isMoreProfitable(
// Assume vscale may be larger than 1 (or the value being tuned for),
// so that scalable vectorization is slightly favorable over fixed-width
// vectorization.
- if (A.Width.isScalable() && !B.Width.isScalable())
- return (CostA * B.Width.getFixedValue()) <= (CostB * EstimatedWidthA);
+ bool PreferScalable = A.Width.isScalable() && !B.Width.isScalable();
+ auto CmpFn = [PreferScalable](const InstructionCost &LHS,
+ const InstructionCost &RHS) {
+ return PreferScalable ? LHS <= RHS : LHS < RHS;
+ };
// To avoid the need for FP division:
- // (CostA / A.Width) < (CostB / B.Width)
- // <=> (CostA * B.Width) < (CostB * A.Width)
- return (CostA * EstimatedWidthB) < (CostB * EstimatedWidthA);
+ // (CostA / EstimatedWidthA) < (CostB / EstimatedWidthB)
+ // <=> (CostA * EstimatedWidthB) < (CostB * EstimatedWidthA)
+ if (!MaxTripCount)
+ return CmpFn(CostA * EstimatedWidthB, CostB * EstimatedWidthA);
+
+ auto GetCost = [MaxTripCount, this](unsigned VF, InstructionCost VectorCost,
----------------
davemgreen wrote:
GetCostForTC was the suggested name from https://reviews.llvm.org/D147720#inline-1439570.
https://github.com/llvm/llvm-project/pull/93300
More information about the llvm-commits
mailing list