@@ -87,10 +87,6 @@ YAMLProfileWriter::convertPseudoProbeDesc(const MCPseudoProbeDecoder &Decoder) {
8787 yaml::bolt::ProfilePseudoProbeDesc Desc;
8888 InlineTreeDesc InlineTree;
8989
90- for (const MCDecodedPseudoProbeInlineTree &TopLev :
91- Decoder.getDummyInlineRoot ().getChildren ())
92- InlineTree.TopLevelGUIDToInlineTree [TopLev.Guid ] = &TopLev;
93-
9490 for (const auto &FuncDesc : Decoder.getGUID2FuncDescMap ())
9591 ++InlineTree.HashIdxMap [FuncDesc.FuncHash ];
9692
@@ -191,14 +187,18 @@ std::tuple<std::vector<yaml::bolt::InlineTreeNode>,
191187 YAMLProfileWriter::InlineTreeMapTy>
192188YAMLProfileWriter::convertBFInlineTree (const MCPseudoProbeDecoder &Decoder,
193189 const InlineTreeDesc &InlineTree,
194- uint64_t GUID ) {
190+ const BinaryFunction &BF ) {
195191 DenseMap<const MCDecodedPseudoProbeInlineTree *, uint32_t > InlineTreeNodeId;
196192 std::vector<yaml::bolt::InlineTreeNode> YamlInlineTree;
197- auto It = InlineTree.TopLevelGUIDToInlineTree .find (GUID);
198- if (It == InlineTree.TopLevelGUIDToInlineTree .end ())
193+ uint64_t Addr = BF.getAddress ();
194+ uint64_t Size = BF.getSize ();
195+ auto Probes = Decoder.getAddress2ProbesMap ().find (Addr, Addr + Size);
196+ if (Probes.empty ())
199197 return {YamlInlineTree, InlineTreeNodeId};
200- const MCDecodedPseudoProbeInlineTree *Root = It->second ;
201- assert (Root && " Malformed TopLevelGUIDToInlineTree" );
198+ const MCDecodedPseudoProbe &Probe = *Probes.begin ();
199+ const MCDecodedPseudoProbeInlineTree *Root = Probe.getInlineTreeNode ();
200+ while (Root->hasInlineSite ())
201+ Root = (const MCDecodedPseudoProbeInlineTree *)Root->Parent ;
202202 uint32_t Index = 0 ;
203203 uint32_t PrevParent = 0 ;
204204 uint32_t PrevGUIDIdx = 0 ;
@@ -240,10 +240,9 @@ YAMLProfileWriter::convert(const BinaryFunction &BF, bool UseDFS,
240240 YamlBF.ExecCount = BF.getKnownExecutionCount ();
241241 YamlBF.ExternEntryCount = BF.getExternEntryCount ();
242242 DenseMap<const MCDecodedPseudoProbeInlineTree *, uint32_t > InlineTreeNodeId;
243- if (PseudoProbeDecoder && BF. getGUID ()) {
243+ if (PseudoProbeDecoder)
244244 std::tie (YamlBF.InlineTree , InlineTreeNodeId) =
245- convertBFInlineTree (*PseudoProbeDecoder, InlineTree, BF.getGUID ());
246- }
245+ convertBFInlineTree (*PseudoProbeDecoder, InlineTree, BF);
247246
248247 BinaryFunction::BasicBlockOrderType Order;
249248 llvm::copy (UseDFS ? BF.dfs () : BF.getLayout ().blocks (),
0 commit comments