diff options
author | Artem Pianykh <artem.pyanykh@gmail.com> | 2025-01-24 11:42:44 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-24 11:42:44 +0000 |
commit | 5ce349589a4adcc18f5807551bf4b78091746aa8 (patch) | |
tree | 27fef4746d932261720a75c745cb6716450e0528 /llvm/lib/Transforms/Utils/InlineFunction.cpp | |
parent | 4831fa8632f6ab89fe2c14b8e7ec09500e43c099 (diff) | |
download | llvm-5ce349589a4adcc18f5807551bf4b78091746aa8.zip llvm-5ce349589a4adcc18f5807551bf4b78091746aa8.tar.gz llvm-5ce349589a4adcc18f5807551bf4b78091746aa8.tar.bz2 |
[Coro] Prebuild a module-level debug info set and share it between all coroutine clones (#118628)
Summary:
CoroCloner, by calling into CloneFunctionInto, does a lot of repeated
work priming DIFinder and building a list of common module-level debug
info metadata. For programs compiled with full debug info this can get
very expensive.
This diff builds the data once and shares it between all clones.
Anecdata for a sample cpp source file compiled with full debug info:
| | Baseline | IdentityMD set | Prebuilt CommonDI (cur.) |
|-----------------|----------|----------------|--------------------------|
| CoroSplitPass | 306ms | 221ms | 68ms |
| CoroCloner | 101ms | 72ms | 0.5ms |
| CollectCommonDI | - | - | 63ms |
| Speed up | 1x | 1.4x | 4.5x |
Note that CollectCommonDebugInfo happens once *per coroutine* rather than per clone.
Test Plan:
ninja check-llvm-unit
ninja check-llvm
Compiled a sample internal source file, checked time trace output for scope timings.
Diffstat (limited to 'llvm/lib/Transforms/Utils/InlineFunction.cpp')
0 files changed, 0 insertions, 0 deletions