[llvm-branch-commits] [llvm] [LV] capture branch weights for constant trip counts (PR #175096)
Mircea Trofin via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Jan 15 14:00:31 PST 2026
================
@@ -1692,17 +1696,35 @@ void LoopVectorizationPlanner::updateLoopMetadataAndProfileInfo(
// For scalable vectorization we can't know at compile time how many
// iterations of the loop are handled in one vector iteration, so instead
// use the value of vscale used for tuning.
- if (!OrigAverageTripCount)
- return;
- // Calculate number of iterations in unrolled loop.
- unsigned AverageVectorTripCount = *OrigAverageTripCount / EstimatedVFxUF;
- // Calculate number of iterations for remainder loop.
- unsigned RemainderAverageTripCount = *OrigAverageTripCount % EstimatedVFxUF;
-
+ unsigned AverageVectorTripCount = 0;
+ unsigned RemainderAverageTripCount = 0;
+
+ if (!OrigAverageTripCount) {
+ if (auto EC = VectorLoop->getLoopPreheader()->getParent()->getEntryCount();
+ !EC || !EC->getCount())
+ return;
+ auto &SE = *PSE.getSE();
+ AverageVectorTripCount = SE.getSmallConstantTripCount(VectorLoop);
+ if (Plan.getScalarPreheader()->hasPredecessors())
+ RemainderAverageTripCount =
+ SE.getSmallConstantTripCount(OrigLoop) % EstimatedVFxUF;
+ if (ProfcheckDisableMetadataFixes || !AverageVectorTripCount)
+ return;
+ } else {
+ // Calculate number of iterations in unrolled loop.
+ AverageVectorTripCount = *OrigAverageTripCount / EstimatedVFxUF;
+ // Calculate number of iterations for remainder loop.
+ RemainderAverageTripCount = *OrigAverageTripCount % EstimatedVFxUF;
+ }
if (HeaderVPBB) {
setLoopEstimatedTripCount(VectorLoop, AverageVectorTripCount,
OrigLoopInvocationWeight);
}
+ // The remainder's header will be entered, so the trip count must be at least
----------------
mtrofin wrote:
@jdenny-ornl right?
https://github.com/llvm/llvm-project/pull/175096
More information about the llvm-branch-commits
mailing list