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