aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineStableHash.cpp
diff options
context:
space:
mode:
authorwdx727 <wudexin@kuaishou.com>2025-11-02 12:55:08 +0800
committerGitHub <noreply@github.com>2025-11-01 21:55:08 -0700
commitbefae81fa2559a7cefa8fe6227149c6147e1eb2f (patch)
treeac4f9f59583bb9b82c282e8c45209282ec10b613 /llvm/lib/CodeGen/MachineStableHash.cpp
parent8785595b154042ee460069be1c0c8cca4d4e9d70 (diff)
downloadllvm-befae81fa2559a7cefa8fe6227149c6147e1eb2f.zip
llvm-befae81fa2559a7cefa8fe6227149c6147e1eb2f.tar.gz
llvm-befae81fa2559a7cefa8fe6227149c6147e1eb2f.tar.bz2
Fix the usage issue of getRegMask. (#141215)
In the process of determining whether two MachineOperands are equal and calculating the hash of a MachineOperand, both MO_RegisterMask and MO_RegisterLiveOut types were uniformly handled. However, when the type is MO_RegisterLiveOut, calling getRegMask() triggers an assertion failure. This PR addresses this issue.
Diffstat (limited to 'llvm/lib/CodeGen/MachineStableHash.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineStableHash.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/MachineStableHash.cpp b/llvm/lib/CodeGen/MachineStableHash.cpp
index 9d56696..6da708d 100644
--- a/llvm/lib/CodeGen/MachineStableHash.cpp
+++ b/llvm/lib/CodeGen/MachineStableHash.cpp
@@ -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(),