[PATCH] D45302: Initialize OffsetMap earlier
Rafael Avila de Espindola via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 4 16:57:25 PDT 2018
espindola created this revision.
espindola added a reviewer: ruiu.
Herald added subscribers: arichardson, emaste.
Sorry for the noise, but now that getSectionPiece uses OffsetMap, it is advantageous to initialize it earlier.
It is also the simplest so far.
https://reviews.llvm.org/D45302
Files:
ELF/InputSection.cpp
ELF/SyntheticSections.cpp
Index: ELF/SyntheticSections.cpp
===================================================================
--- ELF/SyntheticSections.cpp
+++ ELF/SyntheticSections.cpp
@@ -2440,15 +2440,10 @@
// finalize() fixed tail-optimized strings, so we can now get
// offsets of strings. Get an offset for each string and save it
// to a corresponding StringPiece for easy access.
- for (MergeInputSection *Sec : Sections) {
- Sec->OffsetMap.reserve(Sec->Pieces.size());
- for (size_t I = 0, E = Sec->Pieces.size(); I != E; ++I) {
- SectionPiece &P = Sec->Pieces[I];
- Sec->OffsetMap[P.InputOff] = I;
- if (P.Live)
- P.OutputOff = Builder.getOffset(Sec->getData(I));
- }
- }
+ for (MergeInputSection *Sec : Sections)
+ for (size_t I = 0, E = Sec->Pieces.size(); I != E; ++I)
+ if (Sec->Pieces[I].Live)
+ Sec->Pieces[I].OutputOff = Builder.getOffset(Sec->getData(I));
}
void MergeNoTailSection::writeTo(uint8_t *Buf) {
@@ -2501,13 +2496,10 @@
// So far, section pieces have offsets from beginning of shards, but
// we want offsets from beginning of the whole section. Fix them.
parallelForEach(Sections, [&](MergeInputSection *Sec) {
- Sec->OffsetMap.reserve(Sec->Pieces.size());
- for (size_t I = 0, E = Sec->Pieces.size(); I != E; ++I) {
- SectionPiece &P = Sec->Pieces[I];
- Sec->OffsetMap[P.InputOff] = I;
- if (P.Live)
- P.OutputOff += ShardOffsets[getShardId(P.Hash)];
- }
+ for (size_t I = 0, E = Sec->Pieces.size(); I != E; ++I)
+ if (Sec->Pieces[I].Live)
+ Sec->Pieces[I].OutputOff +=
+ ShardOffsets[getShardId(Sec->Pieces[I].Hash)];
});
}
Index: ELF/InputSection.cpp
===================================================================
--- ELF/InputSection.cpp
+++ ELF/InputSection.cpp
@@ -920,6 +920,10 @@
else
splitNonStrings(Data, Entsize);
+ OffsetMap.reserve(Pieces.size());
+ for (size_t I = 0, E = Pieces.size(); I != E; ++I)
+ OffsetMap[Pieces[I].InputOff] = I;
+
if (Config->GcSections && (Flags & SHF_ALLOC))
for (uint32_t Off : LiveOffsets)
getSectionPiece(Off)->Live = true;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D45302.141088.patch
Type: text/x-patch
Size: 2141 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180404/df54e95d/attachment.bin>
More information about the llvm-commits
mailing list