ilya-biryukov wrote:

I got to the bottom of it. The problem is that our hash function for 64 bit 
ints is [not very 
good](https://github.com/llvm/llvm-project/blob/d5297b72aa32ad3a69563a1fcc61294282f0b379/llvm/include/llvm/ADT/DenseMapInfo.h#L140).

It will have a lot of collision when lower 32 bits are the same and the higher 
32 bits of a 64 bit value change. Coincidentally, this is quite common in this 
case because collisions in low bits of `GlobalDeclID` are very much expected.

I tried replacing it with a variant of MurmurHash I found randomly on the 
internet and performance went back to normal.
@ChuanqiXu9 I think changing the default hash function for ints might have some 
far-reaching effects for LLVM code using `DenseSet` and would warrant a bigger 
discussion on what that function should be (I am not an expert in hash 
functions myself).
I will be happy to start that discussion on Monday, but feel free to jump into 
it earlier, if you have time.

In the meantime, I would again propose to revert the change until we can fix 
the hash function.
(Alternatively, we can change the hash function for `GlobalDeclID` specifically 
to workaround more locally, but we surely want a better hash function for 
uint64 in general)

https://github.com/llvm/llvm-project/pull/92083
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to