Lines Matching +full:merge +full:- +full:base

1 //=-- SampleProf.cpp - Sample profiling format support --------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
15 #include "llvm/Config/llvm-config.h"
31 "profile-symbol-list-cutoff", cl::Hidden, cl::init(-1),
36 "generate-merged-base-profiles",
37 cl::desc("When generating nested context-sensitive profiles, always "
38 "generate extra base profile for function with all its context "
117 /// Merge the samples in \p Other into this record.
119 sampleprof_error SampleRecord::merge(const SampleRecord &Other, in merge() function in SampleRecord
168 OS << SI->first << ": " << SI->second; in print()
182 for (const auto &FS : CS->second) { in print()
184 OS << CS->first << ": inlined callee: " << FS.second.getFunction() in print()
210 if (A.second->getTotalSamples() == B.second->getTotalSamples()) in sortFuncProfiles()
211 return A.second->getContext() < B.second->getContext(); in sortFuncProfiles()
212 return A.second->getTotalSamples() > B.second->getTotalSamples(); in sortFuncProfiles()
217 return (DIL->getLine() - DIL->getScope()->getSubprogram()->getLine()) & in getOffset()
224 // In a pseudo-probe based profile, a callsite is simply represented by the in getCallSiteIdentifier()
229 DIL->getDiscriminator()), in getCallSiteIdentifier()
233 ProfileIsFS ? DIL->getDiscriminator() : DIL->getBaseDiscriminator(); in getCallSiteIdentifier()
246 for (DIL = DIL->getInlinedAt(); DIL; DIL = DIL->getInlinedAt()) { in findFunctionSamples()
248 StringRef Name = PrevDIL->getScope()->getSubprogram()->getLinkageName(); in findFunctionSamples()
250 Name = PrevDIL->getScope()->getSubprogram()->getName(); in findFunctionSamples()
260 for (int i = S.size() - 1; i >= 0 && FS != nullptr; i--) { in findFunctionSamples()
261 FS = FS->findFunctionSamplesAt(S[i].first, S[i].second, Remapper, in findFunctionSamples()
291 auto FS = I->second.find(getRepInFormat(CalleeName)); in findFunctionSamplesAt()
292 if (FS != I->second.end()) in findFunctionSamplesAt()
293 return &FS->second; in findFunctionSamplesAt()
295 if (FuncNameToProfNameMap && !FuncNameToProfNameMap->empty()) { in findFunctionSamplesAt()
296 auto R = FuncNameToProfNameMap->find(FunctionId(CalleeName)); in findFunctionSamplesAt()
297 if (R != FuncNameToProfNameMap->end()) { in findFunctionSamplesAt()
298 CalleeName = R->second.stringRef(); in findFunctionSamplesAt()
299 auto FS = I->second.find(getRepInFormat(CalleeName)); in findFunctionSamplesAt()
300 if (FS != I->second.end()) in findFunctionSamplesAt()
301 return &FS->second; in findFunctionSamplesAt()
306 if (auto NameInProfile = Remapper->lookUpNameInProfile(CalleeName)) { in findFunctionSamplesAt()
307 auto FS = I->second.find(getRepInFormat(*NameInProfile)); in findFunctionSamplesAt()
308 if (FS != I->second.end()) in findFunctionSamplesAt()
309 return &FS->second; in findFunctionSamplesAt()
319 for (const auto &NameFS : I->second) in findFunctionSamplesAt()
353 // Nothing to merge if sample threshold is zero in trimAndMergeColdContextProfiles()
357 // Trimming base profiles only is mainly to honor the preinliner decsion. When in trimAndMergeColdContextProfiles()
374 // Remove the cold profile from ProfileMap and merge them into in trimAndMergeColdContextProfiles()
379 auto MergedContext = I.second->getContext().getContextFrames(); in trimAndMergeColdContextProfiles()
384 MergedProfile.merge(*I.second); in trimAndMergeColdContextProfiles()
395 // Merge the profile if the original profile exists, otherwise just insert in trimAndMergeColdContextProfiles()
399 FunctionSamples &OrigProfile = Ret.first->second; in trimAndMergeColdContextProfiles()
400 OrigProfile.merge(I.second); in trimAndMergeColdContextProfiles()
435 assert(It->second.FuncName == CalleeName && in getOrCreateChildFrame()
437 return &It->second; in getOrCreateChildFrame()
448 auto *NewNode = getOrCreateContextPath(FSamples->getContext()); in ProfileConverter()
449 assert(!NewNode->FuncSamples && "New node cannot have sample profile"); in ProfileConverter()
450 NewNode->FuncSamples = FSamples; in ProfileConverter()
459 Node = Node->getOrCreateChildFrame(CallSiteLoc, Callsite.Func); in getOrCreateContextPath()
476 SampleContext OrigChildContext = ChildProfile->getContext(); in convertCSProfiles()
479 ChildProfile->getContext().setFunction(OrigChildContext.getFunction()); in convertCSProfiles()
482 auto &SamplesMap = NodeProfile->functionSamplesAt(ChildNode.CallSiteLoc); in convertCSProfiles()
484 NodeProfile->addTotalSamples(ChildProfile->getTotalSamples()); in convertCSProfiles()
487 auto Count = NodeProfile->removeCalledTargetAndBodySample( in convertCSProfiles()
490 NodeProfile->removeTotalSamples(Count); in convertCSProfiles()
498 // base profiles improves the code quality for thinlto build by allowing a in convertCSProfiles()
499 // profile in the prelink phase for to-be-fully-inlined functions. in convertCSProfiles()
501 ProfileMap[ChildProfile->getContext()].merge(*ChildProfile); in convertCSProfiles()
502 NewChildProfileHash = ChildProfile->getContext().getHashCode(); in convertCSProfiles()
504 ProfileMap[ChildProfile->getContext()].merge(*ChildProfile); in convertCSProfiles()
505 NewChildProfileHash = ChildProfile->getContext().getHashCode(); in convertCSProfiles()
506 auto &SamplesMap = NodeProfile->functionSamplesAt(ChildNode.CallSiteLoc); in convertCSProfiles()
507 SamplesMap[ChildProfile->getFunction()].getContext().setAttribute( in convertCSProfiles()