aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Harwath <frederik.harwath@amd.com>2025-09-03 10:35:32 +0200
committerGitHub <noreply@github.com>2025-09-03 10:35:32 +0200
commitd0d79fd1ac70602b3286bedbb75e42d3766c8019 (patch)
treeab5fa94dfa8ffc862d5c2cf85656c15df9fa7d9c
parent653c40365b9adf43ef766aeb7b6ef341598cceb5 (diff)
downloadllvm-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.h4
-rw-r--r--llvm/lib/CodeGen/MachineRegisterInfo.cpp5
-rw-r--r--llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp28
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