[lld] 40eb8a7 - [ELF] findAllByVersion: optimize a find('@') with hasVersionSuffix. NFC

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Thu May 25 21:23:28 PDT 2023


Author: Fangrui Song
Date: 2023-05-25T21:23:23-07:00
New Revision: 40eb8a78640ce88a883c154a9ddd6b7fa296c42b

URL: https://github.com/llvm/llvm-project/commit/40eb8a78640ce88a883c154a9ddd6b7fa296c42b
DIFF: https://github.com/llvm/llvm-project/commit/40eb8a78640ce88a883c154a9ddd6b7fa296c42b.diff

LOG: [ELF] findAllByVersion: optimize a find('@') with hasVersionSuffix. NFC

Added: 
    

Modified: 
    lld/ELF/SymbolTable.cpp

Removed: 
    


################################################################################
diff  --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index f09d0d7f90958..8ffc8ee7696b0 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -171,10 +171,11 @@ SmallVector<Symbol *, 0> SymbolTable::findAllByVersion(SymbolVersion ver,
                                                        bool includeNonDefault) {
   SmallVector<Symbol *, 0> res;
   SingleStringMatcher m(ver.name);
-  auto check = [&](StringRef name) {
-    size_t pos = name.find('@');
+  auto check = [&](const Symbol &sym) -> bool {
     if (!includeNonDefault)
-      return pos == StringRef::npos;
+      return !sym.hasVersionSuffix;
+    StringRef name = sym.getName();
+    size_t pos = name.find('@');
     return !(pos + 1 < name.size() && name[pos + 1] == '@');
   };
 
@@ -182,14 +183,13 @@ SmallVector<Symbol *, 0> SymbolTable::findAllByVersion(SymbolVersion ver,
     for (auto &p : getDemangledSyms())
       if (m.match(p.first()))
         for (Symbol *sym : p.second)
-          if (check(sym->getName()))
+          if (check(*sym))
             res.push_back(sym);
     return res;
   }
 
   for (Symbol *sym : symVector)
-    if (canBeVersioned(*sym) && check(sym->getName()) &&
-        m.match(sym->getName()))
+    if (canBeVersioned(*sym) && check(*sym) && m.match(sym->getName()))
       res.push_back(sym);
   return res;
 }


        


More information about the llvm-commits mailing list