[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