[llvm] [RISCV] Remove X16-31 from interrupt callee saved register list for RVE+D. (PR #139213)

via llvm-commits llvm-commits at lists.llvm.org
Thu May 8 23:58:03 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-risc-v

Author: Craig Topper (topperc)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/139213.diff


2 Files Affected:

- (modified) llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp (+2-1) 
- (modified) llvm/test/CodeGen/RISCV/interrupt-attr.ll (+47-111) 


``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp b/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
index b3340b97f4b09..c6f6c9007b2b1 100644
--- a/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVRegisterInfo.cpp
@@ -67,7 +67,8 @@ RISCVRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
     return CSR_NoRegs_SaveList;
   if (MF->getFunction().hasFnAttribute("interrupt")) {
     if (Subtarget.hasStdExtD())
-      return CSR_XLEN_F64_Interrupt_SaveList;
+      return Subtarget.hasStdExtE() ? CSR_XLEN_F64_Interrupt_RVE_SaveList
+                                    : CSR_XLEN_F64_Interrupt_SaveList;
     if (Subtarget.hasStdExtF())
       return Subtarget.hasStdExtE() ? CSR_XLEN_F32_Interrupt_RVE_SaveList
                                     : CSR_XLEN_F32_Interrupt_SaveList;
diff --git a/llvm/test/CodeGen/RISCV/interrupt-attr.ll b/llvm/test/CodeGen/RISCV/interrupt-attr.ll
index 739c9d8d0b0ac..ba20ba77e6b26 100644
--- a/llvm/test/CodeGen/RISCV/interrupt-attr.ll
+++ b/llvm/test/CodeGen/RISCV/interrupt-attr.ll
@@ -1442,33 +1442,17 @@ define void @foo_with_call() #1 {
 ;
 ; CHECK-RV64E-FD-LABEL: foo_with_call:
 ; CHECK-RV64E-FD:       # %bb.0:
-; CHECK-RV64E-FD-NEXT:    addi sp, sp, -464
-; CHECK-RV64E-FD-NEXT:    sd ra, 456(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t0, 448(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t1, 440(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t2, 432(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a0, 424(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a1, 416(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a2, 408(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a3, 400(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a4, 392(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a5, 384(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a6, 376(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a7, 368(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s2, 360(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s3, 352(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s4, 344(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s5, 336(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s6, 328(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s7, 320(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s8, 312(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s9, 304(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s10, 296(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s11, 288(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t3, 280(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t4, 272(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t5, 264(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t6, 256(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    addi sp, sp, -336
+; CHECK-RV64E-FD-NEXT:    sd ra, 328(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd t0, 320(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd t1, 312(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd t2, 304(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a0, 296(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a1, 288(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a2, 280(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a3, 272(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a4, 264(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a5, 256(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft0, 248(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft1, 240(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft2, 232(sp) # 8-byte Folded Spill
@@ -1502,32 +1486,16 @@ define void @foo_with_call() #1 {
 ; CHECK-RV64E-FD-NEXT:    fsd ft10, 8(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft11, 0(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    call otherfoo
-; CHECK-RV64E-FD-NEXT:    ld ra, 456(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t0, 448(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t1, 440(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t2, 432(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a0, 424(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a1, 416(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a2, 408(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a3, 400(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a4, 392(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a5, 384(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a6, 376(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a7, 368(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s2, 360(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s3, 352(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s4, 344(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s5, 336(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s6, 328(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s7, 320(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s8, 312(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s9, 304(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s10, 296(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s11, 288(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t3, 280(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t4, 272(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t5, 264(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t6, 256(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld ra, 328(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld t0, 320(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld t1, 312(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld t2, 304(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a0, 296(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a1, 288(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a2, 280(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a3, 272(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a4, 264(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a5, 256(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft0, 248(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft1, 240(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft2, 232(sp) # 8-byte Folded Reload
@@ -1560,7 +1528,7 @@ define void @foo_with_call() #1 {
 ; CHECK-RV64E-FD-NEXT:    fld ft9, 16(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft10, 8(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft11, 0(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    addi sp, sp, 464
+; CHECK-RV64E-FD-NEXT:    addi sp, sp, 336
 ; CHECK-RV64E-FD-NEXT:    mret
   %call = call i32 @otherfoo()
   ret void
@@ -2993,34 +2961,18 @@ define void @foo_fp_with_call() #2 {
 ;
 ; CHECK-RV64E-FD-LABEL: foo_fp_with_call:
 ; CHECK-RV64E-FD:       # %bb.0:
-; CHECK-RV64E-FD-NEXT:    addi sp, sp, -472
-; CHECK-RV64E-FD-NEXT:    sd ra, 464(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t0, 456(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t1, 448(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t2, 440(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s0, 432(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a0, 424(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a1, 416(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a2, 408(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a3, 400(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a4, 392(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a5, 384(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a6, 376(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd a7, 368(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s2, 360(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s3, 352(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s4, 344(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s5, 336(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s6, 328(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s7, 320(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s8, 312(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s9, 304(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s10, 296(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd s11, 288(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t3, 280(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t4, 272(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t5, 264(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    sd t6, 256(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    addi sp, sp, -344
+; CHECK-RV64E-FD-NEXT:    sd ra, 336(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd t0, 328(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd t1, 320(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd t2, 312(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd s0, 304(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a0, 296(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a1, 288(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a2, 280(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a3, 272(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a4, 264(sp) # 8-byte Folded Spill
+; CHECK-RV64E-FD-NEXT:    sd a5, 256(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft0, 248(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft1, 240(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft2, 232(sp) # 8-byte Folded Spill
@@ -3053,35 +3005,19 @@ define void @foo_fp_with_call() #2 {
 ; CHECK-RV64E-FD-NEXT:    fsd ft9, 16(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft10, 8(sp) # 8-byte Folded Spill
 ; CHECK-RV64E-FD-NEXT:    fsd ft11, 0(sp) # 8-byte Folded Spill
-; CHECK-RV64E-FD-NEXT:    addi s0, sp, 472
+; CHECK-RV64E-FD-NEXT:    addi s0, sp, 344
 ; CHECK-RV64E-FD-NEXT:    call otherfoo
-; CHECK-RV64E-FD-NEXT:    ld ra, 464(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t0, 456(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t1, 448(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t2, 440(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s0, 432(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a0, 424(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a1, 416(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a2, 408(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a3, 400(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a4, 392(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a5, 384(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a6, 376(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld a7, 368(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s2, 360(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s3, 352(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s4, 344(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s5, 336(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s6, 328(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s7, 320(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s8, 312(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s9, 304(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s10, 296(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld s11, 288(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t3, 280(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t4, 272(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t5, 264(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    ld t6, 256(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld ra, 336(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld t0, 328(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld t1, 320(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld t2, 312(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld s0, 304(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a0, 296(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a1, 288(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a2, 280(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a3, 272(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a4, 264(sp) # 8-byte Folded Reload
+; CHECK-RV64E-FD-NEXT:    ld a5, 256(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft0, 248(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft1, 240(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft2, 232(sp) # 8-byte Folded Reload
@@ -3114,7 +3050,7 @@ define void @foo_fp_with_call() #2 {
 ; CHECK-RV64E-FD-NEXT:    fld ft9, 16(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft10, 8(sp) # 8-byte Folded Reload
 ; CHECK-RV64E-FD-NEXT:    fld ft11, 0(sp) # 8-byte Folded Reload
-; CHECK-RV64E-FD-NEXT:    addi sp, sp, 472
+; CHECK-RV64E-FD-NEXT:    addi sp, sp, 344
 ; CHECK-RV64E-FD-NEXT:    mret
   %call = call i32 @otherfoo()
   ret void

``````````

</details>


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


More information about the llvm-commits mailing list