1#ifndef PROTEUS_HASHING_HPP
2#define PROTEUS_HASHING_HPP
7#include <llvm/ADT/ArrayRef.h>
9#if LLVM_VERSION_MAJOR == 18
10#include <llvm/ADT/StableHashing.h>
12#include <llvm/CodeGen/StableHashing.h>
24 inline HashT(
const stable_hash HashValue) { Value = HashValue; }
25 inline HashT(StringRef S) { S.getAsInteger(0, Value); }
26 inline stable_hash
getValue()
const {
return Value; }
27 inline std::string
toString()
const {
return std::to_string(Value); }
29 return Value == Other.Value;
33 return Value < Other.Value;
39inline HashT hashValue(StringRef &S) {
return stable_hash_combine_string(S); }
42 return stable_hash_combine_string(S);
46inline std::enable_if_t<std::is_scalar<T>::value,
HashT>
hashValue(
const T &V) {
47 return stable_hash_combine_string(
48 StringRef{
reinterpret_cast<const char *
>(&V),
sizeof(T)});
52 return stable_hash_combine_string(
53 StringRef{
reinterpret_cast<const char *
>(&RC.
Value),
sizeof(RC.
Value)});
61 for (
int I = 1, E = Arr.size(); I < E; ++I)
62 HashValue = stable_hash_combine(HashValue.
getValue(),
72template <
typename FirstT,
typename... RestTs>
73inline HashT hash(FirstT &&First, RestTs &&...Rest) {
78 [&HashValue, &Rest]() {
79 HashValue = stable_hash_combine(HashValue.
getValue(),
#define TIMESCOPE(x)
Definition TimeTracing.hpp:35
Definition Hashing.hpp:19
std::string toString() const
Definition Hashing.hpp:27
bool operator==(const HashT &Other) const
Definition Hashing.hpp:28
stable_hash getValue() const
Definition Hashing.hpp:26
HashT(StringRef S)
Definition Hashing.hpp:25
bool operator<(const HashT &Other) const
Definition Hashing.hpp:32
HashT(const stable_hash HashValue)
Definition Hashing.hpp:24
Definition JitEngine.cpp:20
HashT hash(FirstT &&First, RestTs &&...Rest)
Definition Hashing.hpp:73
HashT hashValue(HashT &H)
Definition Hashing.hpp:37
HashT hashArrayRefElement(const RuntimeConstant &RC)
Definition Hashing.hpp:51
HashT hashCombine(HashT A, HashT B)
Definition Hashing.hpp:68
Definition Hashing.hpp:94
Definition CompilerInterfaceTypes.h:30
RuntimeConstantType Value
Definition CompilerInterfaceTypes.h:43
std::size_t operator()(const proteus::HashT &Key) const
Definition Hashing.hpp:96