[llvm] [TRE] Adjust function entry count when using instrumented profiles (PR #143987)

Alexey Lapshin via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 18 10:48:15 PDT 2025


================
@@ -735,6 +757,21 @@ bool TailRecursionEliminator::eliminateCall(CallInst *CI) {
   CI->eraseFromParent();   // Remove call.
   DTU.applyUpdates({{DominatorTree::Insert, BB, HeaderBB}});
   ++NumEliminated;
+  if (OrigEntryBBFreq) {
+    assert(F.getEntryCount().has_value());
+    // This pass is not expected to remove BBs, only add an entry BB. For that
+    // reason, and because the BB here isn't the new entry BB, the BFI lookup is
+    // expected to succeed.
+    assert(&F.getEntryBlock() != BB);
+    auto RelativeBBFreq =
+        static_cast<double>(BFI->getBlockFreq(BB).getFrequency()) /
+        static_cast<double>(OrigEntryBBFreq);
+    auto OldEntryCount = F.getEntryCount()->getCount();
+    auto ToSubtract =
+        static_cast<uint64_t>(std::round(RelativeBBFreq * OldEntryCount));
+    assert(OldEntryCount > ToSubtract);
----------------
avl-llvm wrote:

Can these counters - - OldEntryCount and ToSubtract - be invalid ? Because of broken profile or something? Is it correct to validate them using assertion?

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


More information about the llvm-commits mailing list