[llvm-commits] [llvm] r152116 - /llvm/trunk/lib/VMCore/ConstantsContext.h
Jay Foad
jay.foad at gmail.com
Tue Mar 6 03:02:18 PST 2012
>> --- llvm/trunk/lib/VMCore/ConstantsContext.h (original)
>> +++ llvm/trunk/lib/VMCore/ConstantsContext.h Tue Mar 6 04:43:52 2012
>> @@ -16,6 +16,7 @@
>> #define LLVM_CONSTANTSCONTEXT_H
>>
>> #include "llvm/ADT/DenseMap.h"
>> +#include "llvm/ADT/Hashing.h"
>> #include "llvm/InlineAsm.h"
>> #include "llvm/Instructions.h"
>> #include "llvm/Operator.h"
>> @@ -656,48 +657,20 @@
>> return ConstantClassInfo::getTombstoneKey();
>> }
>> static unsigned getHashValue(const ConstantClass *CP) {
>> - // This is adapted from SuperFastHash by Paul Hsieh.
>> - unsigned Hash = TypeClassInfo::getHashValue(CP->getType());
>> - for (unsigned I = 0, E = CP->getNumOperands(); I< E; ++I) {
>> - unsigned Data = ConstantInfo::getHashValue(CP->getOperand(I));
>> - Hash += Data& 0xFFFF;
>> - unsigned Tmp = ((Data>> 16)<< 11) ^ Hash;
>> - Hash = (Hash<< 16) ^ Tmp;
>> - Hash += Hash>> 11;
>> - }
>> -
>> - // Force "avalanching" of final 127 bits.
>> - Hash ^= Hash<< 3;
>> - Hash += Hash>> 5;
>> - Hash ^= Hash<< 4;
>> - Hash += Hash>> 17;
>> - Hash ^= Hash<< 25;
>> - Hash += Hash>> 6;
>> - return Hash;
>> + hash_code code = hash_value(CP->getType());
>> + for (unsigned I = 0, E = CP->getNumOperands(); I< E; ++I)
>> + code = hash_combine(code, hash_value(CP->getOperand(I)));
>
> maybe this could/should be done with hash_combine_range?
As Meador explained when he posted the patch :-) the operands array is
an array of Uses, but we don't want to hash the whole of each Use,
just the Value* pointer.
Jay.
More information about the llvm-commits
mailing list