Skip to content

Commit d44d2f7

Browse files
committed
Address reviewer comments:
- Encapsulate all use of encoding values in sgprPairNumber
1 parent 06db451 commit d44d2f7

File tree

1 file changed

+26
-17
lines changed

1 file changed

+26
-17
lines changed

llvm/lib/Target/AMDGPU/GCNHazardRecognizer.cpp

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3014,9 +3014,21 @@ bool GCNHazardRecognizer::fixVALUMaskWriteHazard(MachineInstr *MI) {
30143014

30153015
// Return the numeric ID 0-63 of an 64b SGPR pair for a given SGPR.
30163016
// i.e. SGPR0 = SGPR0_SGPR1 = 0, SGPR3 = SGPR2_SGPR3 = 1, etc
3017-
static unsigned sgprPairNumber(Register Reg, const SIRegisterInfo &TRI) {
3017+
static std::optional<unsigned> sgprPairNumber(Register Reg, const SIRegisterInfo &TRI) {
3018+
switch (Reg) {
3019+
case AMDGPU::M0:
3020+
case AMDGPU::EXEC:
3021+
case AMDGPU::EXEC_LO:
3022+
case AMDGPU::EXEC_HI:
3023+
case AMDGPU::SGPR_NULL:
3024+
case AMDGPU::SGPR_NULL64:
3025+
return {};
3026+
default:
3027+
break;
3028+
}
30183029
unsigned RegN = TRI.getEncodingValue(Reg);
3019-
assert(RegN <= 127);
3030+
if (RegN > 127)
3031+
return {};
30203032
return (RegN >> 1) & 0x3f;
30213033
}
30223034

@@ -3049,7 +3061,6 @@ void GCNHazardRecognizer::computeVALUHazardSGPRs(MachineFunction *MMF) {
30493061
// before a SALU write to the same SGPR. This provides a reduction in
30503062
// hazard insertion when all VALU access to an SGPR occurs after its last
30513063
// SALU write, when compared to a linear scan.
3052-
const unsigned SGPR_NULL = TRI.getEncodingValue(AMDGPU::SGPR_NULL_gfx11plus);
30533064
const MachineRegisterInfo &MRI = MF.getRegInfo();
30543065
BitVector SALUWriteSGPRs(64), ReadSGPRs(64);
30553066
MachineCycleInfo CI;
@@ -3074,19 +3085,19 @@ void GCNHazardRecognizer::computeVALUHazardSGPRs(MachineFunction *MMF) {
30743085
continue;
30753086
if (!TRI.isSGPRReg(MRI, Reg))
30763087
continue;
3077-
if (TRI.getEncodingValue(Reg) >= SGPR_NULL)
3088+
auto RegN = sgprPairNumber(Reg, TRI);
3089+
if (!RegN)
30783090
continue;
3079-
unsigned RegN = sgprPairNumber(Reg, TRI);
30803091
if (IsVALU && Op.isUse()) {
30813092
// Note: any access within a cycle must be considered a hazard.
3082-
if (InCycle || (ReadSGPRs[RegN] && SALUWriteSGPRs[RegN]))
3083-
VALUReadHazardSGPRs.set(RegN);
3084-
ReadSGPRs.set(RegN);
3093+
if (InCycle || (ReadSGPRs[*RegN] && SALUWriteSGPRs[*RegN]))
3094+
VALUReadHazardSGPRs.set(*RegN);
3095+
ReadSGPRs.set(*RegN);
30853096
} else if (IsSALU) {
30863097
if (Op.isDef())
3087-
SALUWriteSGPRs.set(RegN);
3098+
SALUWriteSGPRs.set(*RegN);
30883099
else
3089-
ReadSGPRs.set(RegN);
3100+
ReadSGPRs.set(*RegN);
30903101
}
30913102
}
30923103
}
@@ -3155,7 +3166,6 @@ bool GCNHazardRecognizer::fixVALUReadSGPRHazard(MachineInstr *MI) {
31553166
MI->getOpcode() == AMDGPU::S_ENDPGM_SAVED);
31563167

31573168
// Collect all SGPR sources for MI which are read by a VALU.
3158-
const unsigned SGPR_NULL = TRI.getEncodingValue(AMDGPU::SGPR_NULL_gfx11plus);
31593169
const MachineRegisterInfo &MRI = MF.getRegInfo();
31603170
SmallSet<Register, 4> SGPRsUsed;
31613171

@@ -3171,12 +3181,11 @@ bool GCNHazardRecognizer::fixVALUReadSGPRHazard(MachineInstr *MI) {
31713181
if (!TRI.isSGPRReg(MRI, OpReg))
31723182
continue;
31733183

3174-
// Ignore special purposes registers such as NULL, EXEC, and M0.
3175-
if (TRI.getEncodingValue(OpReg) >= SGPR_NULL)
3184+
auto RegN = sgprPairNumber(OpReg, TRI);
3185+
if (!RegN)
31763186
continue;
31773187

3178-
unsigned RegN = sgprPairNumber(OpReg, TRI);
3179-
if (!VALUReadHazardSGPRs[RegN])
3188+
if (!VALUReadHazardSGPRs[*RegN])
31803189
continue;
31813190

31823191
SGPRsUsed.insert(OpReg);
@@ -3239,8 +3248,8 @@ bool GCNHazardRecognizer::fixVALUReadSGPRHazard(MachineInstr *MI) {
32393248
auto hazardPair = [this](Register Reg) {
32403249
if (Reg == AMDGPU::VCC || Reg == AMDGPU::VCC_LO || Reg == AMDGPU::VCC_HI)
32413250
return Register(AMDGPU::VCC);
3242-
// TODO: handle TTMP?
3243-
return Register(AMDGPU::SGPR0_SGPR1 + sgprPairNumber(Reg, TRI));
3251+
auto RegN = sgprPairNumber(Reg, TRI);
3252+
return Register(AMDGPU::SGPR0_SGPR1 + *RegN);
32443253
};
32453254
auto SearchHazardFn = [this, hazardPair,
32463255
&SGPRsUsed](const MachineInstr &I) {

0 commit comments

Comments
 (0)