Merge pull request #4831 from mikesinouye/hashlib

Approximately double the max hash table size
This commit is contained in:
Martin Povišer 2025-01-03 10:32:56 +01:00 committed by GitHub
commit 45e31f06b4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 4 additions and 4 deletions

View File

@ -324,10 +324,10 @@ template<typename T> struct hash_ops<std::optional<T>> {
}
};
inline int hashtable_size(int min_size)
inline unsigned int hashtable_size(unsigned int min_size)
{
// Primes as generated by https://oeis.org/A175953
static std::vector<int> zero_and_some_primes = {
static std::vector<unsigned int> zero_and_some_primes = {
0, 23, 29, 37, 47, 59, 79, 101, 127, 163, 211, 269, 337, 431, 541, 677,
853, 1069, 1361, 1709, 2137, 2677, 3347, 4201, 5261, 6577, 8231, 10289,
12889, 16127, 20161, 25219, 31531, 39419, 49277, 61603, 77017, 96281,
@ -337,13 +337,13 @@ inline int hashtable_size(int min_size)
25499291, 31874149, 39842687, 49803361, 62254207, 77817767, 97272239,
121590311, 151987889, 189984863, 237481091, 296851369, 371064217,
463830313, 579787991, 724735009, 905918777, 1132398479, 1415498113,
1769372713
1769372713, 2211715897, 2764644887, 3455806139
};
for (auto p : zero_and_some_primes)
if (p >= min_size) return p;
if (sizeof(int) == 4)
if (sizeof(unsigned int) == 4)
throw std::length_error("hash table exceeded maximum size.\nDesign is likely too large for yosys to handle, if possible try not to flatten the design.");
for (auto p : zero_and_some_primes)