From c53843415ebba4d7c295bcd31bb325bfd08570a6 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Sun, 28 Jul 2024 10:14:21 -0700 Subject: [PATCH] [ADT,CodeGen] Remove stable_hash_combine_string FNV, used by stable_hash_combine_string is extremely slow. For string hashing with good avalanche effects, we prefer xxh3_64bits. StableHashing.h might still be useful as it provides a stable hash_combine while Hashing.h's might be non-deterministic (#96282). Pull Request: https://github.com/llvm/llvm-project/pull/100668 --- llvm/include/llvm/ADT/StableHashing.h | 12 ------------ llvm/lib/CodeGen/MachineStableHash.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/llvm/include/llvm/ADT/StableHashing.h b/llvm/include/llvm/ADT/StableHashing.h index 884b5752d9bb09..f675f828f702e5 100644 --- a/llvm/include/llvm/ADT/StableHashing.h +++ b/llvm/include/llvm/ADT/StableHashing.h @@ -95,18 +95,6 @@ inline stable_hash stable_hash_combine_array(const stable_hash *P, size_t C) { hashing::detail::stable_hash_append(Hash, P[I]); return Hash; } - -inline stable_hash stable_hash_combine_string(const StringRef &S) { - return stable_hash_combine_range(S.begin(), S.end()); -} - -inline stable_hash stable_hash_combine_string(const char *C) { - stable_hash Hash = hashing::detail::FNV_OFFSET_64; - while (*C) - hashing::detail::stable_hash_append(Hash, *(C++)); - return Hash; -} - } // namespace llvm #endif diff --git a/llvm/lib/CodeGen/MachineStableHash.cpp b/llvm/lib/CodeGen/MachineStableHash.cpp index 5abfbd5981fba8..d2e02a2d739c1b 100644 --- a/llvm/lib/CodeGen/MachineStableHash.cpp +++ b/llvm/lib/CodeGen/MachineStableHash.cpp @@ -33,6 +33,7 @@ #include "llvm/MC/MCSymbol.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/xxhash.h" #define DEBUG_TYPE "machine-stable-hash" @@ -100,8 +101,7 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) { case MachineOperand::MO_TargetIndex: { if (const char *Name = MO.getTargetIndexName()) return stable_hash_combine(MO.getType(), MO.getTargetFlags(), - stable_hash_combine_string(Name), - MO.getOffset()); + xxh3_64bits(Name), MO.getOffset()); StableHashBailingTargetIndexNoName++; return 0; } @@ -113,7 +113,7 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) { case MachineOperand::MO_ExternalSymbol: return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getOffset(), - stable_hash_combine_string(MO.getSymbolName())); + xxh3_64bits(MO.getSymbolName())); case MachineOperand::MO_RegisterMask: case MachineOperand::MO_RegisterLiveOut: { @@ -151,7 +151,7 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) { case MachineOperand::MO_MCSymbol: { auto SymbolName = MO.getMCSymbol()->getName(); return hash_combine(MO.getType(), MO.getTargetFlags(), - stable_hash_combine_string(SymbolName)); + xxh3_64bits(SymbolName)); } case MachineOperand::MO_CFIIndex: return stable_hash_combine(MO.getType(), MO.getTargetFlags(),