diff --git a/llvm/lib/CodeGen/TargetRegisterInfo.cpp b/llvm/lib/CodeGen/TargetRegisterInfo.cpp --- a/llvm/lib/CodeGen/TargetRegisterInfo.cpp +++ b/llvm/lib/CodeGen/TargetRegisterInfo.cpp @@ -234,8 +234,9 @@ // this physreg. const TargetRegisterClass *BestRC = nullptr; for (const TargetRegisterClass *RC : regclasses()) { - if ((!Ty.isValid() || isTypeLegalForClass(*RC, Ty)) && RC->contains(reg) && - (!BestRC || BestRC->hasSubClass(RC))) + if ((!Ty.isValid() || + (RC->isAllocatable() && isTypeLegalForClass(*RC, Ty))) && + RC->contains(reg) && (!BestRC || BestRC->hasSubClass(RC))) BestRC = RC; }