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-22 18:49:08 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-22 18:49:08 +0800
commit8a4bb6e3b0bffa0ed79b51347b12ee4293b622a7 (patch)
tree51278f18d8954e7abb5820cb9d529e3d5e5f322b /backend/include/rcc/Target/RISCV/RISCVSubtarget.h
parent9ca9fb23124e8c5d714e9668210855a23dd2a72f (diff)
downloadrcc-project-8a4bb6e3b0bffa0ed79b51347b12ee4293b622a7.tar.gz
rcc-project-8a4bb6e3b0bffa0ed79b51347b12ee4293b622a7.tar.xz
[CodeGen] Generate RISC-V macro fusion rules
Diffstat (limited to 'backend/include/rcc/Target/RISCV/RISCVSubtarget.h')
-rw-r--r--backend/include/rcc/Target/RISCV/RISCVSubtarget.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
index a77a045..c8a4298 100644
--- a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
+++ b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
@@ -10,12 +10,15 @@
#include <memory>
#include <span>
#include <string>
+#include <string_view>
namespace rcc {
class InstructionSelector;
class LegalizerInfo;
class TargetCallLowering;
+class TargetSchedulingHooks;
+class TargetSchedulingModel;
namespace riscv {
@@ -45,6 +48,7 @@ enum class RISCVSubtargetOption : std::uint8_t {
FusionAddImmediateLoad,
FusionAUIPCAddImmediate,
FusionAUIPCLoad,
+ FusionBitfieldExtract,
FusionLoadDoubleAdd,
FusionLogicImmediateRegister,
FusionLogicRegisterImmediate,
@@ -53,6 +57,7 @@ enum class RISCVSubtargetOption : std::uint8_t {
FusionLUILoad,
FusionMultiplyAdd,
FusionShiftBitExtract,
+ FusionShiftedAddLoad,
FusionShiftedZeroExtendWord,
FusionZeroExtendHalf,
FusionZeroExtendWord,
@@ -74,6 +79,7 @@ public:
[[nodiscard]] bool has(RISCVExtension Extension) const noexcept;
[[nodiscard]] bool has(RISCVSubtargetOption Option) const noexcept;
+ [[nodiscard]] bool hasFeature(std::string_view Feature) const noexcept;
friend bool operator==(const RISCVSubtargetFeatures &Left,
const RISCVSubtargetFeatures &Right) = default;
@@ -114,6 +120,7 @@ public:
[[nodiscard]] InstructionSelector *getInstructionSelector() const;
[[nodiscard]] const LegalizerInfo *getLegalizerInfo() const;
[[nodiscard]] const RISCVRegisterBankInfo *getRegBankInfo() const;
+ [[nodiscard]] const TargetSchedulingModel &schedulingModel() const noexcept;
private:
RISCVSubtargetFeatures Features;
@@ -123,6 +130,8 @@ private:
mutable std::unique_ptr<InstructionSelector> InstSelector;
mutable std::unique_ptr<LegalizerInfo> Legalizer;
mutable std::unique_ptr<RISCVRegisterBankInfo> RegBankInfo;
+ std::unique_ptr<TargetSchedulingHooks> SchedulingHooks;
+ std::unique_ptr<TargetSchedulingModel> SchedulingModel;
};
} // namespace riscv