This is an archive of the discontinued LLVM Phabricator instance.

[lld-macho][nfc] Eliminate InputSection::Shared
ClosedPublic

Authored by int3 on Feb 2 2022, 7:52 AM.

Details

Reviewers
oontvoo
Group Reviewers
Restricted Project
Commits
rG2b78ef06c2cd: [lld-macho][nfc] Eliminate InputSection::Shared
Summary

Earlier in LLD's evolution, I tried to create the illusion that
subsections were indistinguishable from "top-level" sections. Thus, even
though the subsections shared many common field values, I hid those
common values away in a private Shared struct (see D105305). More
recently, however, @gkm added a public Section struct in D113241 that
served as an explicit way to store values that are common to an entire
set of subsections (aka InputSections). Now that we have another "common
value" struct, Shared has been rendered redundant. All its fields can
be moved into Section instead, and the pointer to Shared can be replaced
with a pointer to Section.

This Section pointer also has the advantage of letting us inspect other
subsections easily, simplifying the implementation of D118798: [lld-macho] Include address offsets in error messages.

P.S. I do think that having both Section and InputSection makes for
a slightly confusing naming scheme. I considered renaming InputSection
to Subsection, but that would break the symmetry with OutputSection.
It would also make us deviate from LLD-ELF's naming scheme.

This change is perf-neutral on my 3.2 GHz 16-Core Intel Xeon W machine:

           base           diff           difference (95% CI)
sys_time   1.258 ± 0.031  1.248 ± 0.023  [  -1.6% ..   +0.1%]
user_time  3.659 ± 0.047  3.658 ± 0.041  [  -0.5% ..   +0.4%]
wall_time  4.640 ± 0.085  4.625 ± 0.063  [  -1.0% ..   +0.3%]
samples    49             61

There's also no stat sig change in RSS (as measured by time -l):

         base                         diff                           difference (95% CI)
time     998038627.097 ± 13567305.958 1003327715.556 ± 15210451.236  [  -0.2% ..   +1.2%]
samples  31                           36

Diff Detail

Event Timeline

int3 created this revision.Feb 2 2022, 7:52 AM
Herald added a project: Restricted Project. · View Herald TranscriptFeb 2 2022, 7:52 AM
int3 requested review of this revision.Feb 2 2022, 7:52 AM
Herald added a project: Restricted Project. · View Herald TranscriptFeb 2 2022, 7:52 AM
int3 edited the summary of this revision. (Show Details)Feb 2 2022, 8:01 AM
oontvoo accepted this revision.Feb 3 2022, 6:50 AM
oontvoo added a subscriber: oontvoo.

LG!

lld/MachO/InputFiles.h
55

what would we call this Subsection if InputSection were to be renamed?

This revision is now accepted and ready to land.Feb 3 2022, 6:50 AM
int3 added inline comments.Feb 3 2022, 6:55 AM
lld/MachO/InputFiles.h
55

SubsectionEntry maybe. It is, after all, an entry into an ordered-map-like structure...

oontvoo added inline comments.Feb 3 2022, 6:59 AM
lld/MachO/InputFiles.h
55

Makes sense. I'd support renaming InputSection if you're up to doing it :)

(personally I don't feel strongly that lld-macho *has to* mirror file and type names 100% after elf, but that's just me)

int3 added inline comments.Feb 3 2022, 7:05 AM
lld/MachO/InputFiles.h
55

mm I realize renaming InputSection also raises the question of what its subclasses should be named...

ConcatInputSection -> ConcatSubsection would be fine, I guess, but CStringInputSections are not subsections. But... we are placing them within Sections::subsections anyway, so maybe calling them subsections isn't totally wrong. Ugh naming is hard

smeenai added a subscriber: smeenai.Feb 3 2022, 9:44 AM

I wouldn't imagine that there's any major difference, but could you also measure the max RSS before and after this change and add it to the summary?

int3 edited the summary of this revision. (Show Details)Feb 3 2022, 4:52 PM
int3 edited the summary of this revision. (Show Details)
int3 updated this revision to Diff 405830.Feb 3 2022, 4:55 PM
int3 edited the summary of this revision. (Show Details)

add RSS numbers

This revision was landed with ongoing or failed builds.Feb 3 2022, 4:56 PM
This revision was automatically updated to reflect the committed changes.