@@ -3845,21 +3845,27 @@ AMDGPURegisterBankInfo::getInstrMapping(const MachineInstr &MI) const {
3845
3845
// want the most straightforward mapping, so just directly handle this.
3846
3846
const RegisterBank *DstBank = getRegBank (DstReg, MRI, *TRI);
3847
3847
const RegisterBank *SrcBank = getRegBank (SrcReg, MRI, *TRI);
3848
- assert (SrcBank && " src bank should have been assigned already" );
3849
3848
3850
3849
// For COPY between a physical reg and an s1, there is no type associated so
3851
3850
// we need to take the virtual register's type as a hint on how to interpret
3852
3851
// s1 values.
3852
+ unsigned Size;
3853
3853
if (!SrcReg.isVirtual () && !DstBank &&
3854
- MRI.getType (DstReg) == LLT::scalar (1 ))
3854
+ MRI.getType (DstReg) == LLT::scalar (1 )) {
3855
3855
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 )) {
3857
3858
DstBank = &AMDGPU::VCCRegBank;
3859
+ Size = 1 ;
3860
+ } else {
3861
+ Size = getSizeInBits (DstReg, MRI, *TRI);
3862
+ }
3858
3863
3859
3864
if (!DstBank)
3860
3865
DstBank = SrcBank;
3866
+ else if (!SrcBank)
3867
+ SrcBank = DstBank;
3861
3868
3862
- unsigned Size = getSizeInBits (DstReg, MRI, *TRI);
3863
3869
if (MI.getOpcode () != AMDGPU::G_FREEZE &&
3864
3870
cannotCopy (*DstBank, *SrcBank, TypeSize::getFixed (Size)))
3865
3871
return getInvalidInstructionMapping ();
0 commit comments