[llvm] 6df32b8 - [ORC] Enable DenseMap<SymbolStringPtr, T>::find_as(NonOwningSymbolStringPtr).

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 31 18:11:27 PST 2023


Author: Lang Hames
Date: 2023-01-31T18:11:21-08:00
New Revision: 6df32b8db1f0b2f1c91f3dbb62a0ced07c314aa9

URL: https://github.com/llvm/llvm-project/commit/6df32b8db1f0b2f1c91f3dbb62a0ced07c314aa9
DIFF: https://github.com/llvm/llvm-project/commit/6df32b8db1f0b2f1c91f3dbb62a0ced07c314aa9.diff

LOG: [ORC] Enable DenseMap<SymbolStringPtr, T>::find_as(NonOwningSymbolStringPtr).

For maps of SymbolStringPtrs to values, enables lookup using
NonOwningSymbolStringPtr keys.

Added: 
    

Modified: 
    llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
    llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h b/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
index d488848b278e..497e29da98bd 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
@@ -68,6 +68,8 @@ class SymbolStringPool {
 /// from nullptr to enable comparison with these values.
 class SymbolStringPtrBase {
   friend class SymbolStringPool;
+  friend struct DenseMapInfo<SymbolStringPtr>;
+  friend struct DenseMapInfo<NonOwningSymbolStringPtr>;
 
 public:
   SymbolStringPtrBase() = default;
@@ -279,12 +281,12 @@ struct DenseMapInfo<orc::SymbolStringPtr> {
     return orc::SymbolStringPtr::getTombstoneVal();
   }
 
-  static unsigned getHashValue(const orc::SymbolStringPtr &V) {
+  static unsigned getHashValue(const orc::SymbolStringPtrBase &V) {
     return DenseMapInfo<orc::SymbolStringPtr::PoolEntryPtr>::getHashValue(V.S);
   }
 
-  static bool isEqual(const orc::SymbolStringPtr &LHS,
-                      const orc::SymbolStringPtr &RHS) {
+  static bool isEqual(const orc::SymbolStringPtrBase &LHS,
+                      const orc::SymbolStringPtrBase &RHS) {
     return LHS.S == RHS.S;
   }
 };
@@ -299,13 +301,13 @@ template <> struct DenseMapInfo<orc::NonOwningSymbolStringPtr> {
     return orc::NonOwningSymbolStringPtr::getTombstoneVal();
   }
 
-  static unsigned getHashValue(const orc::NonOwningSymbolStringPtr &V) {
+  static unsigned getHashValue(const orc::SymbolStringPtrBase &V) {
     return DenseMapInfo<
         orc::NonOwningSymbolStringPtr::PoolEntryPtr>::getHashValue(V.S);
   }
 
-  static bool isEqual(const orc::NonOwningSymbolStringPtr &LHS,
-                      const orc::NonOwningSymbolStringPtr &RHS) {
+  static bool isEqual(const orc::SymbolStringPtrBase &LHS,
+                      const orc::SymbolStringPtrBase &RHS) {
     return LHS.S == RHS.S;
   }
 };

diff  --git a/llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp b/llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp
index 4aea0f4cca79..fc864ab1131b 100644
--- a/llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp
@@ -93,6 +93,11 @@ TEST_F(SymbolStringPoolTest, NonOwningPointerBasics) {
 
   SymbolStringPtr S(ANP1); // Construct SymbolStringPtr from non-owning.
   EXPECT_EQ(S, A);
+
+  DenseMap<SymbolStringPtr, int> M;
+  M[A] = 42;
+  EXPECT_EQ(M.find_as(ANP1)->second, 42);
+  EXPECT_EQ(M.find_as(BNP), M.end());
 }
 
 TEST_F(SymbolStringPoolTest, NonOwningPointerRefCounts) {


        


More information about the llvm-commits mailing list