aboutsummaryrefslogtreecommitdiff
path: root/backend/include/rcc
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-13 19:09:51 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-13 19:09:51 +0800
commitafce8c3e93059df6f9aab1bc57f72c83674d6d92 (patch)
treed32fdff80c90d2e643c9133a5cf5db0e3a7ea067 /backend/include/rcc
parent86caf2db80050b857fac77269708263a1826c5a2 (diff)
downloadrcc-project-afce8c3e93059df6f9aab1bc57f72c83674d6d92.tar.gz
rcc-project-afce8c3e93059df6f9aab1bc57f72c83674d6d92.tar.xz
[RISCV] Model non-ISA subtarget features
Diffstat (limited to 'backend/include/rcc')
-rw-r--r--backend/include/rcc/Target/RISCV/RISCVSubtarget.h35
1 files changed, 34 insertions, 1 deletions
diff --git a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
index 28718f0..9594a34 100644
--- a/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
+++ b/backend/include/rcc/Target/RISCV/RISCVSubtarget.h
@@ -34,6 +34,35 @@ enum class RISCVExtension : std::uint8_t {
Count,
};
+enum class RISCVSubtargetOption : std::uint8_t {
+ DisablePostMISchedLoadClustering,
+ DisablePostMISchedStoreClustering,
+ FusionAddLoad,
+ FusionAddMemory,
+ FusionAddImmediateLoad,
+ FusionAUIPCAddImmediate,
+ FusionAUIPCLoad,
+ FusionLoadDoubleAdd,
+ FusionLogicImmediateRegister,
+ FusionLogicRegisterImmediate,
+ FusionLogicRegisterRegister,
+ FusionLUIAddImmediate,
+ FusionLUILoad,
+ FusionMultiplyAdd,
+ FusionShiftBitExtract,
+ FusionShiftedZeroExtendWord,
+ FusionZeroExtendHalf,
+ FusionZeroExtendWord,
+ PreferWordInstructions,
+ ReserveX6,
+ ReserveX7,
+ SaveRestore,
+ TaggedGlobals,
+ UnalignedScalarMemory,
+ UsePostRAScheduler,
+ Count,
+};
+
class RISCVSubtargetFeatures final {
public:
[[nodiscard]] static Expected<RISCVSubtargetFeatures>
@@ -41,14 +70,18 @@ public:
[[nodiscard]] static RISCVSubtargetFeatures rv64gc() noexcept;
[[nodiscard]] bool has(RISCVExtension Extension) const noexcept;
+ [[nodiscard]] bool has(RISCVSubtargetOption Option) const noexcept;
friend bool operator==(const RISCVSubtargetFeatures &Left,
const RISCVSubtargetFeatures &Right) = default;
private:
- explicit constexpr RISCVSubtargetFeatures(std::uint16_t Enabled) noexcept : Enabled(Enabled) {}
+ explicit constexpr RISCVSubtargetFeatures(std::uint16_t Enabled,
+ std::uint32_t Options = 0) noexcept
+ : Enabled(Enabled), Options(Options) {}
std::uint16_t Enabled = 0;
+ std::uint32_t Options = 0;
};
class RISCVSubtarget final {