[llvm] [AMDGPU] Use AllowLDSDMA=false in non-hazard passes (part 2) (PR #222086)
Akash Dutta via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 8 10:54:02 PDT 2026
https://github.com/akadutta created https://github.com/llvm/llvm-project/pull/222086
Follow-up to #212866 for https://github.com/llvm/llvm-project/issues/204488. Flip the remaining non-hazard AllowLDSDMA=true call sites to false so LDSDMA is not treated as VALU in register/exec analysis and SGPR copy lowering.
>From 664a670da453f0f23e659661ade6b4d9a30f7fc6 Mon Sep 17 00:00:00 2001
From: akadutta_amdeng <Akash.Dutta at amd.com>
Date: Tue, 8 Sep 2026 12:44:23 -0500
Subject: [PATCH] Use AllowLDSDMA=false in non-hazard passes (part 2)
---
llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp | 2 +-
llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 6 +++---
llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 6 +++---
llvm/unittests/Target/AMDGPU/CMakeLists.txt | 1 +
4 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp b/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp
index b0c896b1a122a..79eb74d6d2201 100644
--- a/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp
+++ b/llvm/lib/Target/AMDGPU/SIFixSGPRCopies.cpp
@@ -1016,7 +1016,7 @@ void SIFixSGPRCopies::analyzeVGPRToSGPRCopy(MachineInstr* MI) {
} else if (Inst->getNumExplicitDefs() != 0) {
Register Reg = Inst->getOperand(0).getReg();
if (Reg.isVirtual() && TRI->isSGPRReg(*MRI, Reg) &&
- !TII->isVALU(*Inst, /*AllowLDSDMA=*/true)) {
+ !TII->isVALU(*Inst, /*AllowLDSDMA=*/false)) {
for (auto &U : MRI->use_instructions(Reg))
Users.push_back(&U);
}
diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
index 9f718a517dfbe..0c0d4a79033c8 100644
--- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
+++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp
@@ -5866,7 +5866,7 @@ getDPPOpcForWaveReduction(unsigned Opc, const GCNSubtarget &ST) {
llvm_unreachable("unhandled lane op");
}
unsigned ClampOpc = Opc;
- if (!ST.getInstrInfo()->isVALU(Opc, /*AllowLDSDMA=*/true)) {
+ if (!ST.getInstrInfo()->isVALU(Opc, /*AllowLDSDMA=*/false)) {
if (Opc == AMDGPU::S_SUB_I32)
ClampOpc = AMDGPU::S_ADD_I32;
if (Opc == AMDGPU::S_ADD_U64_PSEUDO || Opc == AMDGPU::S_SUB_U64_PSEUDO)
@@ -6254,7 +6254,7 @@ static MachineBasicBlock *lowerWaveReduce(MachineInstr &MI,
LaneValueReg)
.addReg(SrcReg)
.addReg(FF1Reg);
- if (ST.getInstrInfo()->isVALU(Opc, /*AllowLDSDMA=*/true)) {
+ if (ST.getInstrInfo()->isVALU(Opc, /*AllowLDSDMA=*/false)) {
// Get the Lane Value in VGPR to avoid the Constant Bus Restriction
Register LaneValVgpr = MRI.createVirtualRegister(SrcRegClass);
Register VgprResultReg = MRI.createVirtualRegister(SrcRegClass);
@@ -6276,7 +6276,7 @@ static MachineBasicBlock *lowerWaveReduce(MachineInstr &MI,
OpInstr.addImm(0); // opsel
if (hasOMod)
OpInstr.addImm(0); // omod
- if (ST.getInstrInfo()->isVALU(Opc, /*AllowLDSDMA=*/true)) {
+ if (ST.getInstrInfo()->isVALU(Opc, /*AllowLDSDMA=*/false)) {
BuildMI(*ComputeLoop, I, DL, TII->get(AMDGPU::V_READFIRSTLANE_B32),
DstReg)
.addReg(OpDstReg);
diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
index e143f345b2085..b1979560cd69b 100644
--- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
@@ -260,7 +260,7 @@ bool SIInstrInfo::isReMaterializableImpl(
// Returns true if the result of a VALU instruction depends on exec.
bool SIInstrInfo::resultDependsOnExec(const MachineInstr &MI) const {
- assert(isVALU(MI, /*AllowLDSDMA=*/true));
+ assert(isVALU(MI, /*AllowLDSDMA=*/false));
// If it is convergent it depends on EXEC.
if (MI.isConvergent())
@@ -284,7 +284,7 @@ bool SIInstrInfo::isIgnorableUse(const MachineInstr &MI, unsigned OpIdx) const {
const MachineOperand &MO = MI.getOperand(OpIdx);
// Any implicit use of exec by VALU is not a real register read.
return MO.getReg() == AMDGPU::EXEC && MO.isImplicit() &&
- isVALU(MI, /*AllowLDSDMA=*/true) && !resultDependsOnExec(MI);
+ isVALU(MI, /*AllowLDSDMA=*/false) && !resultDependsOnExec(MI);
}
bool SIInstrInfo::isSafeToSink(MachineInstr &MI,
@@ -5261,7 +5261,7 @@ static Register findImplicitSGPRRead(const MachineInstr &MI) {
}
static bool shouldReadExec(const MachineInstr &MI) {
- if (SIInstrInfo::isVALU(MI, /*AllowLDSDMA=*/true)) {
+ if (SIInstrInfo::isVALU(MI, /*AllowLDSDMA=*/false)) {
switch (MI.getOpcode()) {
case AMDGPU::V_READLANE_B32:
case AMDGPU::SI_RESTORE_S32_FROM_VGPR:
diff --git a/llvm/unittests/Target/AMDGPU/CMakeLists.txt b/llvm/unittests/Target/AMDGPU/CMakeLists.txt
index 2bb9b6dedba13..ed85f2a98fbd2 100644
--- a/llvm/unittests/Target/AMDGPU/CMakeLists.txt
+++ b/llvm/unittests/Target/AMDGPU/CMakeLists.txt
@@ -30,6 +30,7 @@ add_llvm_target_unittest(AMDGPUTests
ExecMayBeModifiedBeforeAnyUse.cpp
GCNRegPressureTest.cpp
InstSizes.cpp
+ IsIgnorableExecUseTest.cpp
LiveRegUnits.cpp
PALMetadata.cpp
RCIUpdateReservedRegsTest.cpp
More information about the llvm-commits
mailing list