diff --git a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp --- a/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp +++ b/llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp @@ -1386,20 +1386,14 @@ if (MFMAPaddingRatio == 0) return 0; - auto IsMFMAFn = [](const MachineInstr &MI) { - return SIInstrInfo::isMAI(MI) && - MI.getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32_e64 && - MI.getOpcode() != AMDGPU::V_ACCVGPR_READ_B32_e64; - }; - const SIMachineFunctionInfo *MFI = MF.getInfo(); - if (!IsMFMAFn(*MI) || MFI->getOccupancy() < 2) + if (!SIInstrInfo::isMFMA(*MI) || MFI->getOccupancy() < 2) return 0; int NeighborMFMALatency = 0; - auto IsNeighboringMFMA = [&IsMFMAFn, &NeighborMFMALatency, + auto IsNeighboringMFMA = [&NeighborMFMALatency, this](const MachineInstr &MI) { - if (!IsMFMAFn(MI)) + if (!SIInstrInfo::isMFMA(MI)) return false; NeighborMFMALatency = this->getMFMAPipelineWaitStates(MI); @@ -1452,9 +1446,7 @@ } auto IsMFMAFn = [](const MachineInstr &MI) { - return SIInstrInfo::isMAI(MI) && - MI.getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32_e64 && - MI.getOpcode() != AMDGPU::V_ACCVGPR_READ_B32_e64; + return SIInstrInfo::isMFMA(MI); }; for (const MachineOperand &Op : MI->explicit_operands()) { @@ -1592,9 +1584,7 @@ unsigned Opc = MI->getOpcode(); auto IsMFMAFn = [](const MachineInstr &MI) { - return SIInstrInfo::isMAI(MI) && - MI.getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32_e64 && - MI.getOpcode() != AMDGPU::V_ACCVGPR_READ_B32_e64; + return SIInstrInfo::isMFMA(MI); }; auto IsLegacyVALUFn = [&IsMFMAFn](const MachineInstr &MI) { @@ -1853,10 +1843,8 @@ if (!ST.hasGFX90AInsts()) return 0; - auto IsMFMAFn = [](const MachineInstr &MI) -> bool { - return SIInstrInfo::isMAI(MI) && - MI.getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32_e64 && - MI.getOpcode() != AMDGPU::V_ACCVGPR_READ_B32_e64; + auto IsMFMAFn = [](const MachineInstr &MI) { + return SIInstrInfo::isMFMA(MI); }; auto IsDGEMMFn = [](const MachineInstr &MI) -> bool { @@ -2138,11 +2126,10 @@ return false; const MachineInstr *MAI = nullptr; + auto IsMFMAFn = [&MAI](const MachineInstr &MI) { MAI = nullptr; - if (SIInstrInfo::isMAI(MI) && - MI.getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32_e64 && - MI.getOpcode() != AMDGPU::V_ACCVGPR_READ_B32_e64) + if (SIInstrInfo::isMFMA(MI)) MAI = &MI; return MAI != nullptr; }; diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.h b/llvm/lib/Target/AMDGPU/SIInstrInfo.h --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.h +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.h @@ -15,6 +15,7 @@ #define LLVM_LIB_TARGET_AMDGPU_SIINSTRINFO_H #include "AMDGPUMIRFormatter.h" +#include "MCTargetDesc/AMDGPUMCTargetDesc.h" #include "SIRegisterInfo.h" #include "Utils/AMDGPUBaseInfo.h" #include "llvm/ADT/SetVector.h" @@ -655,6 +656,11 @@ return get(Opcode).TSFlags & SIInstrFlags::IsMAI; } + static bool isMFMA(const MachineInstr &MI) { + return isMAI(MI) && MI.getOpcode() != AMDGPU::V_ACCVGPR_WRITE_B32_e64 && + MI.getOpcode() != AMDGPU::V_ACCVGPR_READ_B32_e64; + } + static bool isDOT(const MachineInstr &MI) { return MI.getDesc().TSFlags & SIInstrFlags::IsDOT; } diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -16,7 +16,6 @@ #include "AMDGPUInstrInfo.h" #include "GCNHazardRecognizer.h" #include "GCNSubtarget.h" -#include "MCTargetDesc/AMDGPUMCTargetDesc.h" #include "SIMachineFunctionInfo.h" #include "llvm/Analysis/ValueTracking.h" #include "llvm/CodeGen/LiveIntervals.h"