mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-24 15:36:07 +00:00

The Global Function Merger (https://discourse.llvm.org/t/rfc-global-function-merging/82608) pass optimistically creates merged instances of functions and suffixes their names with `.Tgm`. Then in the linker, ICF will (hopefully) fold these `.Tgm` functions. For example, a function `foo` might become a thunk `foo` that calls a merged function `foo.Tgm`. Since IRPGO runs before the global merger, we will only have a profile for `foo`. We want to correlate this profile to both `foo` and `foo.Tgm` so they can both be ordered to improve startup time. I built a large binary and found that it increased the number of functions ordered for startup, as expected. ``` Functions for startup: 12049 -> 12697 Functions for compression: 34733 -> 34707 ``` The reason why we don't see a larger improvement is because there are some cases where the code was accidentally working: `getRootSymbol("foo.llvm.5555.Tgm")` already returns `foo`.