Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4 |
|
#
17688986 |
| 06-May-2023 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Control availability of hot/cold operator new from LTO link
Adds an LTO option to indicate that whether we are linking with an allocator that supports hot/cold operator new interfaces. If
[MemProf] Control availability of hot/cold operator new from LTO link
Adds an LTO option to indicate that whether we are linking with an allocator that supports hot/cold operator new interfaces. If not, at the start of the LTO backends any existing memprof hot/cold attributes are removed from the IR, and we also remove memprof metadata so that post-LTO inlining doesn't add any new attributes.
This is done via setting a new flag in the module summary index. It is important to communicate via the index to the LTO backends so that distributed ThinLTO handles this correctly, as they are invoked by separate clang processes and the combined index is how we communicate information from the LTO link. Specifically, for distributed ThinLTO the LTO related processes look like: ``` # Thin link: $ lld --thinlto-index-only obj1.o ... objN.o -llib ... # ThinLTO backends: $ clang -x ir obj1.o -fthinlto-index=obj1.o.thinlto.bc -c -O2 ... $ clang -x ir objN.o -fthinlto-index=objN.o.thinlto.bc -c -O2 ```
It is during the thin link (lld --thinlto-index-only) that we have visibility into linker dependences and want to be able to pass the new option via -Wl,-supports-hot-cold-new. This will be recorded in the summary indexes created for the distributed backend processes (*.thinlto.bc) and queried from there, so that we don't need to know during those individual clang backends what allocation library was linked. Since in-process ThinLTO and regular LTO also use a combined index, for consistency we query the flag out of the index in all LTO backends.
Additionally, when the LTO option is disabled, exit early from the MemProfContextDisambiguation handling performed during LTO, as this is unnecessary.
Depends on D149117 and D149192.
Differential Revision: https://reviews.llvm.org/D149215
show more ...
|
#
04f3c5a7 |
| 04-May-2023 |
Teresa Johnson <tejohnson@google.com> |
Restore again "[MemProf] Context disambiguation cloning pass [patch 3/4]"
This reverts commit f09807ca9dda2f588298d8733e89a81105c88120, restoring bfe7205975a63a605ff3faacd97fe4c1bf4c19b3 and follow
Restore again "[MemProf] Context disambiguation cloning pass [patch 3/4]"
This reverts commit f09807ca9dda2f588298d8733e89a81105c88120, restoring bfe7205975a63a605ff3faacd97fe4c1bf4c19b3 and follow on fix e3e6bc699574550f2ed1de07f4e5bcdddaa65557, now that the nondeterminism has been addressed by D149924.
Differential Revision: https://reviews.llvm.org/D141077
show more ...
|
#
f09807ca |
| 04-May-2023 |
Teresa Johnson <tejohnson@google.com> |
Revert "Restore "[MemProf] Context disambiguation cloning pass [patch 3/4]""
This reverts commit bfe7205975a63a605ff3faacd97fe4c1bf4c19b3, and follow on fix e3e6bc699574550f2ed1de07f4e5bcdddaa65557,
Revert "Restore "[MemProf] Context disambiguation cloning pass [patch 3/4]""
This reverts commit bfe7205975a63a605ff3faacd97fe4c1bf4c19b3, and follow on fix e3e6bc699574550f2ed1de07f4e5bcdddaa65557, due to some remaining instability exposed by the bot enabling expensive checks: https://lab.llvm.org/buildbot/#/builders/42/builds/9842
show more ...
|
#
e3e6bc69 |
| 04-May-2023 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Need to require asserts for tests that use -stats
Follow up to bfe7205975a63a605ff3faacd97fe4c1bf4c19b3 to require asserts which is needed for the use of -stats. This showed up in the foll
[MemProf] Need to require asserts for tests that use -stats
Follow up to bfe7205975a63a605ff3faacd97fe4c1bf4c19b3 to require asserts which is needed for the use of -stats. This showed up in the following bot failure: https://lab.llvm.org/buildbot/#/builders/91/builds/16760
show more ...
|
#
bfe72059 |
| 03-May-2023 |
Teresa Johnson <tejohnson@google.com> |
Restore "[MemProf] Context disambiguation cloning pass [patch 3/4]"
This reverts commit 6fbf022908c104a380fd1854fb96eafc64509366, restoring commit bf6ff4fd4b735afffc65f92a4a79f6610e7174c3 with a fix
Restore "[MemProf] Context disambiguation cloning pass [patch 3/4]"
This reverts commit 6fbf022908c104a380fd1854fb96eafc64509366, restoring commit bf6ff4fd4b735afffc65f92a4a79f6610e7174c3 with a fix for a bot failure due to a previously unstable iteration order.
Differential Revision: https://reviews.llvm.org/D141077
show more ...
|
#
6fbf0229 |
| 03-May-2023 |
Teresa Johnson <tejohnson@google.com> |
Revert "[MemProf] Context disambiguation cloning pass [patch 3/4]"
This reverts commit bf6ff4fd4b735afffc65f92a4a79f6610e7174c3.
There is a bot failure where we are getting the correct remarks outp
Revert "[MemProf] Context disambiguation cloning pass [patch 3/4]"
This reverts commit bf6ff4fd4b735afffc65f92a4a79f6610e7174c3.
There is a bot failure where we are getting the correct remarks output but in a different order. I'll need to investigate to see where we are having nondeterministic behavior.
show more ...
|
Revision tags: llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7 |
|
#
bf6ff4fd |
| 05-Jan-2023 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Context disambiguation cloning pass [patch 3/4]
Applies cloning decisions to the IR, cloning functions and updating calls. For Regular LTO, the IR is updated directly during function assig
[MemProf] Context disambiguation cloning pass [patch 3/4]
Applies cloning decisions to the IR, cloning functions and updating calls. For Regular LTO, the IR is updated directly during function assignment, whereas for ThinLTO it is recorded in the summary index (a subsequent patch will apply to the IR via the index during the ThinLTO backend.
The function assignment and cloning proceeds greedily, and we create new clones as needed when we find an incompatible assignment of function clones to callsite clones (i.e. when different callers need to invoke different combinations of callsite clones).
Depends on D140949.
Differential Revision: https://reviews.llvm.org/D141077
show more ...
|
#
a4bdb275 |
| 02-May-2023 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Use profiled lifetime access density directly
Now that the runtime tracks the lifetime access density directly, we can use that directly in the threshold checks instead of less accurately
[MemProf] Use profiled lifetime access density directly
Now that the runtime tracks the lifetime access density directly, we can use that directly in the threshold checks instead of less accurately computing from other statistics.
Differential Revision: https://reviews.llvm.org/D149684
show more ...
|
#
a104e270 |
| 21-Apr-2023 |
Teresa Johnson <tejohnson@google.com> |
Restore "[MemProf] Context disambiguation cloning pass [patch 2/3]"
This restores d0649a6ad8be778abf7569f502148d577f8bc6f1 (reverted in commit 03bf59d275a16815dc5a2e3f279815554f7cd0ca), with fixes f
Restore "[MemProf] Context disambiguation cloning pass [patch 2/3]"
This restores d0649a6ad8be778abf7569f502148d577f8bc6f1 (reverted in commit 03bf59d275a16815dc5a2e3f279815554f7cd0ca), with fixes for bot failures. Confirmed that gcc, which reproduced both failures, now builds it fine.
Differential Revision: https://reviews.llvm.org/D140949
show more ...
|
#
03bf59d2 |
| 21-Apr-2023 |
Teresa Johnson <tejohnson@google.com> |
Revert "[MemProf] Context disambiguation cloning pass [patch 2/3]"
This reverts commit d0649a6ad8be778abf7569f502148d577f8bc6f1.
Reverting due to a number of bot failures that need investigation.
|
#
d0649a6a |
| 04-Jan-2023 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Context disambiguation cloning pass [patch 2/3]
Performs cloning on the CallsiteContextGraph (not on the IR or summary index), in order to uniquely identify the allocation behavior of an a
[MemProf] Context disambiguation cloning pass [patch 2/3]
Performs cloning on the CallsiteContextGraph (not on the IR or summary index), in order to uniquely identify the allocation behavior of an allocation call given its context. In order to do this, the graph is recursively traversed starting from the allocation nodes, until we identify a point where the allocation behavior is unambiguous (the edges have a single allocation type). Nodes are then cloned as we unwind the recursion. We try to perform the minimal amount of cloning required to disambiguate the contexts.
The follow-on patch will contain the support for applying the cloning to the IR.
Depends on D140908 and D145836.
Differential Revision: https://reviews.llvm.org/D140949
show more ...
|
#
700cd990 |
| 22-Mar-2023 |
Teresa Johnson <tejohnson@google.com> |
Restore "[MemProf] Context disambiguation cloning pass [patch 1a/3]"
This restores commit d6ad4f01c3dafcab335bca66dac6e36d9eac8421, which was reverted in commit 883dbb9c86be87593a58ef10b070b3a0564c7
Restore "[MemProf] Context disambiguation cloning pass [patch 1a/3]"
This restores commit d6ad4f01c3dafcab335bca66dac6e36d9eac8421, which was reverted in commit 883dbb9c86be87593a58ef10b070b3a0564c7fee, along with a fix for gcc 12.2 build errors in the original commit.
Support for building, printing, and displaying CallsiteContextGraph which represents the MemProf metadata contexts. Uses CRTP to enable support for both IR (regular LTO) and summary (ThinLTO). This patch includes the support for building it in regular LTO mode (from memprof and callsite metadata), and the next patch will add the handling for building it from ThinLTO summaries.
Also includes support for dumping the graph to text and to dot files.
Follow-on patches will contain the support for cloning on the graph and in the IR.
The graph represents the call contexts in all memprof metadata on allocation calls, with nodes for the allocations themselves, as well as for the calls in each context. The graph is initially built from the allocation memprof metadata (or summary) MIBs. It is then updated to match calls with callsite metadata onto the nodes, updating it to reflect any inlining performed on those calls.
Each MIB (representing an allocation's call context with allocation behavior) is assigned a unique context id during the graph build. The edges and nodes in the graph are decorated with the context ids they carry. This is used to correctly update the graph when cloning is performed so that we can uniquify the context for a single (possibly cloned) allocation.
Differential Revision: https://reviews.llvm.org/D140908
show more ...
|
#
d6ad4f01 |
| 29-Dec-2022 |
Teresa Johnson <tejohnson@google.com> |
[MemProf] Context disambiguation cloning pass [patch 1a/3]
Support for building, printing, and displaying CallsiteContextGraph which represents the MemProf metadata contexts. Uses CRTP to enable sup
[MemProf] Context disambiguation cloning pass [patch 1a/3]
Support for building, printing, and displaying CallsiteContextGraph which represents the MemProf metadata contexts. Uses CRTP to enable support for both IR (regular LTO) and summary (ThinLTO). This patch includes the support for building it in regular LTO mode (from memprof and callsite metadata), and the next patch will add the handling for building it from ThinLTO summaries.
Also includes support for dumping the graph to text and to dot files.
Follow-on patches will contain the support for cloning on the graph and in the IR.
The graph represents the call contexts in all memprof metadata on allocation calls, with nodes for the allocations themselves, as well as for the calls in each context. The graph is initially built from the allocation memprof metadata (or summary) MIBs. It is then updated to match calls with callsite metadata onto the nodes, updating it to reflect any inlining performed on those calls.
Each MIB (representing an allocation's call context with allocation behavior) is assigned a unique context id during the graph build. The edges and nodes in the graph are decorated with the context ids they carry. This is used to correctly update the graph when cloning is performed so that we can uniquify the context for a single (possibly cloned) allocation.
Depends on D140786.
Differential Revision: https://reviews.llvm.org/D140908
show more ...
|