Fix a couple hash functions so that they do not depend on undefined shifts. Based on patch by Ahmed Charles.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141820 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2011-10-12 22:00:26 +00:00
parent 81b2928d80
commit 18ead6b587

View File

@ -92,7 +92,7 @@ unsigned DenseMapInfo<SimpleValue>::getHashValue(SimpleValue Val) {
// Hash in all of the operands as pointers. // Hash in all of the operands as pointers.
unsigned Res = 0; unsigned Res = 0;
for (unsigned i = 0, e = Inst->getNumOperands(); i != e; ++i) for (unsigned i = 0, e = Inst->getNumOperands(); i != e; ++i)
Res ^= getHash(Inst->getOperand(i)) << i; Res ^= getHash(Inst->getOperand(i)) << (i & 0xF);
if (CastInst *CI = dyn_cast<CastInst>(Inst)) if (CastInst *CI = dyn_cast<CastInst>(Inst))
Res ^= getHash(CI->getType()); Res ^= getHash(CI->getType());
@ -185,7 +185,7 @@ unsigned DenseMapInfo<CallValue>::getHashValue(CallValue Val) {
for (unsigned i = 0, e = Inst->getNumOperands(); i != e; ++i) { for (unsigned i = 0, e = Inst->getNumOperands(); i != e; ++i) {
assert(!Inst->getOperand(i)->getType()->isMetadataTy() && assert(!Inst->getOperand(i)->getType()->isMetadataTy() &&
"Cannot value number calls with metadata operands"); "Cannot value number calls with metadata operands");
Res ^= getHash(Inst->getOperand(i)) << i; Res ^= getHash(Inst->getOperand(i)) << (i & 0xF);
} }
// Mix in the opcode. // Mix in the opcode.