[llvm] [Mips] Introduce ABI-specific register names and accessors (PR #224284)
Jiaxun Yang via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 21 00:53:59 PDT 2026
================
@@ -45,6 +45,77 @@ using namespace llvm;
#define GET_REGINFO_MC_DESC
#include "MipsGenRegisterInfo.inc"
+#define GET_REGISTER_MATCHER
+#include "MipsGenAsmMatcher.inc"
+
+MCRegister MIPS_MC::matchRegisterName(StringRef Name, const MCRegisterInfo &MRI,
+ unsigned RegClassID, unsigned AltIdx) {
+ MCRegister Reg = MatchRegisterAltName(Name, AltIdx);
+ if (!Reg)
+ Reg = MatchRegisterName(Name);
+ if (!Reg)
+ return MCRegister();
+
+ const MCRegisterClass &RC = MRI.getRegClass(RegClassID);
+ // GPR32 and GPR64 share names; select the requested width.
+ if (!RC.contains(Reg)) {
+ if (RegClassID == Mips::GPR32RegClassID &&
+ MRI.getRegClass(Mips::GPR64RegClassID).contains(Reg))
+ Reg = MRI.getSubReg(Reg, Mips::sub_32);
+ else if (RegClassID == Mips::GPR64RegClassID &&
+ MRI.getRegClass(Mips::GPR32RegClassID).contains(Reg))
+ Reg = MRI.getMatchingSuperReg(Reg, Mips::sub_32, &RC);
+ }
+ return RC.contains(Reg) ? Reg : MCRegister();
+}
+
+int MIPS_MC::getCPURegisterIndex(StringRef Name, const MCRegisterInfo &MRI,
+ unsigned AltIdx, bool *IsDeprecated) {
+ if (IsDeprecated)
+ *IsDeprecated = false;
+
+ if (MCRegister Reg =
+ matchRegisterName(Name, MRI, Mips::GPR32RegClassID, AltIdx))
+ return MRI.getEncodingValue(Reg);
+
+ static const struct {
+ StringLiteral Name;
+ MCPhysReg Reg;
+ // NoRegAltName applies to all ABIs.
+ unsigned AltIdx;
+ } Aliases[] = {
+ {"AT", Mips::AT, Mips::NoRegAltName},
+ {"s8", Mips::FP, Mips::NoRegAltName},
+ {"kt0", Mips::K0, Mips::NABIRegAltName},
+ {"kt1", Mips::K1, Mips::NABIRegAltName},
----------------
FlyGoat wrote:
It’s already covered by other register name cases.
PABI test is only possible after nanoMIPS being implemented, it’s a place holder for now.
https://github.com/llvm/llvm-project/pull/224284
More information about the llvm-commits
mailing list