aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2010-03-03 23:37:30 +0000
committerEvan Cheng <evan.cheng@apple.com>2010-03-03 23:37:30 +0000
commit67eaa08f2b71aa8aec8cdf4c7d970db4cad58ada (patch)
treef013fec298efc07ca6744db5d39daeb001722df8 /include
parent05bdcbb1ae48d1d1209173d137d11c35f46abff3 (diff)
downloadexternal_llvm-67eaa08f2b71aa8aec8cdf4c7d970db4cad58ada.zip
external_llvm-67eaa08f2b71aa8aec8cdf4c7d970db4cad58ada.tar.gz
external_llvm-67eaa08f2b71aa8aec8cdf4c7d970db4cad58ada.tar.bz2
Move MachineInstrExpressionTrait::getHashValue() out of line so it can skip over only virtual register defs. This matches what isEqual() is doing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97680 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/CodeGen/MachineInstr.h43
1 files changed, 1 insertions, 42 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h
index 85ad26e..d84f882 100644
--- a/include/llvm/CodeGen/MachineInstr.h
+++ b/include/llvm/CodeGen/MachineInstr.h
@@ -432,48 +432,7 @@ struct MachineInstrExpressionTrait : DenseMapInfo<MachineInstr*> {
return reinterpret_cast<MachineInstr*>(-1);
}
- static unsigned getHashValue(const MachineInstr* const &MI) {
- unsigned Hash = MI->getOpcode() * 37;
- for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
- const MachineOperand &MO = MI->getOperand(i);
- uint64_t Key = (uint64_t)MO.getType() << 32;
- switch (MO.getType()) {
- default: break;
- case MachineOperand::MO_Register:
- if (MO.isDef())
- continue; // Skip defs.
- Key |= MO.getReg();
- break;
- case MachineOperand::MO_Immediate:
- Key |= MO.getImm();
- break;
- case MachineOperand::MO_FrameIndex:
- case MachineOperand::MO_ConstantPoolIndex:
- case MachineOperand::MO_JumpTableIndex:
- Key |= MO.getIndex();
- break;
- case MachineOperand::MO_MachineBasicBlock:
- Key |= DenseMapInfo<void*>::getHashValue(MO.getMBB());
- break;
- case MachineOperand::MO_GlobalAddress:
- Key |= DenseMapInfo<void*>::getHashValue(MO.getGlobal());
- break;
- case MachineOperand::MO_BlockAddress:
- Key |= DenseMapInfo<void*>::getHashValue(MO.getBlockAddress());
- break;
- }
- Key += ~(Key << 32);
- Key ^= (Key >> 22);
- Key += ~(Key << 13);
- Key ^= (Key >> 8);
- Key += (Key << 3);
- Key ^= (Key >> 15);
- Key += ~(Key << 27);
- Key ^= (Key >> 31);
- Hash = (unsigned)Key + Hash * 37;
- }
- return Hash;
- }
+ static unsigned getHashValue(const MachineInstr* const &MI);
static bool isEqual(const MachineInstr* const &LHS,
const MachineInstr* const &RHS) {