[clang] [llvm] [SPARC] Support reserving arbitrary general purpose registers (PR #74927)

Sergei Barannikov via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 19 04:33:24 PST 2023


================
@@ -1125,6 +1130,19 @@ Register SparcTargetLowering::getRegisterByName(const char* RegName, LLT VT,
     .Case("g4", SP::G4).Case("g5", SP::G5).Case("g6", SP::G6).Case("g7", SP::G7)
     .Default(0);
 
+  const SparcRegisterInfo *MRI = Subtarget->getRegisterInfo();
+  unsigned DwarfRegNum = MRI->getDwarfRegNum(Reg, false);
+  if (!MRI->isReservedReg(MF, Reg)) {
+    bool IsG = DwarfRegNum < 8, IsO = DwarfRegNum >= 8 && DwarfRegNum < 16,
+         IsL = DwarfRegNum >= 16 && DwarfRegNum < 24, IsI = DwarfRegNum >= 24;
+    unsigned NumInBank = DwarfRegNum % 8;
+    if ((IsG && !Subtarget->isGRegisterReserved(NumInBank)) ||
----------------
s-barannikov wrote:

All `is*RegisterReserved` methods return false here (because of isReservedReg returning false above).



https://github.com/llvm/llvm-project/pull/74927


More information about the cfe-commits mailing list