[llvm] [MemProf] Make sure call clones without callsite node clones get updated (PR #159861)
Snehasish Kumar via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 20 18:28:22 PDT 2025
================
@@ -4553,6 +4553,34 @@ bool CallsiteContextGraph<DerivedCCG, FuncTy, CallTy>::assignFunctions() {
DenseMap<CallInfo, CallInfo> CallMap;
};
+ // Map to keep track of information needed to update calls in function clones
+ // when their corresponding callsite node was not itself cloned for that
+ // function clone. Because of call context pruning (i.e. we only keep as much
+ // caller information as needed to distinguish hot vs cold), we may not have
+ // caller edges coming to each callsite node from all possible function
+ // callers. A function clone may get created for other callsites in the
+ // function for which there are caller edges that were not pruned. Any other
+ // callsites in that function clone, which were not themselved cloned for
+ // that function clone, should get updated the same way as the corresponding
+ // callsite in the original function (which may call a clone of its callee).
+ //
+ // We build this map after completing function cloning for each function, so
+ // that we can record the information from its call maps before they are
+ // destructed. The map will be used as we update calls to update any still
+ // unassigned call clones. Note that we may create new node clones as we clone
+ // other functions, so later on we check which node clones were still not
+ // created. To this end, the inner map is a map from function clone number to
+ // the list of calls cloned for that function (can be more than one due to the
+ // Node's MatchingCalls array).
----------------
snehasish wrote:
Does it make sense to enhance the pseudo-code in the function comment with this detail?
https://github.com/llvm/llvm-project/pull/159861
More information about the llvm-commits
mailing list