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

Joel E. Denny via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 20 09:16:00 PDT 2025


================
@@ -735,6 +757,28 @@ 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));
+    if (OldEntryCount <= ToSubtract) {
+      LLVM_DEBUG(
+          errs() << "[TRE] The entrycount attributable to the recursive call, "
+                 << ToSubtract
+                 << ", should be strictly lower than the original function "
+                    "entry count, "
+                 << OldEntryCount << "\n");
+    }
+    F.setEntryCount(OldEntryCount - ToSubtract, F.getEntryCount()->getType());
----------------
jdenny-ornl wrote:

I agree `setEntryCount` should be in the `else`, but that change does not seem to have happened.  Did I miss something?

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


More information about the llvm-commits mailing list