aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
diff options
context:
space:
mode:
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