[llvm] [VPlan] Set branch weight metadata on middle term in VPlan (NFC) (PR #143035)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 12 04:16:17 PDT 2025
================
@@ -7273,6 +7273,33 @@ static void fixReductionScalarResumeWhenVectorizingEpilog(
BypassBlock, MainResumePhi->getIncomingValueForBlock(BypassBlock));
}
+/// Add branch weight metadata, if the \p Plan's middle block is terminated by a
+/// BranchOnCond recipe.
+static void addBranchWeightToMiddleTerminator(VPlan &Plan, ElementCount VF,
+ Loop *OrigLoop) {
+ // 4. Adjust branch weight of the branch in the middle block.
+ Instruction *LatchTerm = OrigLoop->getLoopLatch()->getTerminator();
+ if (!hasBranchWeightMD(*LatchTerm))
+ return;
+
+ VPBasicBlock *MiddleVPBB = Plan.getMiddleBlock();
+ auto *MiddleTerm =
+ dyn_cast_or_null<VPInstruction>(MiddleVPBB->getTerminator());
+ // Only add branch metadata if there is a (conditional) terminator.
+ if (!MiddleTerm)
+ return;
+
+ assert(MiddleTerm->getOpcode() == VPInstruction::BranchOnCond &&
+ "must have a BranchOnCond");
+ // Assume that `Count % VectorTripCount` is equally distributed.
+ unsigned TripCount = Plan.getUF() * VF.getKnownMinValue();
+ assert(TripCount > 0 && "trip count should not be zero");
+ MDBuilder MDB(LatchTerm->getContext());
+ MDNode *BranchWeights =
+ MDB.createBranchWeights({1, TripCount - 1}, /*IsExpected=*/false);
+ MiddleTerm->addMetadata(LLVMContext::MD_prof, BranchWeights);
----------------
ayalz wrote:
Alternative to introducing `addMetadata()` is feeding these weights when constructing terminator of middle block, but that requires knowing VF and UF.
https://github.com/llvm/llvm-project/pull/143035
More information about the llvm-commits
mailing list