Skip to content

Commit c9b6339

Browse files
authored
[NFC] Use stable_hash_combine instead of hash_combine (#105619)
I found the current stable hash is not deterministic across multiple runs on a specific platform. This is because it uses `hash_combine` instead of `stable_hash_combine`.
1 parent 2617023 commit c9b6339

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

llvm/lib/CodeGen/MachineStableHash.cpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {
6363
case MachineOperand::MO_Register:
6464
if (MO.getReg().isVirtual()) {
6565
const MachineRegisterInfo &MRI = MO.getParent()->getMF()->getRegInfo();
66-
SmallVector<unsigned> DefOpcodes;
66+
SmallVector<stable_hash> DefOpcodes;
6767
for (auto &Def : MRI.def_instructions(MO.getReg()))
6868
DefOpcodes.push_back(Def.getOpcode());
69-
return hash_combine_range(DefOpcodes.begin(), DefOpcodes.end());
69+
return stable_hash_combine_range(DefOpcodes.begin(), DefOpcodes.end());
7070
}
7171

7272
// Register operands don't have target flags.
@@ -80,7 +80,7 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {
8080
: MO.getFPImm()->getValueAPF().bitcastToAPInt();
8181
auto ValHash =
8282
stable_hash_combine_array(Val.getRawData(), Val.getNumWords());
83-
return hash_combine(MO.getType(), MO.getTargetFlags(), ValHash);
83+
return stable_hash_combine(MO.getType(), MO.getTargetFlags(), ValHash);
8484
}
8585

8686
case MachineOperand::MO_MachineBasicBlock:
@@ -112,8 +112,8 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {
112112
MO.getIndex());
113113

114114
case MachineOperand::MO_ExternalSymbol:
115-
return hash_combine(MO.getType(), MO.getTargetFlags(), MO.getOffset(),
116-
xxh3_64bits(MO.getSymbolName()));
115+
return stable_hash_combine(MO.getType(), MO.getTargetFlags(),
116+
MO.getOffset(), xxh3_64bits(MO.getSymbolName()));
117117

118118
case MachineOperand::MO_RegisterMask:
119119
case MachineOperand::MO_RegisterLiveOut: {
@@ -126,15 +126,16 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {
126126
const uint32_t *RegMask = MO.getRegMask();
127127
std::vector<llvm::stable_hash> RegMaskHashes(RegMask,
128128
RegMask + RegMaskSize);
129-
return hash_combine(MO.getType(), MO.getTargetFlags(),
130-
stable_hash_combine_array(RegMaskHashes.data(),
131-
RegMaskHashes.size()));
129+
return stable_hash_combine(
130+
MO.getType(), MO.getTargetFlags(),
131+
stable_hash_combine_array(RegMaskHashes.data(),
132+
RegMaskHashes.size()));
132133
}
133134
}
134135
}
135136

136137
assert(0 && "MachineOperand not associated with any MachineFunction");
137-
return hash_combine(MO.getType(), MO.getTargetFlags());
138+
return stable_hash_combine(MO.getType(), MO.getTargetFlags());
138139
}
139140

140141
case MachineOperand::MO_ShuffleMask: {
@@ -144,14 +145,15 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {
144145
MO.getShuffleMask(), std::back_inserter(ShuffleMaskHashes),
145146
[](int S) -> llvm::stable_hash { return llvm::stable_hash(S); });
146147

147-
return hash_combine(MO.getType(), MO.getTargetFlags(),
148-
stable_hash_combine_array(ShuffleMaskHashes.data(),
149-
ShuffleMaskHashes.size()));
148+
return stable_hash_combine(
149+
MO.getType(), MO.getTargetFlags(),
150+
stable_hash_combine_array(ShuffleMaskHashes.data(),
151+
ShuffleMaskHashes.size()));
150152
}
151153
case MachineOperand::MO_MCSymbol: {
152154
auto SymbolName = MO.getMCSymbol()->getName();
153-
return hash_combine(MO.getType(), MO.getTargetFlags(),
154-
xxh3_64bits(SymbolName));
155+
return stable_hash_combine(MO.getType(), MO.getTargetFlags(),
156+
xxh3_64bits(SymbolName));
155157
}
156158
case MachineOperand::MO_CFIIndex:
157159
return stable_hash_combine(MO.getType(), MO.getTargetFlags(),

0 commit comments

Comments
 (0)