[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