@@ -3845,21 +3845,27 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
38453845 // want the most straightforward mapping, so just directly handle this.
38463846 const RegisterBank *DstBank = getRegBank (DstReg, MRI, *TRI);
38473847 const RegisterBank *SrcBank = getRegBank (SrcReg, MRI, *TRI);
3848- assert (SrcBank && " src bank should have been assigned already" );
38493848
38503849 // For COPY between a physical reg and an s1, there is no type associated so
38513850 // we need to take the virtual register's type as a hint on how to interpret
38523851 // s1 values.
3852+ unsigned Size;
38533853 if (!SrcReg.isVirtual () && !DstBank &&
3854- MRI.getType (DstReg) == LLT::scalar (1 ))
3854+ MRI.getType (DstReg) == LLT::scalar (1 )) {
38553855 DstBank = &AMDGPU::VCCRegBank;
3856- else if (!DstReg.isVirtual () && MRI.getType (SrcReg) == LLT::scalar (1 ))
3856+ Size = 1 ;
3857+ } else if (!DstReg.isVirtual () && MRI.getType (SrcReg) == LLT::scalar (1 )) {
38573858 DstBank = &AMDGPU::VCCRegBank;
3859+ Size = 1 ;
3860+ } else {
3861+ Size = getSizeInBits (DstReg, MRI, *TRI);
3862+ }
38583863
38593864 if (!DstBank)
38603865 DstBank = SrcBank;
3866+ else if (!SrcBank)
3867+ SrcBank = DstBank;
38613868
3862- unsigned Size = getSizeInBits (DstReg, MRI, *TRI);
38633869 if (MI.getOpcode () != AMDGPU::G_FREEZE &&
38643870 cannotCopy (*DstBank, *SrcBank, TypeSize::getFixed (Size)))
38653871 return getInvalidInstructionMapping ();
0 commit comments