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
21 KiB
21 KiB