diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp index ef927c55128a6..d6156a3d1881e 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp @@ -577,9 +577,10 @@ std::optional InstInfo::getInvalidCompOperandIndex( unsigned CompOprIdx; for (CompOprIdx = 0; CompOprIdx < Component::MAX_OPR_NUM; ++CompOprIdx) { - unsigned BanksNum = BANKS_NUM[CompOprIdx]; + unsigned BanksMasks = VOPD_VGPR_BANK_MASKS[CompOprIdx]; if (OpXRegs[CompOprIdx] && OpYRegs[CompOprIdx] && - (OpXRegs[CompOprIdx] % BanksNum == OpYRegs[CompOprIdx] % BanksNum)) + ((OpXRegs[CompOprIdx] & BanksMasks) == + (OpYRegs[CompOprIdx] & BanksMasks))) return CompOprIdx; } diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h index b0ac6cea16263..0e9e0a12459c9 100644 --- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h +++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h @@ -560,8 +560,9 @@ enum Component : unsigned { MAX_OPR_NUM = DST_NUM + MAX_SRC_NUM }; -// Number of VGPR banks per VOPD component operand. -constexpr unsigned BANKS_NUM[] = {2, 4, 4, 2}; +// LSB mask for VGPR banks per VOPD component operand. +// 4 banks result in a mask 3, setting 2 lower bits. +constexpr unsigned VOPD_VGPR_BANK_MASKS[] = {1, 3, 3, 1}; enum ComponentIndex : unsigned { X = 0, Y = 1 }; constexpr unsigned COMPONENTS[] = {ComponentIndex::X, ComponentIndex::Y};