mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-03 01:12:59 +00:00
stength reduce my previous patch a bit. The only instructions
that are allowed to have metadata operands are intrinsic calls, and the only ones that take metadata currently return void. Just reject all void instructions, which should not be value numbered anyway. To future proof things, add an assert to the getHashValue impl for calls to check that metadata operands aren't present. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122759 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a12ba39a1d
commit
10b883b13f
@ -145,14 +145,13 @@ namespace {
|
||||
}
|
||||
|
||||
static bool canHandle(Instruction *Inst) {
|
||||
// Don't value number anything that returns void.
|
||||
if (Inst->getType()->isVoidTy())
|
||||
return false;
|
||||
|
||||
CallInst *CI = dyn_cast<CallInst>(Inst);
|
||||
if (CI == 0 || !CI->onlyReadsMemory())
|
||||
return false;
|
||||
|
||||
// Check that there are no metadata operands.
|
||||
for (unsigned i = 0, e = CI->getNumOperands(); i != e; ++i)
|
||||
if (CI->getOperand(i)->getType()->isMetadataTy())
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@ -179,8 +178,12 @@ unsigned DenseMapInfo<CallValue>::getHashValue(CallValue Val) {
|
||||
Instruction *Inst = Val.Inst;
|
||||
// Hash in all of the operands as pointers.
|
||||
unsigned Res = 0;
|
||||
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() &&
|
||||
"Cannot value number calls with metadata operands");
|
||||
Res ^= getHash(Inst->getOperand(i)) << i;
|
||||
}
|
||||
|
||||
// Mix in the opcode.
|
||||
return (Res << 1) ^ Inst->getOpcode();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user