diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -4303,10 +4303,13 @@ return false; Register Reg = MO.getReg(); - const TargetRegisterClass *RC = - Reg.isVirtual() ? MRI.getRegClass(Reg) : RI.getPhysRegClass(Reg); const TargetRegisterClass *DRC = RI.getRegClass(OpInfo.RegClass); + if (Reg.isPhysical()) + return DRC->contains(Reg); + + const TargetRegisterClass *RC = MRI.getRegClass(Reg); + if (MO.getSubReg()) { const MachineFunction *MF = MO.getParent()->getParent()->getParent(); const TargetRegisterClass *SuperRC = RI.getLargestLegalSuperClass(RC, *MF);