HomePhabricator

[lld-macho] Implement ICF

Authored by gkm on May 19 2021, 9:58 AM.

Description

[lld-macho] Implement ICF

ICF = Identical C(ode|OMDAT) Folding

This is the LLD ELF/COFF algorithm, adapted for MachO. So far, only -icf all is supported. In order to support -icf safe, we will need to port address-significance tables (.addrsig directives) to MachO, which will come in later diffs.

check-{llvm,clang,lld} have 0 regressions for lld -icf all vs. baseline ld64.

We only run ICF on __TEXT,__text for reasons explained in the block comment in ConcatOutputSection.cpp.

Here is the perf impact for linking chromium_framekwork on a Mac Pro (16-core Xeon W) for the non-ICF case vs. pre-ICF:

    N           Min           Max        Median           Avg        Stddev
x  20          4.27          4.44          4.34         4.349   0.043029977
+  20          4.37          4.46         4.405        4.4115   0.025188761
Difference at 95.0% confidence
        0.0625 +/- 0.0225658
        1.43711% +/- 0.518873%
        (Student's t, pooled s = 0.0352566)

Reviewed By: #lld-macho, int3

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

Details

Committed
gkmJun 17 2021, 10:07 AM
Reviewer
Restricted Project
Differential Revision
D103292: [lld-macho] Implement ICF
Parents
rG734d688fbce8: [clang] Fix a race condition in the build of clangInterpreter
Branches
Unknown
Tags
Unknown