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

Sergei Barannikov via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 22 11:47:23 PST 2023


================
@@ -1125,6 +1130,10 @@ 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 *TRI = Subtarget->getRegisterInfo();
+  if (!TRI->isReservedReg(MF, Reg))
+    Reg = 0;
----------------
s-barannikov wrote:

I think we should follow gcc as much as possible. Some info can be found [here](https://gcc.gnu.org/onlinedocs/gcc/Global-Register-Variables.html).
In particular, gcc does not seem to require -ffixed-reg option for a register used in 'register asm' construct (global or local). Reserving an ABI register does not prohibit function calls either. I've been only able to get an error when trying to reserve the frame pointer.


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


More information about the cfe-commits mailing list