Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions llvm/lib/CodeGen/MachineOperand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -363,8 +363,9 @@ bool MachineOperand::isIdenticalTo(const MachineOperand &Other) const {
case MachineOperand::MO_RegisterMask:
case MachineOperand::MO_RegisterLiveOut: {
// Shallow compare of the two RegMasks
const uint32_t *RegMask = getRegMask();
const uint32_t *OtherRegMask = Other.getRegMask();
const uint32_t *RegMask = isRegMask() ? getRegMask() : getRegLiveOut();
const uint32_t *OtherRegMask =
isRegMask() ? Other.getRegMask() : Other.getRegLiveOut();
if (RegMask == OtherRegMask)
return true;

Expand Down Expand Up @@ -434,7 +435,8 @@ hash_code llvm::hash_value(const MachineOperand &MO) {
if (const MachineFunction *MF = getMFIfAvailable(MO)) {
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
unsigned RegMaskSize = MachineOperand::getRegMaskSize(TRI->getNumRegs());
const uint32_t *RegMask = MO.getRegMask();
const uint32_t *RegMask =
MO.isRegMask() ? MO.getRegMask() : MO.getRegLiveOut();
std::vector<stable_hash> RegMaskHashes(RegMask, RegMask + RegMaskSize);
return hash_combine(MO.getType(), MO.getTargetFlags(),
stable_hash_combine(RegMaskHashes));
Expand Down
3 changes: 2 additions & 1 deletion llvm/lib/CodeGen/MachineStableHash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ stable_hash llvm::stableHashValue(const MachineOperand &MO) {
const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
unsigned RegMaskSize =
MachineOperand::getRegMaskSize(TRI->getNumRegs());
const uint32_t *RegMask = MO.getRegMask();
const uint32_t *RegMask =
MO.isRegMask() ? MO.getRegMask() : MO.getRegLiveOut();
std::vector<llvm::stable_hash> RegMaskHashes(RegMask,
RegMask + RegMaskSize);
return stable_hash_combine(MO.getType(), MO.getTargetFlags(),
Expand Down
9 changes: 9 additions & 0 deletions llvm/unittests/CodeGen/MachineOperandTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -424,4 +424,13 @@ TEST(MachineOperandTest, HashValue) {
ASSERT_TRUE(MO1.isIdenticalTo(MO2));
}

TEST(MachineOperandTest, RegisterLiveOutHashValue) {
uint32_t Mask1 = 0;
uint32_t Mask2 = 0;
MachineOperand MO1 = MachineOperand::CreateRegLiveOut(&Mask1);
MachineOperand MO2 = MachineOperand::CreateRegLiveOut(&Mask2);
ASSERT_EQ(hash_value(MO1), hash_value(MO2));
ASSERT_TRUE(MO1.isIdenticalTo(MO2));
}

} // end namespace
Loading