================ @@ -266,6 +313,65 @@ class StaleMatcher { } return BestBlock; } + // Uses pseudo probe information to attach the profile to the appropriate + // block. + const FlowBlock *matchWithPseudoProbes( + BlendedBlockHash BlendedHash, + const std::vector<yaml::bolt::PseudoProbeInfo> &PseudoProbes) const { + if (!YamlBFGUID) + return nullptr; + + if (opts::Verbosity >= 3) + outs() << "BOLT-INFO: attempting to match block with pseudo probes\n"; + + // Searches for the pseudo probe attached to the matched function's block, + // ignoring pseudo probes attached to function calls and inlined functions' + // blocks. + std::vector<const yaml::bolt::PseudoProbeInfo *> BlockPseudoProbes; + for (const auto &PseudoProbe : PseudoProbes) { + // Ensures that pseudo probe information belongs to the appropriate + // function and not an inlined function. + if (PseudoProbe.GUID != YamlBFGUID) + continue; + // Skips pseudo probes attached to function calls. + if (PseudoProbe.Type != static_cast<uint8_t>(PseudoProbeType::Block)) + continue; + + BlockPseudoProbes.push_back(&PseudoProbe); + } + // Returns nullptr if there is not a 1:1 mapping of the yaml block pseudo + // probe and binary pseudo probe. + if (BlockPseudoProbes.size() == 0) { + if (opts::Verbosity >= 3) + errs() << "BOLT-WARNING: no pseudo probes in profile block\n"; + return nullptr; + } + if (BlockPseudoProbes.size() > 1) { + if (opts::Verbosity >= 3) + errs() << "BOLT-WARNING: more than 1 pseudo probes in profile block\n"; + return nullptr; + } + uint64_t Index = BlockPseudoProbes[0]->Index; + auto It = IndexToBBPseudoProbes.find(Index); + if (It == IndexToBBPseudoProbes.end()) { + if (opts::Verbosity >= 3) + errs() << "BOLT-WARNING: no block pseudo probes found within binary " + "block at index\n"; + return nullptr; + } + if (It->second.size() > 1) { + if (opts::Verbosity >= 3) ---------------- dcci wrote:
there's some repetition here ``` if (verbosity >= 3) { ... } ``` I wonder if you can abstract this in a common helper that would help you simplifying the code. https://github.com/llvm/llvm-project/pull/99891 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits