[llvm] [profcheck] Option to inject distinct small weights (PR #159644)

Snehasish Kumar via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 21 10:57:53 PDT 2025


================
@@ -103,38 +108,49 @@ bool ProfileInjector::inject() {
     if (!Term || Term->getMetadata(LLVMContext::MD_prof))
       continue;
     SmallVector<BranchProbability> Probs;
-    Probs.reserve(Term->getNumSuccessors());
-    for (auto I = 0U, E = Term->getNumSuccessors(); I < E; ++I)
-      Probs.emplace_back(BPI.getEdgeProbability(&BB, Term->getSuccessor(I)));
 
-    assert(llvm::find_if(Probs,
-                         [](const BranchProbability &P) {
-                           return P.isUnknown();
-                         }) == Probs.end() &&
-           "All branch probabilities should be valid");
-    const auto *FirstZeroDenominator =
-        find_if(Probs, [](const BranchProbability &P) {
-          return P.getDenominator() == 0;
-        });
-    (void)FirstZeroDenominator;
-    assert(FirstZeroDenominator == Probs.end());
-    const auto *FirstNonZeroNumerator =
-        find_if(Probs, [](const BranchProbability &P) { return !P.isZero(); });
-    assert(FirstNonZeroNumerator != Probs.end());
-    DynamicAPInt LCM(Probs[0].getDenominator());
-    DynamicAPInt GCD(FirstNonZeroNumerator->getNumerator());
-    for (const auto &Prob : drop_begin(Probs)) {
-      if (!Prob.getNumerator())
-        continue;
-      LCM = llvm::lcm(LCM, DynamicAPInt(Prob.getDenominator()));
-      GCD = llvm::gcd(GCD, DynamicAPInt(Prob.getNumerator()));
-    }
     SmallVector<uint32_t> Weights;
     Weights.reserve(Term->getNumSuccessors());
-    for (const auto &Prob : Probs) {
-      DynamicAPInt W =
-          (Prob.getNumerator() * LCM / GCD) / Prob.getDenominator();
-      Weights.emplace_back(static_cast<uint32_t>((int64_t)W));
+    if (WeightsForTest) {
+      static const std::vector<uint32_t> Primes{3,  5,  7,  11, 13, 17, 19,
----------------
snehasish wrote:

I think an std::array is a better fit since it's const. Then we don't have any runtime allocation.

https://github.com/llvm/llvm-project/pull/159644


More information about the llvm-commits mailing list