[llvm] [Mips] Support "$sp" named register (PR #136821)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 23 00:17:56 PDT 2025
https://github.com/yingopq created https://github.com/llvm/llvm-project/pull/136821
Fix #47656.
>From 11d66917411a3522c59ba9694352c4018646b4d2 Mon Sep 17 00:00:00 2001
From: Ying Huang <ying.huang at oss.cipunited.com>
Date: Tue, 22 Apr 2025 22:29:52 -0400
Subject: [PATCH] [Mips] Support "$sp" named register
Fix #47656.
---
llvm/lib/Target/Mips/MipsISelLowering.cpp | 2 ++
llvm/test/CodeGen/Mips/named-register-n32.ll | 11 +++++++++++
llvm/test/CodeGen/Mips/named-register-n64.ll | 11 +++++++++++
llvm/test/CodeGen/Mips/named-register-o32.ll | 11 +++++++++++
4 files changed, 35 insertions(+)
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp
index bd65431b475d0..deb9f1a6daac4 100644
--- a/llvm/lib/Target/Mips/MipsISelLowering.cpp
+++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp
@@ -4898,6 +4898,7 @@ MipsTargetLowering::getRegisterByName(const char *RegName, LLT VT,
Register Reg = StringSwitch<Register>(RegName)
.Case("$28", Mips::GP_64)
.Case("sp", Mips::SP_64)
+ .Case("$sp", Mips::SP_64)
.Default(Register());
if (Reg)
return Reg;
@@ -4905,6 +4906,7 @@ MipsTargetLowering::getRegisterByName(const char *RegName, LLT VT,
Register Reg = StringSwitch<Register>(RegName)
.Case("$28", Mips::GP)
.Case("sp", Mips::SP)
+ .Case("$sp", Mips::SP)
.Default(Register());
if (Reg)
return Reg;
diff --git a/llvm/test/CodeGen/Mips/named-register-n32.ll b/llvm/test/CodeGen/Mips/named-register-n32.ll
index 112e04e14b2ac..83bd437a96085 100644
--- a/llvm/test/CodeGen/Mips/named-register-n32.ll
+++ b/llvm/test/CodeGen/Mips/named-register-n32.ll
@@ -22,8 +22,19 @@ define i64 @get_sp() {
ret i64 %1
}
+define i64 @get_$sp() {
+; CHECK-LABEL: get_$sp:
+; CHECK: # %bb.0:
+; CHECK-NEXT: jr $ra
+; CHECK-NEXT: move $2, $sp
+ %1 = call i64 @llvm.read_register.i64(metadata !2)
+ ret i64 %1
+}
+
!llvm.named.register.$28 = !{!0}
!llvm.named.register.sp = !{!1}
+!llvm.named.register.$sp = !{!2}
!0 = !{!"$28"}
!1 = !{!"sp"}
+!2 = !{!"$sp"}
diff --git a/llvm/test/CodeGen/Mips/named-register-n64.ll b/llvm/test/CodeGen/Mips/named-register-n64.ll
index 42d9ba1e1f15c..c0e9f75418485 100644
--- a/llvm/test/CodeGen/Mips/named-register-n64.ll
+++ b/llvm/test/CodeGen/Mips/named-register-n64.ll
@@ -22,8 +22,19 @@ define i64 @get_sp() {
ret i64 %1
}
+define i64 @get_$sp() {
+; CHECK-LABEL: get_$sp:
+; CHECK: # %bb.0:
+; CHECK-NEXT: jr $ra
+; CHECK-NEXT: move $2, $sp
+ %1 = call i64 @llvm.read_register.i64(metadata !2)
+ ret i64 %1
+}
+
!llvm.named.register.$28 = !{!0}
!llvm.named.register.sp = !{!1}
+!llvm.named.register.$sp = !{!2}
!0 = !{!"$28"}
!1 = !{!"sp"}
+!2 = !{!"$sp"}
diff --git a/llvm/test/CodeGen/Mips/named-register-o32.ll b/llvm/test/CodeGen/Mips/named-register-o32.ll
index 280c56e4db6a4..74cbcd2d739d8 100644
--- a/llvm/test/CodeGen/Mips/named-register-o32.ll
+++ b/llvm/test/CodeGen/Mips/named-register-o32.ll
@@ -22,8 +22,19 @@ define i32 @get_sp() {
ret i32 %1
}
+define i32 @get_$sp() {
+; CHECK-LABEL: get_$sp:
+; CHECK: # %bb.0:
+; CHECK-NEXT: jr $ra
+; CHECK-NEXT: move $2, $sp
+ %1 = call i32 @llvm.read_register.i32(metadata !2)
+ ret i32 %1
+}
+
!llvm.named.register.$28 = !{!0}
!llvm.named.register.sp = !{!1}
+!llvm.named.register.$sp = !{!2}
!0 = !{!"$28"}
!1 = !{!"sp"}
+!2 = !{!"$sp"}
More information about the llvm-commits
mailing list