[llvm] [ADT] Add hash_combine_range that takes a range (NFC) (PR #136459)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 19 15:09:15 PDT 2025
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/136459
The new function will allow us to replace:
hash_combine_range(Ops.begin(), Ops.end())
with:
hash_combine_range(Ops)
>From d85c58db451402a71587ab0f22ec575fdb4797e1 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Sat, 19 Apr 2025 12:44:05 -0700
Subject: [PATCH] [ADT] Add hash_combine_range that takes a range (NFC)
The new function will allow us to replace:
hash_combine_range(Ops.begin(), Ops.end())
with:
hash_combine_range(Ops)
---
llvm/include/llvm/ADT/Hashing.h | 5 +++++
llvm/unittests/ADT/HashingTest.cpp | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/llvm/include/llvm/ADT/Hashing.h b/llvm/include/llvm/ADT/Hashing.h
index 17dcf31c616aa..9b8643b7765cf 100644
--- a/llvm/include/llvm/ADT/Hashing.h
+++ b/llvm/include/llvm/ADT/Hashing.h
@@ -44,6 +44,7 @@
#ifndef LLVM_ADT_HASHING_H
#define LLVM_ADT_HASHING_H
+#include "llvm/ADT/ADL.h"
#include "llvm/Config/abi-breaking.h"
#include "llvm/Support/DataTypes.h"
#include "llvm/Support/ErrorHandling.h"
@@ -469,6 +470,10 @@ hash_code hash_combine_range(InputIteratorT first, InputIteratorT last) {
return ::llvm::hashing::detail::hash_combine_range_impl(first, last);
}
+// A wrapper for hash_combine_range above.
+template <typename RangeT> hash_code hash_combine_range(RangeT &&R) {
+ return hash_combine_range(adl_begin(R), adl_end(R));
+}
// Implementation details for hash_combine.
namespace hashing {
diff --git a/llvm/unittests/ADT/HashingTest.cpp b/llvm/unittests/ADT/HashingTest.cpp
index c28356e229e66..e116ee934a0a4 100644
--- a/llvm/unittests/ADT/HashingTest.cpp
+++ b/llvm/unittests/ADT/HashingTest.cpp
@@ -166,15 +166,19 @@ TEST(HashingTest, HashCombineRangeBasicTest) {
hash_code arr1_hash = hash_combine_range(begin(arr1), end(arr1));
EXPECT_NE(dummy_hash, arr1_hash);
EXPECT_EQ(arr1_hash, hash_combine_range(begin(arr1), end(arr1)));
+ EXPECT_EQ(arr1_hash, hash_combine_range(arr1));
const std::vector<int> vec(begin(arr1), end(arr1));
EXPECT_EQ(arr1_hash, hash_combine_range(vec.begin(), vec.end()));
+ EXPECT_EQ(arr1_hash, hash_combine_range(vec));
const std::list<int> list(begin(arr1), end(arr1));
EXPECT_EQ(arr1_hash, hash_combine_range(list.begin(), list.end()));
+ EXPECT_EQ(arr1_hash, hash_combine_range(list));
const std::deque<int> deque(begin(arr1), end(arr1));
EXPECT_EQ(arr1_hash, hash_combine_range(deque.begin(), deque.end()));
+ EXPECT_EQ(arr1_hash, hash_combine_range(deque));
const int arr2[] = { 3, 2, 1 };
hash_code arr2_hash = hash_combine_range(begin(arr2), end(arr2));
More information about the llvm-commits
mailing list