[all-commits] [llvm/llvm-project] 88ce27: [LLD][ELF] Improve ICF for relocations to ineligib...

Andrew Ng via All-commits all-commits at lists.llvm.org
Thu Oct 15 04:48:47 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 88ce27c39c5e42d8a85ac1144d2ae0fae68e8853
      https://github.com/llvm/llvm-project/commit/88ce27c39c5e42d8a85ac1144d2ae0fae68e8853
  Author: Andrew Ng <andrew.ng at sony.com>
  Date:   2020-10-15 (Thu, 15 Oct 2020)

  Changed paths:
    M lld/ELF/ICF.cpp
    A lld/test/ELF/icf-ineligible.s

  Log Message:
  -----------
  [LLD][ELF] Improve ICF for relocations to ineligible sections via "aliases"

ICF was not able to merge equivalent sections because of relocations to
sections ineligible for ICF that use alternative symbols, e.g. symbol
aliases or section relative relocations.

Merging in this scenario has been enabled by giving the sections that
are ineligible for ICF a unique ID, i.e. an equivalence class of their
own. This approach also provides another benefit as it improves the
hashing that is used to perform the initial equivalance grouping for
ICF. This is because the ICF ineligible sections can now contribute a
unique value towards the hashes instead of the same value of zero. This
has been seen to reduce link time with ICF by ~68% for objects compiled
with -fprofile-instr-generate.

In order to facilitate this use of a unique ID, the existing
inconsistent approach to the setting of the InputSection eqClass in ICF
has been changed so that there is a clear distinction between the
eqClass values of ICF eligible sections and those of the ineligible
sections that have a unique ID. This inconsistency could have caused
incorrect equivalence class equality in the past, although it appears
that no issues were encountered in actual use.

Differential Revision: https://reviews.llvm.org/D88830




More information about the All-commits mailing list