[llvm] [Mips] Fix $gp was restored when used as global register variable (PR #184975)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 3 03:20:45 PDT 2026


================
@@ -75,6 +76,23 @@ MipsRegisterInfo::getRegPressureLimit(const TargetRegisterClass *RC,
 // Callee Saved Registers methods
 //===----------------------------------------------------------------------===//
 
+/// Check if the user has declared $gp/$28 as a global regiater.
+bool isGPUsedAsGlobalRegister(const MachineFunction &MF) {
+  const Module *Module = MF.getFunction().getParent();
+
+  if (const NamedMDNode *NamedRegs =
+          Module->getNamedMetadata("llvm.named.register")) {
+    for (const auto *Op : NamedRegs->operands()) {
+      const MDString *RegStr = cast<MDString>(Op->getOperand(0));
+      StringRef RegName = RegStr->getString();
+      return RegName == "$28" || RegName == "$gp";
+    }
+  } else if (Module->getNamedMetadata("llvm.named.register.$28"))
----------------
arsenm wrote:

I would be unhappy if we have 2 different forms of llvm.named.register, but it's missing from the langref so I don't know what the expectations are 

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


More information about the llvm-commits mailing list