You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ValueMapper: Delete unused initializers of replaced appending globals.
A full LTO link time performance and memory regression was introduced
by #137081 in cases where the modules contain large quantities of llvm.used
globals. This was unnoticed because it was not expected that this would
be a typical case, but this is exactly what coverage collection does,
and when this feature is enabled together with full LTO we end up with
quadratic memory consumption (from the unused constants) and quadratic
complexity in the function Verifier::visitGlobalValue (which visits all
the unused constants in the use list of each global value). This is a
targeted fix that avoids reintroducing the quadratic complexity from
before #137081, by having ValueMapper delete the old initializer of an
appending global if it is unused, instead of visiting every global in
the context after every link.
The repro-cfi-64 reproducer from #167037 before and after this change:
```
Elapsed time Max RSS (KB)
Before 12:05.11 52537184
After 3:27.68 7520696
```
Fixes#167037.
Reviewers: nikic, teresajohnson
Reviewed By: teresajohnson
Pull Request: #167629
0 commit comments