[llvm] [NFCI]Use DenseMap<StringRef, ValueType> for global resolution (PR #106193)

Mingming Liu via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 27 00:17:03 PDT 2024


https://github.com/minglotus-6 created https://github.com/llvm/llvm-project/pull/106193

* `StringMap<GlobalResolution>` creates a copy of the string when inserting entries.
* On the other hand, linker context owned string saver [keeps copies](https://github.com/llvm/llvm-project/blob/1cea5c2138bef3d8fec75508df6dbb858e6e3560/lld/ELF/InputFiles.cpp#L1748) of symbol names.
* Other than string key copy, map growth implementation are similar between DenseMap and StringMap.


>From a01e4c9bc1fb4788d3d0a566c2f91cac489a13e6 Mon Sep 17 00:00:00 2001
From: mingmingl <mingmingl at google.com>
Date: Tue, 27 Aug 2024 00:12:13 -0700
Subject: [PATCH] [NFCI]Use DenseMap<StringRef, ValueType> for global
 resolution

---
 llvm/include/llvm/LTO/LTO.h | 6 +++++-
 llvm/lib/LTO/LTO.cpp        | 3 ++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/LTO/LTO.h b/llvm/include/llvm/LTO/LTO.h
index 30eda34cd7ba54..79902db353443e 100644
--- a/llvm/include/llvm/LTO/LTO.h
+++ b/llvm/include/llvm/LTO/LTO.h
@@ -15,6 +15,9 @@
 #ifndef LLVM_LTO_LTO_H
 #define LLVM_LTO_LTO_H
 
+#include <memory>
+
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/MapVector.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/Bitcode/BitcodeReader.h"
@@ -408,7 +411,8 @@ class LTO {
   // Global mapping from mangled symbol names to resolutions.
   // Make this an optional to guard against accessing after it has been reset
   // (to reduce memory after we're done with it).
-  std::optional<StringMap<GlobalResolution>> GlobalResolutions;
+  std::unique_ptr<llvm::DenseMap<StringRef, GlobalResolution>>
+      GlobalResolutions;
 
   void addModuleToGlobalRes(ArrayRef<InputFile::Symbol> Syms,
                             ArrayRef<SymbolResolution> Res, unsigned Partition,
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp
index bb3c9f7acdb8e5..ba3336bdd31206 100644
--- a/llvm/lib/LTO/LTO.cpp
+++ b/llvm/lib/LTO/LTO.cpp
@@ -607,7 +607,8 @@ LTO::LTO(Config Conf, ThinBackend Backend,
     : Conf(std::move(Conf)),
       RegularLTO(ParallelCodeGenParallelismLevel, this->Conf),
       ThinLTO(std::move(Backend)),
-      GlobalResolutions(std::make_optional<StringMap<GlobalResolution>>()),
+      GlobalResolutions(
+          std::make_unique<DenseMap<StringRef, GlobalResolution>>()),
       LTOMode(LTOMode) {}
 
 // Requires a destructor for MapVector<BitcodeModule>.



More information about the llvm-commits mailing list