[PATCH] D156005: Use `getHashValue` in `SetVector::insert` and `SetVector::contains`
Evan Wilde via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 22 14:56:52 PDT 2023
etcwilde updated this revision to Diff 543231.
etcwilde added a comment.
Updating to use the `DenseMapInfo` implementation of `isEqual` instead of the hash value to ensure we're using the same semantics that DenseMap/DenseSet use to determine equality.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156005/new/
https://reviews.llvm.org/D156005
Files:
llvm/include/llvm/ADT/SetVector.h
Index: llvm/include/llvm/ADT/SetVector.h
===================================================================
--- llvm/include/llvm/ADT/SetVector.h
+++ llvm/include/llvm/ADT/SetVector.h
@@ -56,7 +56,7 @@
typename Set = DenseSet<T>, unsigned N = 0>
class SetVector {
// Much like in SmallPtrSet, this value should not be too high to prevent
- // excessively long linear scans from occuring.
+ // excessively long linear scans from occurring.
static_assert(N <= 32, "Small size should be less than or equal to 32!");
public:
@@ -162,7 +162,10 @@
bool insert(const value_type &X) {
if constexpr (canBeSmall())
if (isSmall()) {
- if (llvm::find(vector_, X) == vector_.end()) {
+ auto comparator = [&X](const value_type &element) -> bool {
+ return llvm::DenseMapInfo<value_type>::isEqual(X, element);
+ };
+ if (llvm::find_if(vector_, comparator) == vector_.end()) {
vector_.push_back(X);
if (vector_.size() > N)
makeBig();
@@ -253,8 +256,12 @@
/// Check if the SetVector contains the given key.
bool contains(const key_type &key) const {
if constexpr (canBeSmall())
- if (isSmall())
- return is_contained(vector_, key);
+ if (isSmall()) {
+ auto comparator = [&key](const value_type &element) -> bool {
+ return llvm::DenseMapInfo<value_type>::isEqual(key, element);
+ };
+ return llvm::find_if(vector_, comparator) != vector_.end();
+ }
return set_.find(key) != set_.end();
}
@@ -262,11 +269,7 @@
/// Count the number of elements of a given key in the SetVector.
/// \returns 0 if the element is not in the SetVector, 1 if it is.
size_type count(const key_type &key) const {
- if constexpr (canBeSmall())
- if (isSmall())
- return is_contained(vector_, key);
-
- return set_.count(key);
+ return contains(key);
}
/// Completely clear the SetVector
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156005.543231.patch
Type: text/x-patch
Size: 1966 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230722/a5acc88e/attachment.bin>
More information about the llvm-commits
mailing list