[llvm] [LLVM][LV] Improve UF calculation for vscale based scalar loops. (PR #146102)
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 9 12:02:42 PDT 2025
================
@@ -4813,16 +4832,22 @@ LoopVectorizationCostModel::selectInterleaveCount(VPlan &Plan, ElementCount VF,
MaxInterleaveCount = ForceTargetMaxVectorInterleaveFactor;
}
- unsigned EstimatedVF = getEstimatedRuntimeVF(VF, VScaleForTuning);
-
// Try to get the exact trip count, or an estimate based on profiling data or
// ConstantMax from PSE, failing that.
- if (auto BestKnownTC = getSmallBestKnownTC(PSE, TheLoop)) {
+ auto BestKnownTC = getSmallBestKnownTC(PSE, TheLoop);
+
+ // For fixed length VFs treat a scalable trip count as unknown.
+ if (BestKnownTC && (BestKnownTC->isFixed() || VF.isScalable())) {
+ // Re-evaluate VF to be in the same numerical space as the trip count.
+ unsigned EstimatedVF = VF.getKnownMinValue();
+ if (VF.isScalable() && BestKnownTC->isFixed())
+ EstimatedVF = getEstimatedRuntimeVF(VF, VScaleForTuning);
+
// At least one iteration must be scalar when this constraint holds. So the
// maximum available iterations for interleaving is one less.
unsigned AvailableTC = requiresScalarEpilogue(VF.isVector())
- ? BestKnownTC->getFixedValue() - 1
- : BestKnownTC->getFixedValue();
+ ? BestKnownTC->getKnownMinValue() - 1
----------------
preames wrote:
For a scalable trip count, using the min value here seems off. Shouldn't we be using vscalefortuning here?
https://github.com/llvm/llvm-project/pull/146102
More information about the llvm-commits
mailing list