Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#define LLVM_EXECUTIONENGINE_ORC_SYMBOLSTRINGPOOL_H

#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/Support/Compiler.h"
#include <atomic>
Expand Down Expand Up @@ -71,6 +72,7 @@ class SymbolStringPool {
/// from nullptr to enable comparison with these values.
class SymbolStringPtrBase {
friend class SymbolStringPool;
friend class SymbolStringPoolEntryUnsafe;
friend struct DenseMapInfo<SymbolStringPtr>;
friend struct DenseMapInfo<NonOwningSymbolStringPtr>;

Expand Down Expand Up @@ -204,7 +206,7 @@ class SymbolStringPoolEntryUnsafe {
SymbolStringPoolEntryUnsafe(PoolEntry *E) : E(E) {}

/// Create an unsafe pool entry ref without changing the ref-count.
static SymbolStringPoolEntryUnsafe from(const SymbolStringPtr &S) {
static SymbolStringPoolEntryUnsafe from(const SymbolStringPtrBase &S) {
return S.S;
}

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

inline hash_code hash_value(const orc::SymbolStringPtrBase &S) {
return hash_value(orc::SymbolStringPoolEntryUnsafe::from(S).rawPtr());
}

} // end namespace orc

template <>
Expand Down
10 changes: 10 additions & 0 deletions llvm/unittests/ExecutionEngine/Orc/SymbolStringPoolTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,4 +180,14 @@ TEST_F(SymbolStringPoolTest, SymbolStringPoolEntryUnsafe) {
EXPECT_EQ(getRefCount(A), 1U);
}

TEST_F(SymbolStringPoolTest, Hashing) {
auto A = SP.intern("a");
auto B = NonOwningSymbolStringPtr(A);

hash_code AHash = hash_value(A);
hash_code BHash = hash_value(B);

EXPECT_EQ(AHash, BHash);
}

} // namespace