[llvm] [MC] Eliminate two symbol-related hash maps (PR #95464)

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 13 18:19:36 PDT 2024


MaskRay wrote:

How about making the following change then removing the `Entry` parameter from `createSymbol`?
```
diff --git i/llvm/lib/MC/MCContext.cpp w/llvm/lib/MC/MCContext.cpp
index 7ac44f41186b..535e6d0313d7 100644
--- i/llvm/lib/MC/MCContext.cpp
+++ w/llvm/lib/MC/MCContext.cpp
@@ -206,4 +206,9 @@ MCSymbol *MCContext::getOrCreateSymbol(const Twine &Name) {
   MCSymbolTableEntry &Entry = getSymbolTableEntry(NameRef);
-  if (!Entry.second.Symbol)
-    Entry.second.Symbol = createSymbol(&Entry, NameRef, false, false);
+  if (!Entry.second.Symbol) {
+    bool IsTemporary = false;
+    if (!SaveTempLabels)
+      IsTemporary = NameRef.starts_with(MAI->getPrivateGlobalPrefix());
+    Entry.second.Used = true;
+    Entry.second.Symbol = createSymbolImpl(&Entry, IsTemporary);
+  }

@@ -229,3 +234,3 @@ MCSymbol *MCContext::getOrCreateLSDASymbol(const Twine &FuncName) {
 MCSymbolTableEntry &MCContext::getSymbolTableEntry(StringRef Name) {
-  return *Symbols.insert(std::make_pair(Name, MCSymbolTableValue{})).first;
+  return *Symbols.try_emplace(Name, MCSymbolTableValue{}).first;
 }
```


https://github.com/llvm/llvm-project/pull/95464


More information about the llvm-commits mailing list