[llvm] [LV] Don't trigger legacy/vplan assert when forcing costs (PR #156870)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 9 02:00:48 PDT 2025
================
@@ -7047,7 +7047,13 @@ VectorizationFactor LoopVectorizationPlanner::computeBestVF() {
// Verify that the VPlan-based and legacy cost models agree, except for VPlans
// with early exits and plans with additional VPlan simplifications. The
// legacy cost model doesn't properly model costs for such loops.
+ // NOTE: If the user has forced a target instruction cost this assert is very
+ // likely to trigger because the VPlan recipes don't map 1:1 with the scalar
+ // instructions that the legacy cost model is based on. One example of this is
+ // for interleave groups - VPlan will use the forced cost for the whole group,
+ // whereas the legacy cost model will use it for each load.
assert((BestFactor.Width == LegacyVF.Width || BestPlan.hasEarlyExit() ||
+ ForceTargetInstructionCost.getNumOccurrences() > 0 ||
----------------
david-arm wrote:
Hmm, but then I'd suggest we need a separate flag along the lines of `-force-target-recipe-cost=1` so that users could really force the cost to 1 if they desire. Then this new flag would face the same issue.
To be honest, even if with your suggestion I still think it doesn't make sense to assert that one completely arbitrary cost model matches another completely arbitrary cost model. In this case it feels like the assert is actually getting in the way of diligent testing of all code paths in the vectoriser.
https://github.com/llvm/llvm-project/pull/156870
More information about the llvm-commits
mailing list