aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 22:37:49 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-12 22:37:49 +0800
commit3341938bb644e6fc39afa6a8fcb1306604999e42 (patch)
treea7586c0a8a9d3e7e9dbc8709daf4dd76ca51be5f /backend/include/rcc/Target/RISCV/RISCVSubtarget.h
parent0bb35fa2306a66f1f0baf118619b5c1640ed9c01 (diff)
downloadrcc-project-3341938bb644e6fc39afa6a8fcb1306604999e42.tar.gz
rcc-project-3341938bb644e6fc39afa6a8fcb1306604999e42.tar.xz
[RISCV] Split the GlobalISel target components
Diffstat (limited to 'backend/include/rcc/Target/RISCV/RISCVSubtarget.h')
-rw-r--r--backend/include/rcc/Target/RISCV/RISCVSubtarget.h40
1 files changed, 38 insertions, 2 deletions
diff --git a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
index d5f088f..28718f0 100644
--- a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
+++ b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
@@ -6,10 +6,19 @@
#include "rcc/Support/Error.h"
#include <cstdint>
+#include <memory>
#include <span>
#include <string>
-namespace rcc::riscv {
+namespace rcc {
+
+class InstructionSelector;
+class LegalizerInfo;
+class TargetCallLowering;
+
+namespace riscv {
+
+class RISCVRegisterBankInfo;
enum class RISCVExtension : std::uint8_t {
I,
@@ -42,6 +51,33 @@ private:
std::uint16_t Enabled = 0;
};
-} // namespace rcc::riscv
+class RISCVSubtarget final {
+public:
+ explicit RISCVSubtarget(RISCVSubtargetFeatures Features);
+ RISCVSubtarget(const RISCVSubtarget &) = delete;
+ RISCVSubtarget &operator=(const RISCVSubtarget &) = delete;
+ RISCVSubtarget(RISCVSubtarget &&) = delete;
+ RISCVSubtarget &operator=(RISCVSubtarget &&) = delete;
+ ~RISCVSubtarget();
+
+ [[nodiscard]] const RISCVSubtargetFeatures &features() const noexcept {
+ return Features;
+ }
+
+ [[nodiscard]] const TargetCallLowering *getCallLowering() const;
+ [[nodiscard]] InstructionSelector *getInstructionSelector() const;
+ [[nodiscard]] const LegalizerInfo *getLegalizerInfo() const;
+ [[nodiscard]] const RISCVRegisterBankInfo *getRegBankInfo() const;
+
+private:
+ RISCVSubtargetFeatures Features;
+ mutable std::unique_ptr<TargetCallLowering> CallLoweringInfo;
+ mutable std::unique_ptr<InstructionSelector> InstSelector;
+ mutable std::unique_ptr<LegalizerInfo> Legalizer;
+ mutable std::unique_ptr<RISCVRegisterBankInfo> RegBankInfo;
+};
+
+} // namespace riscv
+} // namespace rcc
#endif // RCC_TARGET_RISCV_RISCVSUBTARGET_H