Lines Matching full:probe
1 //===- lib/MC/MCPseudoProbe.cpp - Pseudo probe encoding support ----------===//
55 "Last probe should not be null for non-sentinel probes"); in emit()
64 assert(Type <= 0xF && "Probe type too big to encode, exceeding 15"); in emit()
69 "Probe attributes too big to encode, exceeding 7"); in emit()
87 // Emit the GUID of the split function that the sentinel probe represents. in emit()
96 dbgs() << "Probe: " << Index << "\n"; in emit()
101 const MCPseudoProbe &Probe, const MCPseudoProbeInlineStack &InlineStack) { in addPseudoProbe() argument
106 // Probe: GUID of C, ... in addPseudoProbe()
108 // which means, Function A inlines function B at call site with a probe id of in addPseudoProbe()
109 // 88, and B inlines C at probe 66. The tri-tree expects a tree path like {[0, in addPseudoProbe()
110 // A], [88, B], [66, C]} to locate the tree node where the probe should be in addPseudoProbe()
115 // An empty inline stack means the function that the probe originates from in addPseudoProbe()
119 Top = InlineSite(Probe.getGuid(), 0); in addPseudoProbe()
127 // point to the node that the probe originates from. in addPseudoProbe()
133 // Make an edge by using the previous probe id and current GUID. in addPseudoProbe()
137 Cur = Cur->getOrAddNode(InlineSite(Probe.getGuid(), Index)); in addPseudoProbe()
140 Cur->Probes.push_back(Probe); in addPseudoProbe()
159 // Emit number of probes in this node, including a sentinel probe for in emit()
164 "Starting probe of a top-level function should be a sentinel probe"); in emit()
165 // The main body of a split function doesn't need a sentinel probe. in emit()
173 // Emit sentinel probe for top-level functions in emit()
178 for (const auto &Probe : Probes) { in emit() local
179 Probe.emit(MCOS, LastProbe); in emit()
180 LastProbe = &Probe; in emit()
192 // Emit probe index in emit()
237 // Emit the group guarded by a sentinel probe. in emit()
243 const MCPseudoProbe *Probe = &SentinelProbe; in emit() local
244 Inlinee.second->emit(MCOS, Probe); in emit()
251 // This emits the pseudo probe tables.
265 // Put out the probe. in emit()
273 "Probe function must exist for a valid GUID"); in getProbeFNameForGUID()
288 // Note that it won't include the probe's belonging function(leaf location) in getInlineContext()
496 // For sentinel probe, the addr field actually stores the GUID of the in buildAddress2ProbeMap()
501 // For now we assume all probe encoding should be either based on in buildAddress2ProbeMap()
502 // leading probe address or function start address. in buildAddress2ProbeMap()
549 OS << "Pseudo Probe Desc:\n"; in printGUID2FuncDescMap()
562 for (auto &Probe : It->second) { in printProbeForAddress() local
563 OS << " [Probe]:\t"; in printProbeForAddress()
564 Probe.print(OS, GUID2FuncDescMap, true); in printProbeForAddress()
589 for (const auto &Probe : Probes) { in getCallProbeForAddr() local
590 if (Probe.isCall()) { in getCallProbeForAddr()
591 // Disabling the assert and returning first call probe seen so far. in getCallProbeForAddr()
601 // "There should be only one call probe corresponding to address " in getCallProbeForAddr()
603 CallProbe = &Probe; in getCallProbeForAddr()
618 const MCDecodedPseudoProbe *Probe, in getInlineContextForProbe() argument
621 Probe->getInlineContext(InlineContextStack, GUID2FuncDescMap); in getInlineContextForProbe()
624 // Note that the context from probe doesn't include leaf frame, in getInlineContextForProbe()
626 const auto *FuncDesc = getFuncDescForGUID(Probe->getGuid()); in getInlineContextForProbe()
628 MCPseudoProbeFrameLocation(FuncDesc->FuncName, Probe->getIndex())); in getInlineContextForProbe()
632 const MCDecodedPseudoProbe *Probe) const { in getInlinerDescForProbe()
633 MCDecodedPseudoProbeInlineTree *InlinerNode = Probe->getInlineTreeNode(); in getInlinerDescForProbe()