================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits