diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-07-10 11:02:33 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2014-07-10 11:02:33 +0000 |
commit | 53aa313f962535087170613bdd18766c54918e90 (patch) | |
tree | c0200988231a6ae4964e4aa03491b748c8408367 /lib/msan/msan_chained_origin_depot.cc | |
parent | 0e6f82adb205c0b69f0949d4225e66956c5aad10 (diff) |
[msan] Switch chained origins hash to murmur2.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@212704 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan/msan_chained_origin_depot.cc')
-rw-r--r-- | lib/msan/msan_chained_origin_depot.cc | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/msan/msan_chained_origin_depot.cc b/lib/msan/msan_chained_origin_depot.cc index 95f0a804f..faf04614a 100644 --- a/lib/msan/msan_chained_origin_depot.cc +++ b/lib/msan/msan_chained_origin_depot.cc @@ -19,7 +19,30 @@ namespace __msan { struct ChainedOriginDepotDesc { u32 here_id; u32 prev_id; - u32 hash() const { return (here_id * 0x1f1f1f1f) ^ prev_id; } + u32 hash() const { + const u32 m = 0x5bd1e995; + const u32 seed = 0x9747b28c; + const u32 r = 24; + u32 h = seed; + u32 k = here_id; + k *= m; + k ^= k >> r; + k *= m; + h *= m; + h ^= k; + + k = prev_id; + k *= m; + k ^= k >> r; + k *= m; + h *= m; + h ^= k; + + h ^= h >> 13; + h *= m; + h ^= h >> 15; + return h; + } bool is_valid() { return true; } }; |