Skip to content

Commit 4a5f90e

Browse files
committed
Review changes
1 parent 1193612 commit 4a5f90e

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

llvm/lib/Target/AMDGPU/AMDGPUIGroupLP.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2395,13 +2395,19 @@ bool SchedGroup::canAddMI(const MachineInstr &MI) const {
23952395
const SIRegisterInfo &TRI = TII->getRegisterInfo();
23962396
auto &MRI = MI.getParent()->getParent()->getRegInfo();
23972397
bool SGPR_used = false, VGPR_used = false, VMFMA_used = false,
2398-
MayLoad = MI.mayLoad(), MayStore = MI.mayStore();
2398+
VReg32_used = false, MayLoad = MI.mayLoad(), MayStore = MI.mayStore();
23992399
for (const MachineOperand &Operand : MI.operands())
24002400
if (Operand.isReg()) {
24012401
auto &RegClass = *TRI.getRegClassForOperandReg(MRI, Operand);
2402-
if (TRI.hasVGPRs(&RegClass))
2402+
if (TRI.hasVGPRs(&RegClass)) {
24032403
VGPR_used = true;
2404-
if (TRI.hasAGPRs(&RegClass) || TRI.getRegSizeInBits(RegClass) > 128) // > 128 bit registers are usually only used by MFMA instructions, so we're using that as a heuristic to guess the schedule group mask of the inline asm.
2404+
if (Operand.isUse() && TRI.getRegSizeInBits(RegClass) == 32)
2405+
VReg32_used = false;
2406+
}
2407+
// >= 128 bit registers are usually only used by MFMA instructions, so
2408+
// we're using that as a heuristic to guess the schedule group mask of
2409+
// the inline asm.
2410+
if (TRI.hasAGPRs(&RegClass) || TRI.getRegSizeInBits(RegClass) >= 128)
24052411
VMFMA_used = true;
24062412
if (TRI.hasSGPRs(&RegClass))
24072413
SGPR_used = true;
@@ -2415,13 +2421,12 @@ bool SchedGroup::canAddMI(const MachineInstr &MI) const {
24152421
if (VMFMA_used)
24162422
InlineAsmMask |= (unsigned long)SchedGroupMask::MFMA;
24172423
if (VGPR_used && MayLoad)
2418-
InlineAsmMask |= (unsigned long)SchedGroupMask::VMEM_READ;
2424+
InlineAsmMask |= (unsigned long)(VReg32_used ? SchedGroupMask::DS_READ
2425+
: SchedGroupMask::VMEM_READ);
24192426
if (VGPR_used && MayStore)
2420-
InlineAsmMask |= (unsigned long)SchedGroupMask::VMEM_WRITE;
2421-
if (!VGPR_used && MayLoad)
2422-
InlineAsmMask |= (unsigned long)SchedGroupMask::DS_READ;
2423-
if (!VGPR_used && MayStore)
2424-
InlineAsmMask |= (unsigned long)SchedGroupMask::DS_WRITE;
2427+
InlineAsmMask |=
2428+
(unsigned long)(VReg32_used ? SchedGroupMask::DS_WRITE
2429+
: SchedGroupMask::VMEM_WRITE);
24252430
if (InlineAsmMask & (unsigned long)SchedGroupMask::VALU ||
24262431
InlineAsmMask & (unsigned long)SchedGroupMask::SALU)
24272432
InlineAsmMask |= (unsigned long)SchedGroupMask::ALU;

0 commit comments

Comments
 (0)