[clang] [compiler-rt] [llvm] [InstrProf] Single byte counters in coverage (PR #75425)

Ellis Hoag via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 14 14:34:07 PST 2024


================
@@ -821,15 +822,23 @@ void InstrProfRecord::merge(InstrProfRecord &Other, uint64_t Weight,
 
   for (size_t I = 0, E = Other.Counts.size(); I < E; ++I) {
     bool Overflowed;
-    uint64_t Value =
-        SaturatingMultiplyAdd(Other.Counts[I], Weight, Counts[I], &Overflowed);
-    if (Value > getInstrMaxCountValue()) {
-      Value = getInstrMaxCountValue();
-      Overflowed = true;
+    uint64_t Value;
+    // When a profile has single byte coverage, use || to merge counters.
+    if (HasSingleByteCoverage)
+      Value = Other.Counts[I] || Counts[I];
----------------
ellishg wrote:

Yes, we actually do use block coverage to collect many raw profiles and aggregate them into an indexed profile. Since the counts can be larger than one, it helps differentiate between some hot and cold blocks during optimization.

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


More information about the cfe-commits mailing list