@@ -751,26 +751,25 @@ RegInterval WaitcntBrackets::getRegInterval(const MachineInstr *MI,
751
751
MCRegister MCReg = AMDGPU::getMCReg (Op.getReg (), *ST);
752
752
unsigned RegIdx = TRI->getHWRegIndex (MCReg);
753
753
assert (isUInt<8 >(RegIdx));
754
- unsigned Reg = (RegIdx << 1 ) | (AMDGPU::isHi16Reg (MCReg, *TRI) ? 1 : 0 );
755
754
756
755
const TargetRegisterClass *RC = TRI->getPhysRegBaseClass (Op.getReg ());
757
756
unsigned Size = TRI->getRegSizeInBits (*RC);
758
757
759
758
// AGPRs/VGPRs are tracked every 16 bits, SGPRs by 32 bits
760
759
if (TRI->isVectorRegister (*MRI, Op.getReg ())) {
761
- assert (Reg <= SQ_MAX_PGM_VGPRS);
760
+ unsigned Reg = (RegIdx << 1 ) | (AMDGPU::isHi16Reg (MCReg, *TRI) ? 1 : 0 );
761
+ assert (Reg <= AGPR_OFFSET);
762
762
Result.first = Reg;
763
763
if (TRI->isAGPR (*MRI, Op.getReg ()))
764
764
Result.first += AGPR_OFFSET;
765
765
assert (Result.first >= 0 && Result.first < SQ_MAX_PGM_VGPRS);
766
766
assert (Size % 16 == 0 );
767
767
Result.second = Result.first + (Size / 16 );
768
- } else if (TRI->isSGPRReg (*MRI, Op.getReg ()) &&
769
- (Reg >> 1 ) < SQ_MAX_PGM_SGPRS) {
768
+ } else if (TRI->isSGPRReg (*MRI, Op.getReg ()) && RegIdx < SQ_MAX_PGM_SGPRS) {
770
769
// SGPRs including VCC, TTMPs and EXEC but excluding read-only scalar
771
770
// sources like SRC_PRIVATE_BASE.
772
- Result.first = (Reg >> 1 ) + NUM_ALL_VGPRS;
773
- Result.second = Result.first + (( Size + 16 ) / 32 );
771
+ Result.first = RegIdx + NUM_ALL_VGPRS;
772
+ Result.second = Result.first + divideCeil ( Size, 32 );
774
773
} else {
775
774
return {-1 , -1 };
776
775
}
0 commit comments