Skip to content

Commit

Permalink
[WebAssembly] Simplify COMDAT handling.
Browse files Browse the repository at this point in the history
Differential Revision: https://reviews.llvm.org/D43966

llvm-svn: 326509
  • Loading branch information
rui314 committed Mar 1, 2018
1 parent e78dfe5 commit dcf6234
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 22 deletions.
9 changes: 4 additions & 5 deletions lld/wasm/InputFiles.cpp
Expand Up @@ -117,9 +117,6 @@ void ObjFile::parse() {
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);
Expand Down Expand Up @@ -156,8 +153,10 @@ void ObjFile::parse() {
}

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 {
Expand Down
16 changes: 2 additions & 14 deletions lld/wasm/SymbolTable.cpp
Expand Up @@ -301,18 +301,6 @@ void SymbolTable::addLazy(ArchiveFile *File, const Archive::Symbol *Sym) {
}
}

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;
}
7 changes: 4 additions & 3 deletions lld/wasm/SymbolTable.h
Expand Up @@ -46,7 +46,6 @@ class SymbolTable {

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);
Expand All @@ -63,7 +62,8 @@ class SymbolTable {
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,
Expand All @@ -75,9 +75,10 @@ class SymbolTable {
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;
Expand Down

0 comments on commit dcf6234

Please sign in to comment.