Skip to content

Commit 0cf6515

Browse files
committed
[lld-macho][nfc] Use llvm::enumerate + destructuring in more places
I love C++17! chromium_framework_less_dwarf on my 16-core Mac Pro shows no stat sig change in wall time but a slight decrease in user time: ``` base diff difference (95% CI) sys_time 1.759 ± 0.037 1.761 ± 0.033 [ -0.9% .. +1.1%] user_time 4.920 ± 0.043 4.886 ± 0.051 [ -1.2% .. -0.2%] wall_time 5.950 ± 0.117 5.900 ± 0.116 [ -1.8% .. +0.2%] samples 26 37 ``` Reviewed By: #lld-macho, thakis Differential Revision: https://reviews.llvm.org/D136518
1 parent 119c34e commit 0cf6515

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

lld/MachO/InputFiles.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,12 +1013,11 @@ template <class LP> void ObjFile::parseLazy() {
10131013
c->nsyms);
10141014
const char *strtab = reinterpret_cast<const char *>(buf) + c->stroff;
10151015
symbols.resize(nList.size());
1016-
for (auto it : llvm::enumerate(nList)) {
1017-
const NList &sym = it.value();
1016+
for (const auto &[i, sym] : llvm::enumerate(nList)) {
10181017
if ((sym.n_type & N_EXT) && !isUndef(sym)) {
10191018
// TODO: Bound checking
10201019
StringRef name = strtab + sym.n_strx;
1021-
symbols[it.index()] = symtab->addLazyObject(name, *this);
1020+
symbols[i] = symtab->addLazyObject(name, *this);
10221021
if (!lazy)
10231022
break;
10241023
}
@@ -2204,11 +2203,9 @@ void BitcodeFile::parse() {
22042203

22052204
void BitcodeFile::parseLazy() {
22062205
symbols.resize(obj->symbols().size());
2207-
for (auto it : llvm::enumerate(obj->symbols())) {
2208-
const lto::InputFile::Symbol &objSym = it.value();
2206+
for (const auto &[i, objSym] : llvm::enumerate(obj->symbols())) {
22092207
if (!objSym.isUndefined()) {
2210-
symbols[it.index()] =
2211-
symtab->addLazyObject(saver().save(objSym.getName()), *this);
2208+
symbols[i] = symtab->addLazyObject(saver().save(objSym.getName()), *this);
22122209
if (!lazy)
22132210
break;
22142211
}

lld/MachO/SyntheticSections.cpp

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -389,11 +389,11 @@ void macho::writeChainedFixup(uint8_t *buf, const Symbol *sym, int64_t addend) {
389389

390390
void NonLazyPointerSectionBase::writeTo(uint8_t *buf) const {
391391
if (config->emitChainedFixups) {
392-
for (size_t i = 0, n = entries.size(); i < n; ++i)
393-
writeChainedFixup(&buf[i * target->wordSize], entries[i], 0);
392+
for (const auto &[i, entry] : llvm::enumerate(entries))
393+
writeChainedFixup(&buf[i * target->wordSize], entry, 0);
394394
} else {
395-
for (size_t i = 0, n = entries.size(); i < n; ++i)
396-
if (auto *defined = dyn_cast<Defined>(entries[i]))
395+
for (const auto &[i, entry] : llvm::enumerate(entries))
396+
if (auto *defined = dyn_cast<Defined>(entry))
397397
write64le(&buf[i * target->wordSize], defined->getVA());
398398
}
399399
}
@@ -1623,27 +1623,27 @@ void CStringSection::addInput(CStringInputSection *isec) {
16231623

16241624
void CStringSection::writeTo(uint8_t *buf) const {
16251625
for (const CStringInputSection *isec : inputs) {
1626-
for (size_t i = 0, e = isec->pieces.size(); i != e; ++i) {
1627-
if (!isec->pieces[i].live)
1626+
for (const auto &[i, piece] : llvm::enumerate(isec->pieces)) {
1627+
if (!piece.live)
16281628
continue;
16291629
StringRef string = isec->getStringRef(i);
1630-
memcpy(buf + isec->pieces[i].outSecOff, string.data(), string.size());
1630+
memcpy(buf + piece.outSecOff, string.data(), string.size());
16311631
}
16321632
}
16331633
}
16341634

16351635
void CStringSection::finalizeContents() {
16361636
uint64_t offset = 0;
16371637
for (CStringInputSection *isec : inputs) {
1638-
for (size_t i = 0, e = isec->pieces.size(); i != e; ++i) {
1639-
if (!isec->pieces[i].live)
1638+
for (const auto &[i, piece] : llvm::enumerate(isec->pieces)) {
1639+
if (!piece.live)
16401640
continue;
16411641
// See comment above DeduplicatedCStringSection for how alignment is
16421642
// handled.
1643-
uint32_t pieceAlign =
1644-
1 << countTrailingZeros(isec->align | isec->pieces[i].inSecOff);
1643+
uint32_t pieceAlign = 1
1644+
<< countTrailingZeros(isec->align | piece.inSecOff);
16451645
offset = alignTo(offset, pieceAlign);
1646-
isec->pieces[i].outSecOff = offset;
1646+
piece.outSecOff = offset;
16471647
isec->isFinal = true;
16481648
StringRef string = isec->getStringRef(i);
16491649
offset += string.size() + 1; // account for null terminator
@@ -1693,8 +1693,7 @@ void CStringSection::finalizeContents() {
16931693
void DeduplicatedCStringSection::finalizeContents() {
16941694
// Find the largest alignment required for each string.
16951695
for (const CStringInputSection *isec : inputs) {
1696-
for (size_t i = 0, e = isec->pieces.size(); i != e; ++i) {
1697-
const StringPiece &piece = isec->pieces[i];
1696+
for (const auto &[i, piece] : llvm::enumerate(isec->pieces)) {
16981697
if (!piece.live)
16991698
continue;
17001699
auto s = isec->getCachedHashStringRef(i);
@@ -1710,8 +1709,8 @@ void DeduplicatedCStringSection::finalizeContents() {
17101709
// Assign an offset for each string and save it to the corresponding
17111710
// StringPieces for easy access.
17121711
for (CStringInputSection *isec : inputs) {
1713-
for (size_t i = 0, e = isec->pieces.size(); i != e; ++i) {
1714-
if (!isec->pieces[i].live)
1712+
for (const auto &[i, piece] : llvm::enumerate(isec->pieces)) {
1713+
if (!piece.live)
17151714
continue;
17161715
auto s = isec->getCachedHashStringRef(i);
17171716
auto it = stringOffsetMap.find(s);
@@ -1722,7 +1721,7 @@ void DeduplicatedCStringSection::finalizeContents() {
17221721
size =
17231722
offsetInfo.outSecOff + s.size() + 1; // account for null terminator
17241723
}
1725-
isec->pieces[i].outSecOff = offsetInfo.outSecOff;
1724+
piece.outSecOff = offsetInfo.outSecOff;
17261725
}
17271726
isec->isFinal = true;
17281727
}

0 commit comments

Comments
 (0)