[llvm] [AMDGPU] Correctly insert s_nops for implicit read of SDWA (PR #100276)
Jeffrey Byrnes via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 25 14:20:14 PDT 2024
================
@@ -875,13 +875,47 @@ GCNHazardRecognizer::checkVALUHazardsHelper(const MachineOperand &Def,
return DataIdx >= 0 &&
TRI->regsOverlap(MI.getOperand(DataIdx).getReg(), Reg);
};
+
int WaitStatesNeededForDef =
VALUWaitStates - getWaitStatesSince(IsHazardFn, VALUWaitStates);
WaitStatesNeeded = std::max(WaitStatesNeeded, WaitStatesNeededForDef);
return WaitStatesNeeded;
}
+static const MachineOperand *
+getDstSelForwardingOperand(const MachineInstr &MI, const GCNSubtarget &ST) {
+ const SIInstrInfo *TII = ST.getInstrInfo();
+ if (SIInstrInfo::isVALU(MI) && SIInstrInfo::isSDWA(MI)) {
+ if (auto *DstSel = TII->getNamedOperand(MI, AMDGPU::OpName::dst_sel))
+ if (DstSel->getImm() == AMDGPU::SDWA::DWORD)
+ return nullptr;
+ } else if (SIInstrInfo::isVALU(MI)) {
+ if (!AMDGPU::hasNamedOperand(MI.getOpcode(), AMDGPU::OpName::op_sel) ||
+ !(TII->getNamedOperand(MI, AMDGPU::OpName::src0_modifiers)->getImm() &
+ SISrcMods::DST_OP_SEL))
+ return nullptr;
+ }
+
+ const MachineOperand *Dst = nullptr;
+
+ if (SIInstrInfo::isVALU(MI))
+ Dst = TII->getNamedOperand(MI, AMDGPU::OpName::vdst);
+
+ // Assume inline asm has dst forwarding hazard
+ else if (MI.isInlineAsm()) {
----------------
jrbyrnes wrote:
outdated
https://github.com/llvm/llvm-project/pull/100276
More information about the llvm-commits
mailing list