summaryrefslogtreecommitdiff
path: root/lib/msan/msan_chained_origin_depot.cc
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-07-10 11:02:33 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2014-07-10 11:02:33 +0000
commit53aa313f962535087170613bdd18766c54918e90 (patch)
treec0200988231a6ae4964e4aa03491b748c8408367 /lib/msan/msan_chained_origin_depot.cc
parent0e6f82adb205c0b69f0949d4225e66956c5aad10 (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.cc25
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; }
};