[PATCH] D43966: [WebAssembly] Simplify COMDAT handling.
Rui Ueyama via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 1 15:34:14 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL326509: [WebAssembly] Simplify COMDAT handling. (authored by ruiu, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D43966?vs=136593&id=136625#toc
Repository:
rL LLVM
https://reviews.llvm.org/D43966
Files:
lld/trunk/wasm/InputFiles.cpp
lld/trunk/wasm/SymbolTable.cpp
lld/trunk/wasm/SymbolTable.h
Index: lld/trunk/wasm/InputFiles.cpp
===================================================================
--- lld/trunk/wasm/InputFiles.cpp
+++ lld/trunk/wasm/InputFiles.cpp
@@ -117,9 +117,6 @@
TypeMap.resize(getWasmObj()->types().size());
TypeIsUsed.resize(getWasmObj()->types().size(), false);
- for (StringRef Name : WasmObj->comdats())
- Symtab->addComdat(Name, this);
-
// Populate `Segments`.
for (const WasmSegment &S : WasmObj->dataSegments()) {
InputSegment *Seg = make<InputSegment>(S, this);
@@ -156,8 +153,10 @@
}
bool ObjFile::isExcludedByComdat(InputChunk *Chunk) const {
- StringRef Comdat = Chunk->getComdat();
- return !Comdat.empty() && Symtab->findComdat(Comdat) != this;
+ StringRef S = Chunk->getComdat();
+ if (S.empty())
+ return false;
+ return !Symtab->addComdat(S, this);
}
FunctionSymbol *ObjFile::getFunctionSymbol(uint32_t Index) const {
Index: lld/trunk/wasm/SymbolTable.h
===================================================================
--- lld/trunk/wasm/SymbolTable.h
+++ lld/trunk/wasm/SymbolTable.h
@@ -46,7 +46,6 @@
ArrayRef<Symbol *> getSymbols() const { return SymVector; }
Symbol *find(StringRef Name);
- ObjFile *findComdat(StringRef Name) const;
Symbol *addDefinedFunction(StringRef Name, uint32_t Flags, InputFile *File,
InputFunction *Function);
@@ -63,7 +62,8 @@
const WasmGlobalType *Type);
void addLazy(ArchiveFile *F, const Archive::Symbol *Sym);
- bool addComdat(StringRef Name, ObjFile *);
+
+ bool addComdat(StringRef Name, const ObjFile *File);
DefinedData *addSyntheticDataSymbol(StringRef Name, uint32_t Flags);
DefinedGlobal *addSyntheticGlobal(StringRef Name, uint32_t Flags,
@@ -75,9 +75,10 @@
private:
std::pair<Symbol *, bool> insert(StringRef Name);
- llvm::DenseMap<llvm::CachedHashStringRef, ObjFile *> ComdatMap;
llvm::DenseMap<llvm::CachedHashStringRef, Symbol *> SymMap;
std::vector<Symbol *> SymVector;
+
+ llvm::DenseMap<StringRef, const ObjFile *> Comdats;
};
extern SymbolTable *Symtab;
Index: lld/trunk/wasm/SymbolTable.cpp
===================================================================
--- lld/trunk/wasm/SymbolTable.cpp
+++ lld/trunk/wasm/SymbolTable.cpp
@@ -301,18 +301,6 @@
}
}
-bool SymbolTable::addComdat(StringRef Name, ObjFile *F) {
- DEBUG(dbgs() << "addComdat: " << Name << "\n");
- ObjFile *&File = ComdatMap[CachedHashStringRef(Name)];
- if (File) {
- DEBUG(dbgs() << "COMDAT already defined\n");
- return false;
- }
- File = F;
- return true;
-}
-
-ObjFile *SymbolTable::findComdat(StringRef Name) const {
- auto It = ComdatMap.find(CachedHashStringRef(Name));
- return It == ComdatMap.end() ? nullptr : It->second;
+bool SymbolTable::addComdat(StringRef Name, const ObjFile *File) {
+ return Comdats.insert({Name, File}).first->second == File;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D43966.136625.patch
Type: text/x-patch
Size: 2904 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180301/8c402655/attachment.bin>
More information about the llvm-commits
mailing list