[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