diff options
-rw-r--r-- | llvm/include/llvm/CodeGen/Register.h | 9 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCRegister.h | 6 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCRegisterInfo.h | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/llvm/include/llvm/CodeGen/Register.h b/llvm/include/llvm/CodeGen/Register.h index 884c8bc..86dde8e 100644 --- a/llvm/include/llvm/CodeGen/Register.h +++ b/llvm/include/llvm/CodeGen/Register.h @@ -110,6 +110,15 @@ public: return MCRegister(Reg); } + /// Utility to check-convert this value to a MCRegister. The caller is + /// expected to have already validated that this Register is, indeed, + /// physical. + MCRegister asMCReg() const { + assert(Reg == MCRegister::NoRegister || + MCRegister::isPhysicalRegister(Reg)); + return MCRegister(Reg); + } + bool isValid() const { return Reg != MCRegister::NoRegister; } /// Comparisons between register objects diff --git a/llvm/include/llvm/MC/MCRegister.h b/llvm/include/llvm/MC/MCRegister.h index 5f2e31b..21ffe28 100644 --- a/llvm/include/llvm/MC/MCRegister.h +++ b/llvm/include/llvm/MC/MCRegister.h @@ -68,6 +68,12 @@ public: return Reg; } + /// Check the provided unsigned value is a valid MCRegister. + static MCRegister from(unsigned Val) { + assert(Val == NoRegister || isPhysicalRegister(Val)); + return MCRegister(Val); + } + unsigned id() const { return Reg; } diff --git a/llvm/include/llvm/MC/MCRegisterInfo.h b/llvm/include/llvm/MC/MCRegisterInfo.h index 9864d95..0c1ac62 100644 --- a/llvm/include/llvm/MC/MCRegisterInfo.h +++ b/llvm/include/llvm/MC/MCRegisterInfo.h @@ -675,6 +675,7 @@ public: MCRegUnitIterator(MCRegister Reg, const MCRegisterInfo *MCRI) { assert(Reg && "Null register has no regunits"); + assert(MCRegister::isPhysicalRegister(Reg.id())); // Decode the RegUnits MCRegisterDesc field. unsigned RU = MCRI->get(Reg).RegUnits; unsigned Scale = RU & 15; |