diff options
author | Fangrui Song <i@maskray.me> | 2025-02-04 09:12:32 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-04 09:12:32 -0800 |
commit | 6ab034b828d3a66acca61e28ac41f2e8b300e355 (patch) | |
tree | 7bbd112d832f544ffd9aa6097587076ebcd3fb56 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | 0c7bd879d28a37e215c0cf02b383e224bc9f2ebf (diff) | |
download | llvm-6ab034b828d3a66acca61e28ac41f2e8b300e355.zip llvm-6ab034b828d3a66acca61e28ac41f2e8b300e355.tar.gz llvm-6ab034b828d3a66acca61e28ac41f2e8b300e355.tar.bz2 |
[ELF] Add BPSectionOrderer options (#125559)
Reland #120514 after 2f6e3df08a8b7cd29273980e47310cf09c6fdbd8 fixed
iteration order issue and libstdc++/libc++ differences.
---
Both options instruct the linker to optimize section layout with the
following goals:
* `--bp-compression-sort=[data|function|both]`: Improve Lempel-Ziv
compression by grouping similar sections together, resulting in a
smaller compressed app size.
* `--bp-startup-sort=function --irpgo-profile=<file>`: Utilize a
temporal profile file to reduce page faults during program startup.
The linker determines the section order by considering three groups:
* Function sections ordered according to the temporal profile
(`--irpgo-profile=`), prioritizing early-accessed and frequently
accessed functions.
* Function sections. Sections containing similar functions are placed
together, maximizing compression opportunities.
* Data sections. Similar data sections are placed together.
Within each group, the sections are ordered using the Balanced
Partitioning algorithm.
The linker constructs a bipartite graph with two sets of vertices:
sections and utility vertices.
* For profile-guided function sections:
+ The number of utility vertices is determined by the symbol order
within the profile file.
+ If `--bp-compression-sort-startup-functions` is specified, extra
utility vertices are allocated to prioritize nearby function similarity.
* For sections ordered for compression: Utility vertices are determined
by analyzing k-mers of the section content and relocations.
The call graph profile is disabled during this optimization.
When `--symbol-ordering-file=` is specified, sections described in that
file are placed earlier.
Co-authored-by: Pengying Xu <xpy66swsry@gmail.com>
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions