[all-commits] [llvm/llvm-project] 86c8f3: [lld/mac] Leave more room for thunks in thunk plac...
Nico Weber via All-commits
all-commits at lists.llvm.org
Mon Aug 30 19:09:21 PDT 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 86c8f395ae7ad901a4b64fda67d367610c05a5cb
https://github.com/llvm/llvm-project/commit/86c8f395ae7ad901a4b64fda67d367610c05a5cb
Author: Nico Weber <thakis at chromium.org>
Date: 2021-08-30 (Mon, 30 Aug 2021)
Changed paths:
M lld/MachO/ConcatOutputSection.cpp
A lld/test/MachO/arm64-thunk-starvation.s
Log Message:
-----------
[lld/mac] Leave more room for thunks in thunk placement code
Fixes PR51578 in practice.
Currently there's only enough room for a single thunk, which for real-life code
isn't enough. The error case only happens when there are many branch statements
very close to each other (0 or 1 instructions apart), with the function at the
finalization barrier small.
There's a FIXME on what to do if we hit this case, but that suggestion sounds
complicated to me (see end of PR51578 comment 5 for why).
Instead, just leave more room for thunks. Chromium's unit_tests links fine with
room for 3 thunks. Leave room for 100, which should fix this for most cases in
practice.
There's little cost for leaving lots of room: This slop value only determines
when we finalize sections, and we insert thunks for forward jumps into
unfinalized sections. So leaving room means we'll need a few more thunks, but
the thunk jump range is 128 MiB while a single thunk is just 12 bytes.
For Chromium's unit_tests:
With a slop of 3: thunk calls = 355418, thunks = 10903
With a slop of 100: thunk calls = 355426, thunks = 10904
Chances are 100 is enough for all use cases we'll hit in practice, but even
bumping it to 1000 would probably be fine.
Differential Revision: https://reviews.llvm.org/D108930
More information about the All-commits
mailing list