[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