From 3341938bb644e6fc39afa6a8fcb1306604999e42 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Wed, 12 Aug 2026 22:37:49 +0800 Subject: [RISCV] Split the GlobalISel target components --- backend/include/rcc/Target/RISCV/RISCVSubtarget.h | 40 +++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'backend/include/rcc/Target/RISCV/RISCVSubtarget.h') 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 +#include #include #include -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 CallLoweringInfo; + mutable std::unique_ptr InstSelector; + mutable std::unique_ptr Legalizer; + mutable std::unique_ptr RegBankInfo; +}; + +} // namespace riscv +} // namespace rcc #endif // RCC_TARGET_RISCV_RISCVSUBTARGET_H -- cgit v1.2.3