1#ifndef PROTEUS_HASHING_H
2#define PROTEUS_HASHING_H
8#include <llvm/ADT/ArrayRef.h>
9#if LLVM_VERSION_MAJOR >= 18
10#include <llvm/ADT/StableHashing.h>
12#include <llvm/CodeGen/StableHashing.h>
26 inline HashT(
const stable_hash HashValue) { Value = HashValue; }
27 inline HashT(
const StringRef &S) { S.getAsInteger(0, Value); }
28 inline stable_hash
getValue()
const {
return Value; }
29 inline std::string
toString()
const {
return std::to_string(Value); }
33#if PROTEUS_ENABLE_CUDA
40 return Value == Other.Value;
44 return Value < Other.Value;
52#if LLVM_VERSION_MAJOR >= 20
53 ArrayRef<uint8_t> Bytes(
reinterpret_cast<const uint8_t *
>(S.data()),
55 return xxh3_64bits(Bytes);
57 return stable_hash_combine_string(S);
64inline std::enable_if_t<std::is_scalar<T>::value,
HashT>
hashValue(
const T &V) {
65 return hashValue(StringRef{
reinterpret_cast<const char *
>(&V),
sizeof(T)});
78 StringRef{
reinterpret_cast<const char *
>(RC.
ArrInfo.
Blob.get()),
90 StringRef{
reinterpret_cast<const char *
>(RC.
ObjInfo.
Blob.get()),
100 return hashRuntimeConstantArray<bool>(RC);
102 return hashRuntimeConstantArray<int8_t>(RC);
104 return hashRuntimeConstantArray<int32_t>(RC);
106 return hashRuntimeConstantArray<int64_t>(RC);
108 return hashRuntimeConstantArray<float>(RC);
110 return hashRuntimeConstantArray<double>(RC);
119 StringRef{
reinterpret_cast<const char *
>(&RC.
Value),
sizeof(RC.
Value)});
130 for (
int I = 1, E = Arr.size(); I < E; ++I)
131 HashValue = stable_hash_combine(HashValue.
getValue(),
141template <
typename FirstT,
typename... RestTs>
#define TIMESCOPE(x)
Definition TimeTracing.h:59
std::string toString() const
Definition Hashing.h:29
bool operator==(const HashT &Other) const
Definition Hashing.h:39
stable_hash getValue() const
Definition Hashing.h:28
bool operator<(const HashT &Other) const
Definition Hashing.h:43
HashT(const stable_hash HashValue)
Definition Hashing.h:26
HashT(const StringRef &S)
Definition Hashing.h:27
std::string toMangledSuffix() const
Definition Hashing.h:32
Definition CompiledLibrary.h:7
Definition MemoryCache.h:26
HashT hashValue(const HashT &H)
Definition Hashing.h:48
@ ARRAY
Definition CompilerInterfaceTypes.h:33
@ VECTOR
Definition CompilerInterfaceTypes.h:32
@ INT32
Definition CompilerInterfaceTypes.h:25
@ INT64
Definition CompilerInterfaceTypes.h:26
@ FLOAT
Definition CompilerInterfaceTypes.h:27
@ STATIC_ARRAY
Definition CompilerInterfaceTypes.h:31
@ INT8
Definition CompilerInterfaceTypes.h:24
@ BOOL
Definition CompilerInterfaceTypes.h:23
@ OBJECT
Definition CompilerInterfaceTypes.h:34
@ DOUBLE
Definition CompilerInterfaceTypes.h:28
HashT hash(FirstT &&First, RestTs &&...Rest)
Definition Hashing.h:142
void reportFatalError(const llvm::Twine &Reason, const char *FILE, unsigned Line)
Definition Error.cpp:14
HashT hashArrayRefElement(const RuntimeConstant &RC)
Definition Hashing.h:94
HashT hashCombine(HashT A, HashT B)
Definition Hashing.h:137
std::string toString(CodegenOption Option)
Definition Config.h:28
HashT hashRuntimeConstantObject(const RuntimeConstant &RC)
Definition Hashing.h:82
bool isScalarRuntimeConstantType(RuntimeConstantType RCType)
Definition RuntimeConstantTypeHelpers.h:148
HashT hashRuntimeConstantArray(const RuntimeConstant &RC)
Definition Hashing.h:69
int32_t NumElts
Definition CompilerInterfaceTypes.h:42
RuntimeConstantType EltType
Definition CompilerInterfaceTypes.h:43
std::shared_ptr< unsigned char[]> Blob
Definition CompilerInterfaceTypes.h:44
std::shared_ptr< unsigned char[]> Blob
Definition CompilerInterfaceTypes.h:53
int32_t Size
Definition CompilerInterfaceTypes.h:51
Definition CompilerInterfaceTypes.h:72
ArrayInfo ArrInfo
Definition CompilerInterfaceTypes.h:78
RuntimeConstantValue Value
Definition CompilerInterfaceTypes.h:73
RuntimeConstantType Type
Definition CompilerInterfaceTypes.h:74
ObjectInfo ObjInfo
Definition CompilerInterfaceTypes.h:79
std::size_t operator()(const proteus::HashT &Key) const
Definition Hashing.h:160