Skip to content

Commit 547445f

Browse files
committed
[AMDGPU] Factor out getNumUsedPhysRegs(). NFC.
I will need it from one more place.
1 parent b0a2546 commit 547445f

File tree

3 files changed

+17
-38
lines changed

3 files changed

+17
-38
lines changed

llvm/lib/Target/AMDGPU/AMDGPUResourceUsageAnalysis.cpp

Lines changed: 4 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -146,44 +146,10 @@ AMDGPUResourceUsageAnalysis::analyzeResourceUsage(
146146
// count easily.
147147
// A tail call isn't considered a call for MachineFrameInfo's purposes.
148148
if (!FrameInfo.hasCalls() && !FrameInfo.hasTailCall()) {
149-
MCPhysReg HighestVGPRReg = AMDGPU::NoRegister;
150-
for (MCPhysReg Reg : reverse(AMDGPU::VGPR_32RegClass.getRegisters())) {
151-
if (MRI.isPhysRegUsed(Reg)) {
152-
HighestVGPRReg = Reg;
153-
break;
154-
}
155-
}
156-
157-
if (ST.hasMAIInsts()) {
158-
MCPhysReg HighestAGPRReg = AMDGPU::NoRegister;
159-
for (MCPhysReg Reg : reverse(AMDGPU::AGPR_32RegClass.getRegisters())) {
160-
if (MRI.isPhysRegUsed(Reg)) {
161-
HighestAGPRReg = Reg;
162-
break;
163-
}
164-
}
165-
Info.NumAGPR = HighestAGPRReg == AMDGPU::NoRegister
166-
? 0
167-
: TRI.getHWRegIndex(HighestAGPRReg) + 1;
168-
}
169-
170-
MCPhysReg HighestSGPRReg = AMDGPU::NoRegister;
171-
for (MCPhysReg Reg : reverse(AMDGPU::SGPR_32RegClass.getRegisters())) {
172-
if (MRI.isPhysRegUsed(Reg)) {
173-
HighestSGPRReg = Reg;
174-
break;
175-
}
176-
}
177-
178-
// We found the maximum register index. They start at 0, so add one to get
179-
// the number of registers.
180-
Info.NumVGPR = HighestVGPRReg == AMDGPU::NoRegister
181-
? 0
182-
: TRI.getHWRegIndex(HighestVGPRReg) + 1;
183-
Info.NumExplicitSGPR = HighestSGPRReg == AMDGPU::NoRegister
184-
? 0
185-
: TRI.getHWRegIndex(HighestSGPRReg) + 1;
186-
149+
Info.NumVGPR = TRI.getNumUsedPhysRegs(MRI, AMDGPU::VGPR_32RegClass);
150+
Info.NumExplicitSGPR = TRI.getNumUsedPhysRegs(MRI, AMDGPU::SGPR_32RegClass);
151+
if (ST.hasMAIInsts())
152+
Info.NumAGPR = TRI.getNumUsedPhysRegs(MRI, AMDGPU::AGPR_32RegClass);
187153
return Info;
188154
}
189155

llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3861,3 +3861,11 @@ SIRegisterInfo::getVRegFlagsOfReg(Register Reg,
38613861
RegFlags.push_back("WWM_REG");
38623862
return RegFlags;
38633863
}
3864+
unsigned
3865+
SIRegisterInfo::getNumUsedPhysRegs(const MachineRegisterInfo &MRI,
3866+
const TargetRegisterClass &RC) const {
3867+
for (MCPhysReg Reg : reverse(RC.getRegisters()))
3868+
if (MRI.isPhysRegUsed(Reg))
3869+
return getHWRegIndex(Reg) + 1;
3870+
return 0;
3871+
}

llvm/lib/Target/AMDGPU/SIRegisterInfo.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,11 @@ class SIRegisterInfo final : public AMDGPUGenRegisterInfo {
465465

466466
SmallVector<StringLiteral>
467467
getVRegFlagsOfReg(Register Reg, const MachineFunction &MF) const override;
468+
469+
// \returns a number of registers of a given \p RC used in a function.
470+
// Does not go inside function calls.
471+
unsigned getNumUsedPhysRegs(const MachineRegisterInfo &MRI,
472+
const TargetRegisterClass &RC) const;
468473
};
469474

470475
namespace AMDGPU {

0 commit comments

Comments
 (0)