[llvm] [SampleFDO] Stale profile call-graph matching (PR #92151)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 4 00:49:49 PDT 2024
================
@@ -590,14 +618,308 @@ void SampleProfileMatcher::computeAndReportProfileStaleness() {
}
}
-void SampleProfileMatcher::runOnModule() {
- ProfileConverter::flattenProfile(Reader.getProfiles(), FlattenedProfiles,
- FunctionSamples::ProfileIsCS);
+void SampleProfileMatcher::findNewIRFunctions(
+ StringMap<Function *> &NewIRFunctions) {
+ // TODO: Support MD5 profile.
+ if (FunctionSamples::UseMD5)
+ return;
+ StringSet<> NamesInProfile;
+ if (auto NameTable = Reader.getNameTable()) {
+ for (auto Name : *NameTable)
+ NamesInProfile.insert(Name.stringRef());
+ }
+
for (auto &F : M) {
- if (skipProfileForFunction(F))
+ // Skip declarations, as even if the function can be matched, we have
+ // nothing to do with it.
+ if (F.isDeclaration())
continue;
- runOnFunction(F);
+
+ StringRef CanonFName = FunctionSamples::getCanonicalFnName(F.getName());
+ const auto *FS = getFlattenedSamplesFor(F);
+ if (FS)
+ continue;
+
+ // For extended binary, functions are fully inlined may not be loaded in the
+ // top-level profile, so check the NameTable which has the all symbol names
+ // in profile.
+ if (NamesInProfile.count(CanonFName))
+ continue;
+
+ // For extended binary, non-profiled function symbols are in the profile
+ // symbol list table.
+ if (PSL && PSL->contains(CanonFName))
+ continue;
+
+ LLVM_DEBUG(dbgs() << "Function " << CanonFName
+ << " is not in profile or symbol list table.\n");
+ NewIRFunctions[CanonFName] = &F;
+ }
+}
+
+std::vector<Function *> *SampleProfileMatcher::findNewIRCallees(
+ Function &Func, const StringMap<Function *> &NewIRFunctions) {
+ auto R = FuncToNewCalleesMap.try_emplace(&Func, std::vector<Function *>());
+ std::vector<Function *> &IRCalleesToMatch = R.first->second;
----------------
WenleiHe wrote:
This function by itself has nothing to do with matching, so the name `IRCalleesToMatch` can adds confusion. This is about finding new IR callees, so it should be named `NewIRCallees`. Whether the result is used to match something is outside of the scope of this function, and should not be used in the naming here.
https://github.com/llvm/llvm-project/pull/92151
More information about the llvm-commits
mailing list