[llvm] [RISCV] Save vector registers in interrupt handler. (PR #143808)

Brandon Wu via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 12 09:20:27 PDT 2025


================
@@ -56,14 +56,44 @@ def CSR_XLEN_F32_Interrupt: CalleeSavedRegs<(add CSR_Interrupt,
 def CSR_XLEN_F64_Interrupt: CalleeSavedRegs<(add CSR_Interrupt,
                                              (sequence "F%u_D", 0, 31))>;
 
+// Same as CSR_Interrupt, but including all vector registers.
+def CSR_XLEN_V_Interrupt: CalleeSavedRegs<(add CSR_Interrupt,
+                                           (sequence "V%u", 0, 31))>;
+
+// Same as CSR_Interrupt, but including all 32-bit FP registers and all vector
+// registers.
+def CSR_XLEN_F32_V_Interrupt: CalleeSavedRegs<(add CSR_Interrupt,
+                                               (sequence "F%u_F", 0, 31),
+                                               (sequence "V%u", 0, 31))>;
+
+// Same as CSR_Interrupt, but including all 64-bit FP registers and all vector
+// registers.
+def CSR_XLEN_F64_V_Interrupt: CalleeSavedRegs<(add CSR_Interrupt,
+                                               (sequence "F%u_D", 0, 31),
+                                               (sequence "V%u", 0, 31))>;
----------------
4vtomat wrote:

Seems the register is set if any of it's alias(including sub-registers and super-registers) is used, so in this case if `v24` is clobbered, all of super-registers of `v24` in callee-saved lists including `v24`, `v24m2`, `v24m4` and `v24m8` is set in `SavedRegs`. 

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


More information about the llvm-commits mailing list