diff options
author | Mircea Trofin <mtrofin@google.com> | 2023-12-14 15:10:48 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-14 15:10:48 -0800 |
commit | ed10fba1b274b81e1f119eab7a074a273df9ec32 (patch) | |
tree | 29e277d0640cc53adbd92fe458d21f995ddd3998 /lldb/source/Commands/CommandObjectThread.cpp | |
parent | 57f42a8765cd3d878be4fb59ad44c85f8a7ca223 (diff) | |
download | llvm-ed10fba1b274b81e1f119eab7a074a273df9ec32.zip llvm-ed10fba1b274b81e1f119eab7a074a273df9ec32.tar.gz llvm-ed10fba1b274b81e1f119eab7a074a273df9ec32.tar.bz2 |
[ThinLTO] Allow importing based on a workload definition (#74545)
An example of a "workload definition" would be "the transitive closure of functions actually called to satisfy a RPC request", i.e. a (typically significantly) smaller subset of the transitive closure (static + possible indirect call targets) of callees. This means this workload definition is a type of flat dynamic profile.
Producing one is not in scope - it can be produced offline from traces, or from sample-based profiles, etc.
This patch adds awareness to ThinLTO of such a concept. A workload is defined as a root and a list of functions. All function references are by-name (more readable than GUIDs). In the case of aliases, the expectation is the list contains all the alternative names.
The workload definitions are presented to the linker as a json file, containing a dictionary. The keys are the roots, the values are the list of functions.
The import list for a module defining a root will be the functions listed for it in the profile.
Using names this way assumes unique names for internal functions, i.e. clang's `-funique-internal-linkage-names`.
Note that the behavior affects the entire module where a root is defined (i.e. different workloads best be defined in different modules), and does not affect modules that don't define roots.
Diffstat (limited to 'lldb/source/Commands/CommandObjectThread.cpp')
0 files changed, 0 insertions, 0 deletions