[PATCH] D25698: Update lld to use new LTO comdat api
Rafael Ávila de Espíndola via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 21 14:33:09 PDT 2016
rafael updated this revision to Diff 75486.
https://reviews.llvm.org/D25698
Files:
ELF/InputFiles.cpp
Index: ELF/InputFiles.cpp
===================================================================
--- ELF/InputFiles.cpp
+++ ELF/InputFiles.cpp
@@ -694,8 +694,7 @@
}
template <class ELFT>
-static Symbol *createBitcodeSymbol(DenseSet<CachedHashStringRef> &KeptComdats,
- DenseSet<CachedHashStringRef> &ComdatGroups,
+static Symbol *createBitcodeSymbol(const std::vector<bool> &KeptComdats,
const lto::InputFile::Symbol &ObjSym,
StringSaver &Saver, BitcodeFile *F) {
StringRef NameRef = Saver.save(ObjSym.getName());
@@ -706,22 +705,10 @@
uint8_t Visibility = mapVisibility(ObjSym.getVisibility());
bool CanOmitFromDynSym = ObjSym.canBeOmittedFromSymbolTable();
- StringRef C = check(ObjSym.getComdat());
- if (!C.empty()) {
- auto CH = CachedHashStringRef(C);
- bool Keep = KeptComdats.count(CH);
- if (!Keep) {
- StringRef N = Saver.save(C);
- CachedHashStringRef NH(N, CH.hash());
- if (ComdatGroups.insert(NH).second) {
- Keep = true;
- KeptComdats.insert(NH);
- }
- }
- if (!Keep)
- return Symtab<ELFT>::X->addUndefined(NameRef, Binding, Visibility, Type,
- CanOmitFromDynSym, F);
- }
+ int C = check(ObjSym.getComdatIndex());
+ if (C != -1 && !KeptComdats[C])
+ return Symtab<ELFT>::X->addUndefined(NameRef, Binding, Visibility, Type,
+ CanOmitFromDynSym, F);
if (Flags & BasicSymbolRef::SF_Undefined)
return Symtab<ELFT>::X->addUndefined(NameRef, Binding, Visibility, Type,
@@ -750,10 +737,16 @@
Obj = check(lto::InputFile::create(MemoryBufferRef(
MB.getBuffer(), Saver.save(ArchiveName + MB.getBufferIdentifier() +
utostr(OffsetInArchive)))));
- DenseSet<CachedHashStringRef> KeptComdats;
+
+ std::vector<bool> KeptComdats;
+ for (StringRef S : Obj->getComdatTable()) {
+ StringRef N = Saver.save(S);
+ KeptComdats.push_back(ComdatGroups.insert(CachedHashStringRef(N)).second);
+ }
+
for (const lto::InputFile::Symbol &ObjSym : Obj->symbols())
- Symbols.push_back(createBitcodeSymbol<ELFT>(KeptComdats, ComdatGroups,
- ObjSym, Saver, this));
+ Symbols.push_back(
+ createBitcodeSymbol<ELFT>(KeptComdats, ObjSym, Saver, this));
}
template <template <class> class T>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25698.75486.patch
Type: text/x-patch
Size: 2463 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161021/76299fd2/attachment.bin>
More information about the llvm-commits
mailing list