================ @@ -107,3 +107,183 @@ void IntrinsicLaneMaskAnalyzer::findLCSSAPhi(Register Reg) { S32S64LaneMask.insert(LCSSAPhi.getOperand(0).getReg()); } } + +MachineInstrBuilder AMDGPU::buildReadAnyLaneB32(MachineIRBuilder &B, + const DstOp &SgprDst, + const SrcOp &VgprSrc, + const RegisterBankInfo &RBI) { + auto RFL = B.buildInstr(AMDGPU::G_READANYLANE, {SgprDst}, {VgprSrc}); + Register Dst = RFL->getOperand(0).getReg(); + Register Src = RFL->getOperand(1).getReg(); + MachineRegisterInfo &MRI = *B.getMRI(); + if (!MRI.getRegBankOrNull(Dst)) + MRI.setRegBank(Dst, RBI.getRegBank(SGPRRegBankID)); + if (!MRI.getRegBankOrNull(Src)) + MRI.setRegBank(Src, RBI.getRegBank(VGPRRegBankID)); + return RFL; +} + +MachineInstrBuilder +AMDGPU::buildReadAnyLaneSequenceOfB32(MachineIRBuilder &B, const DstOp &SgprDst, + const SrcOp &VgprSrc, LLT B32Ty, + const RegisterBankInfo &RBI) { + MachineRegisterInfo &MRI = *B.getMRI(); + SmallVector<Register, 8> SgprDstParts; + auto Unmerge = B.buildUnmerge(B32Ty, VgprSrc); + for (unsigned i = 0; i < Unmerge->getNumOperands() - 1; ++i) { + SgprDstParts.push_back( + buildReadAnyLaneB32(B, B32Ty, Unmerge.getReg(i), RBI).getReg(0)); + } + + auto Merge = B.buildMergeLikeInstr(SgprDst, SgprDstParts); + MRI.setRegBank(Merge.getReg(0), RBI.getRegBank(AMDGPU::SGPRRegBankID)); + return Merge; +} + +MachineInstrBuilder +AMDGPU::buildReadAnyLaneSequenceOfS64(MachineIRBuilder &B, const DstOp &SgprDst, + const SrcOp &VgprSrc, + const RegisterBankInfo &RBI) { + LLT S32 = LLT::scalar(32); + LLT S64 = LLT::scalar(64); + MachineRegisterInfo &MRI = *B.getMRI(); + SmallVector<Register, 8> SgprDstParts; + auto Unmerge = B.buildUnmerge(S64, VgprSrc); + + for (unsigned i = 0; i < Unmerge->getNumOperands() - 1; ++i) { + MRI.setRegBank(Unmerge.getReg(i), RBI.getRegBank(AMDGPU::VGPRRegBankID)); ---------------- arsenm wrote:
Use the direct VGPRRegBank pointer or pull this out of the loop https://github.com/llvm/llvm-project/pull/112864 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits