[llvm] [BOLT][RISCV] Implement getCalleeSavedRegs (PR #69161)
Job Noorman via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 16 01:36:45 PDT 2023
https://github.com/mtvec created https://github.com/llvm/llvm-project/pull/69161
The main reason for implementing this now is to ensure the `assume=abi.test` test passes on RISC-V. Since it uses `--indirect-call-promotion=all`, it requires some support for register analysis on the target.
Further testing and implementation of register/frame analysis on RISC-V will come later.
>From 65edb7cd34d5df7f6bf2ad7c52c56afab02394df Mon Sep 17 00:00:00 2001
From: Job Noorman <jnoorman at igalia.com>
Date: Mon, 16 Oct 2023 10:32:02 +0200
Subject: [PATCH] [BOLT][RISCV] Implement getCalleeSavedRegs
The main reason for implementing this now is to ensure the
`assume=abi.test` test passes on RISC-V. Since it uses
`--indirect-call-promotion=all`, it requires some support for register
analysis on the target.
Further testing and implementation of register/frame analysis on RISC-V
will come later.
---
bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp b/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp
index 64bd318e06e8709..85855fbf3ab97f4 100644
--- a/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp
+++ b/bolt/lib/Target/RISCV/RISCVMCPlusBuilder.cpp
@@ -42,6 +42,22 @@ class RISCVMCPlusBuilder : public MCPlusBuilder {
*RISCVExprB.getSubExpr(), Comp);
}
+ void getCalleeSavedRegs(BitVector &Regs) const override {
+ Regs |= getAliases(RISCV::X2);
+ Regs |= getAliases(RISCV::X8);
+ Regs |= getAliases(RISCV::X9);
+ Regs |= getAliases(RISCV::X18);
+ Regs |= getAliases(RISCV::X19);
+ Regs |= getAliases(RISCV::X20);
+ Regs |= getAliases(RISCV::X21);
+ Regs |= getAliases(RISCV::X22);
+ Regs |= getAliases(RISCV::X23);
+ Regs |= getAliases(RISCV::X24);
+ Regs |= getAliases(RISCV::X25);
+ Regs |= getAliases(RISCV::X26);
+ Regs |= getAliases(RISCV::X27);
+ }
+
bool shouldRecordCodeRelocation(uint64_t RelType) const override {
switch (RelType) {
case ELF::R_RISCV_JAL:
More information about the llvm-commits
mailing list