[clang] [llvm] [ThinLTO][Split] Split module for parallel compilation in backend (1/N) (PR #198702)

via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 3 04:34:48 PDT 2026


================

----------------
mmjjpp wrote:

> I'm a little unsure of how you are detecting indirect calls below.

The indirect-call detection currently uses two complementary approaches:

Tracing uses of address-taken functions: for each function whose address is taken, we recursively traverse its users (including constants and global variables). When an instruction using the function pointer is found, we attribute that indirect-call relationship to the instruction’s parent function.
Resolving indirect call instructions: for call instructions whose callee cannot be resolved directly, we:
strip pointer casts to recover the underlying function where possible;
consult callees metadata;
use indirect-call PGO profile data to add the profiled candidate callees.

> what do you mean by "non-entrypoint" function?

By “non-entrypoint function,” I mean a function that is not a root of the simplified call graph. We identify graph roots by checking NumReferences == 0, where NumReferences is the number of incoming edges. This is a graph-level notion and does not necessarily mean the program’s actual entry function.

For example, in a strongly connected component such as A -> B -> A, both functions have incoming references, so neither has NumReferences == 0. Such functions are therefore not discovered through the initial root search; the implementation handles these unvisited cyclic components afterward by treating one of their functions as a root.





https://github.com/llvm/llvm-project/pull/198702


More information about the cfe-commits mailing list