diff options
| author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2021-02-17 13:37:46 -0800 |
|---|---|---|
| committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2021-02-17 16:01:32 -0800 |
| commit | a8d9d50762c42d726274d3f1126ec97ff96e2a22 (patch) | |
| tree | 3ba3e3cfde488e025fa7acfde11ca08b69cc1572 /llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp | |
| parent | 0252e6ead192f7c61e5a02ceea420bee28a2f251 (diff) | |
[AMDGPU] gfx90a support
Differential Revision: https://reviews.llvm.org/D96906
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp b/llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp index b0ec5ac4a5b9..d874aa143f27 100644 --- a/llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp +++ b/llvm/lib/Target/AMDGPU/SIFormMemoryClauses.cpp @@ -188,11 +188,24 @@ void SIFormMemoryClauses::forAllLanes(Register Reg, LaneBitmask LaneMask, return MaskA.getHighestLane() > MaskB.getHighestLane(); }); + MCRegister RepReg; + for (MCRegister R : *MRI->getRegClass(Reg)) { + if (!MRI->isReserved(R)) { + RepReg = R; + break; + } + } + if (!RepReg) + llvm_unreachable("Failed to find required allocatable register"); + for (unsigned Idx : CoveringSubregs) { LaneBitmask SubRegMask = TRI->getSubRegIndexLaneMask(Idx); if ((SubRegMask & ~LaneMask).any() || (SubRegMask & LaneMask).none()) continue; + if (MRI->isReserved(TRI->getSubReg(RepReg, Idx))) + continue; + Func(Idx); LaneMask &= ~SubRegMask; if (LaneMask.none()) @@ -261,7 +274,7 @@ bool SIFormMemoryClauses::checkPressure(const MachineInstr &MI, // tracking does not account for the alignment requirements for SGPRs, or the // fragmentation of registers the allocator will need to satisfy. if (Occupancy >= MFI->getMinAllowedOccupancy() && - MaxPressure.getVGPRNum() <= MaxVGPRs / 2 && + MaxPressure.getVGPRNum(ST->hasGFX90AInsts()) <= MaxVGPRs / 2 && MaxPressure.getSGPRNum() <= MaxSGPRs / 2) { LastRecordedOccupancy = Occupancy; return true; |
