================ @@ -587,6 +590,51 @@ size_t YAMLProfileReader::matchWithCallGraph(BinaryContext &BC) { return MatchedWithCallGraph; } +void YAMLProfileReader::InlineTreeNodeMapTy::matchInlineTrees( + const MCPseudoProbeDecoder &Decoder, + const yaml::bolt::PseudoProbeDesc &YamlPD, + const std::vector<yaml::bolt::InlineTreeNode> &YamlInlineTree, + llvm::function_ref<const MCDecodedPseudoProbeInlineTree *(uint64_t)> + GetRootCallback) { + + // Match inline tree nodes by GUID, checksum, parent, and call site. + uint32_t ParentId = 0; + uint32_t PrevGUIDIdx = 0; + uint32_t Index = 0; + for (const yaml::bolt::InlineTreeNode &InlineTreeNode : YamlInlineTree) { + uint64_t GUIDIdx = InlineTreeNode.GUIDIndex; + if (GUIDIdx) + PrevGUIDIdx = GUIDIdx; + else + GUIDIdx = PrevGUIDIdx; + assert(GUIDIdx < YamlPD.GUID.size()); + assert(GUIDIdx < YamlPD.GUIDHashIdx.size()); + uint64_t GUID = YamlPD.GUID[GUIDIdx]; + uint32_t HashIdx = YamlPD.GUIDHashIdx[GUIDIdx]; + assert(HashIdx < YamlPD.Hash.size()); + uint64_t Hash = YamlPD.Hash[HashIdx]; + uint32_t InlineTreeNodeId = Index++; + ParentId += InlineTreeNode.ParentIndexDelta; + uint32_t CallSiteProbe = InlineTreeNode.CallSiteProbe; + const MCDecodedPseudoProbeInlineTree *Cur = nullptr; + if (!InlineTreeNodeId) { + Cur = GetRootCallback(GUID); + } else if (const MCDecodedPseudoProbeInlineTree *Parent = + getInlineTreeNode(ParentId)) { + for (const MCDecodedPseudoProbeInlineTree &Child : ---------------- wlei-llvm wrote:
I see, I just remembered it has been changed to a vector structure not a map, then that needs the pre-sorting things. OK, I'm good with the current version assuming the perf here is fine. 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