Skip to content

Commit c16eaa4

Browse files
authored
[ORC] Enable hashing of [NonOwning]SymbolStringPtr objects. (#162990)
This will be used by an upcoming patch to hash collections of SymbolStringPtrs.
1 parent 28b3f2f commit c16eaa4

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#define LLVM_EXECUTIONENGINE_ORC_SYMBOLSTRINGPOOL_H
1515

1616
#include "llvm/ADT/DenseMap.h"
17+
#include "llvm/ADT/Hashing.h"
1718
#include "llvm/ADT/StringMap.h"
1819
#include "llvm/Support/Compiler.h"
1920
#include <atomic>
@@ -71,6 +72,7 @@ class SymbolStringPool {
7172
/// from nullptr to enable comparison with these values.
7273
class SymbolStringPtrBase {
7374
friend class SymbolStringPool;
75+
friend class SymbolStringPoolEntryUnsafe;
7476
friend struct DenseMapInfo<SymbolStringPtr>;
7577
friend struct DenseMapInfo<NonOwningSymbolStringPtr>;
7678

@@ -204,7 +206,7 @@ class SymbolStringPoolEntryUnsafe {
204206
SymbolStringPoolEntryUnsafe(PoolEntry *E) : E(E) {}
205207

206208
/// Create an unsafe pool entry ref without changing the ref-count.
207-
static SymbolStringPoolEntryUnsafe from(const SymbolStringPtr &S) {
209+
static SymbolStringPoolEntryUnsafe from(const SymbolStringPtrBase &S) {
208210
return S.S;
209211
}
210212

@@ -318,6 +320,10 @@ SymbolStringPool::getRefCount(const SymbolStringPtrBase &S) const {
318320
LLVM_ABI raw_ostream &operator<<(raw_ostream &OS,
319321
const SymbolStringPtrBase &Sym);
320322

323+
inline hash_code hash_value(const orc::SymbolStringPtrBase &S) {
324+
return hash_value(orc::SymbolStringPoolEntryUnsafe::from(S).rawPtr());
325+
}
326+
321327
} // end namespace orc
322328

323329
template <>

llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,4 +180,14 @@ TEST_F(SymbolStringPoolTest, SymbolStringPoolEntryUnsafe) {
180180
EXPECT_EQ(getRefCount(A), 1U);
181181
}
182182

183+
TEST_F(SymbolStringPoolTest, Hashing) {
184+
auto A = SP.intern("a");
185+
auto B = NonOwningSymbolStringPtr(A);
186+
187+
hash_code AHash = hash_value(A);
188+
hash_code BHash = hash_value(B);
189+
190+
EXPECT_EQ(AHash, BHash);
191+
}
192+
183193
} // namespace

0 commit comments

Comments
 (0)