diff options
author | Frederik Harwath <frederik.harwath@amd.com> | 2025-09-03 10:35:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-03 10:35:32 +0200 |
commit | d0d79fd1ac70602b3286bedbb75e42d3766c8019 (patch) | |
tree | ab5fa94dfa8ffc862d5c2cf85656c15df9fa7d9c | |
parent | 653c40365b9adf43ef766aeb7b6ef341598cceb5 (diff) | |
download | llvm-d0d79fd1ac70602b3286bedbb75e42d3766c8019.zip llvm-d0d79fd1ac70602b3286bedbb75e42d3766c8019.tar.gz llvm-d0d79fd1ac70602b3286bedbb75e42d3766c8019.tar.bz2 |
[AMDGPU] si-peephole-sdwa: reuse getOne{NonDBGUse,Def} (NFC) (#156455)
This patch changes the findSingleRegDef function from si-peephole-sdwa
to reuse MachineRegisterInfo::getOneDef and findSingleRefUse to use a
new MachineRegisterInfo::getOneNonDBGUse function.
-rw-r--r-- | llvm/include/llvm/CodeGen/MachineRegisterInfo.h | 4 | ||||
-rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 5 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp | 28 |
3 files changed, 11 insertions, 26 deletions
diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h index e579dc5..27b30bd 100644 --- a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h +++ b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h @@ -579,6 +579,10 @@ public: /// multiple uses. LLVM_ABI bool hasOneNonDBGUser(Register RegNo) const; + /// If the register has a single non-Debug use, returns it; otherwise returns + /// nullptr. + LLVM_ABI MachineOperand *getOneNonDBGUse(Register RegNo) const; + /// If the register has a single non-Debug instruction using the specified /// register, returns it; otherwise returns nullptr. LLVM_ABI MachineInstr *getOneNonDBGUser(Register RegNo) const; diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index b713525..abb3f3e 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -432,6 +432,11 @@ bool MachineRegisterInfo::hasOneNonDBGUser(Register RegNo) const { return hasSingleElement(use_nodbg_instructions(RegNo)); } +MachineOperand *MachineRegisterInfo::getOneNonDBGUse(Register RegNo) const { + auto RegNoDbgUses = use_nodbg_operands(RegNo); + return hasSingleElement(RegNoDbgUses) ? &*RegNoDbgUses.begin() : nullptr; +} + MachineInstr *MachineRegisterInfo::getOneNonDBGUser(Register RegNo) const { auto RegNoDbgUsers = use_nodbg_instructions(RegNo); return hasSingleElement(RegNoDbgUsers) ? &*RegNoDbgUsers.begin() : nullptr; diff --git a/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp b/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp index d0cba30..857cb91 100644 --- a/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp +++ b/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp @@ -291,21 +291,7 @@ static MachineOperand *findSingleRegUse(const MachineOperand *Reg, if (!Reg->isReg() || !Reg->isDef()) return nullptr; - MachineOperand *ResMO = nullptr; - for (MachineOperand &UseMO : MRI->use_nodbg_operands(Reg->getReg())) { - // If there exist use of subreg of Reg then return nullptr - if (!isSameReg(UseMO, *Reg)) - return nullptr; - - // Check that there is only one instruction that uses Reg - if (!ResMO) { - ResMO = &UseMO; - } else if (ResMO->getParent() != UseMO.getParent()) { - return nullptr; - } - } - - return ResMO; + return MRI->getOneNonDBGUse(Reg->getReg()); } static MachineOperand *findSingleRegDef(const MachineOperand *Reg, @@ -313,17 +299,7 @@ static MachineOperand *findSingleRegDef(const MachineOperand *Reg, if (!Reg->isReg()) return nullptr; - MachineInstr *DefInstr = MRI->getUniqueVRegDef(Reg->getReg()); - if (!DefInstr) - return nullptr; - - for (auto &DefMO : DefInstr->defs()) { - if (DefMO.isReg() && DefMO.getReg() == Reg->getReg()) - return &DefMO; - } - - // Ignore implicit defs. - return nullptr; + return MRI->getOneDef(Reg->getReg()); } /// Combine an SDWA instruction's existing SDWA selection \p Sel with |