[llvm-branch-commits] [llvm] [BOLT] Match blocks with pseudo probes (PR #99891)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jul 24 13:55:09 PDT 2024
================
@@ -478,10 +605,31 @@ matchWeightsByHashes(BinaryContext &BC,
Blocks.push_back(&Func.Blocks[I + 1]);
BlendedBlockHash BlendedHash(BB->getHash());
BlendedHashes.push_back(BlendedHash);
+ // Collects pseudo probes attached to the BB for use in the StaleMatcher.
+ if (opts::ProfileUsePseudoProbes && PseudoProbeDecoder) {
+ const AddressProbesMap &ProbeMap =
+ PseudoProbeDecoder->getAddress2ProbesMap();
+ const uint64_t FuncAddr = BF.getAddress();
+ const std::pair<uint64_t, uint64_t> &BlockRange =
+ BB->getInputAddressRange();
+ const auto &BlockProbes =
+ llvm::make_range(ProbeMap.lower_bound(FuncAddr + BlockRange.first),
+ ProbeMap.lower_bound(FuncAddr + BlockRange.second));
+ for (const auto &[_, Probes] : BlockProbes) {
+ for (const MCDecodedPseudoProbe &Probe : Probes) {
+ if (Probe.getInlineTreeNode()->hasInlineSite())
+ continue;
+ if (Probe.getType() != static_cast<uint8_t>(PseudoProbeType::Block))
+ continue;
+ Matcher.mapIndexToProbe(Probe.getIndex(), &Probe);
+ Matcher.mapProbeToBB(&Probe, Blocks[I]);
----------------
WenleiHe wrote:
Where do we guard all of this by CFG hash check? I was looking for something like `BFPseudoProbeDescHash == YamlBF.PseudoProbeDescHash`.
I can see `YamlBFGUID` is being checked in `matchWithPseudoProbes`, but 1) this isn't obvious from readability POV, 2) we don't need to populate the mapping if we are not gonna trust probe at all (`BFPseudoProbeDescHash == YamlBF.PseudoProbeDescHash`).
https://github.com/llvm/llvm-project/pull/99891
More information about the llvm-branch-commits
mailing list