[llvm] [MemProf] Support cloning for indirect calls with ThinLTO (PR #110625)
Snehasish Kumar via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 4 10:47:54 PDT 2024
================
@@ -4075,24 +4367,80 @@ bool MemProfContextDisambiguation::applyImport(Module &M) {
<< ore::NV("Attribute", AllocTypeString));
}
} else if (!CallsiteContext.empty()) {
- // Consult the next callsite node.
- assert(SI != FS->callsites().end());
- auto &StackNode = *(SI++);
-
+ if (!CalledFunction) {
+ // This is an indirect call, see if we have profile information and
+ // whether any clones were recorded for the profiled targets (that
+ // we synthesized CallsiteInfo summary records for when building the
+ // index).
#ifndef NDEBUG
- // Sanity check that the stack ids match between the summary and
- // instruction metadata.
- auto StackIdIndexIter = StackNode.StackIdIndices.begin();
- for (auto StackId : CallsiteContext) {
- assert(StackIdIndexIter != StackNode.StackIdIndices.end());
- assert(ImportSummary->getStackIdAtIndex(*StackIdIndexIter) ==
- StackId);
- StackIdIndexIter++;
+ // We should have skipped inline assembly calls.
+ auto *CI = dyn_cast<CallInst>(CB);
+ assert(!CI || !CI->isInlineAsm());
+#endif
+ // We should have skipped direct calls via a Constant.
+ assert(CalledValue && !isa<Constant>(CalledValue));
+
+ uint32_t NumCandidates;
+ uint64_t TotalCount;
+ auto CandidateProfileData =
+ ICallAnalysis.getPromotionCandidatesForInstruction(
+ CB, TotalCount, NumCandidates);
+ if (!CandidateProfileData.empty()) {
+ unsigned CallsiteInfoStartStartIndex =
----------------
snehasish wrote:
Should this be size_t? Also maybe use std::distance and drop the static_cast?
https://github.com/llvm/llvm-project/pull/110625
More information about the llvm-commits
mailing list